Archiwum Tworzenie listy odtwarzania ipoda – skrypcik WSH

0 Comments

Pisałem już na temat programu, który pozwala na kopiowanie i odtwarzanie plików z ipoda z pominięciem iTunnes. Ponieważ nie zawsze mam możliwość pracy w systemie Linuks i w pracy korzystam też z Windows XP przyjrzałem się nieco możliwości odtwarzania muzyki w środowisku Windows bezpośrednio z ipoda.
Z natury jestem minimalistą, więc często korzystam z mplayera uruchamianego z linii komend. A jeśli już coś okienkowego, to Winamp (raczej unikam Windows Media Playera).

Korzystając z ipoda zauważymy, że zachowuje się on jak każdy inny zewnętrzny dysk USB. Chociaż na pierwszy rzut oka może się wydawać, że nie ma na nim dodanych w iTunes  (lub innym programie) utworów mp3, to wystarczy zajrzeć do ukrytego folderu „iPod_Control” , aby sie przekonać że dane te są widoczne jak każde inne. We wspomnianym folderze jest folder „Music”, w którym znajdziemy foldery typu Fxx, gdzie xx to kolejny numer. W swoim ipodzie mam foldery od F00 do F49. Znajdują się w nim pliki mp3 o dziwnych  nazwach – na przykład XAKO.mp3. Informacja o tym, do jakiego albumu utwór należy i jaki ma tytuł lub jaką miał prawdziwą nazwę jest zapisana w bazie iTunnes. Jest ona zaszyfrowana, a więc dla teoretycznie niedostępna. Zmiana nazw plików i rozrzucanie utworów po różnych katalogach to kolejna sztuczka Apple, aby utrudnić korzystanie z utworów inaczej niż poprzez iTunnes. Z pomocą przychodzą tagi id3 zapisane w plikach mp3.
Ponieważ staram się dbać o uzupełnianie tagów, dlatego pomyślałem, że warto tę informację wykorzystać. Dostęp do tagów nie jest skomplikowany. Poniżej mały skrypcik, który sobie napisałem korzystając z informacji znalezionych w Internecie (np. o tym jak czytać tagi poprzez skrypt w Windozie). Skrypcik działa w Windows XP. Dla systemu Vista trzeba by go nieco zmienić w miejscu „objFolder.GetDetailsOf(objFile, XX)”. Numerki dla danej części tagu różnią się pomiędzy systemem XP i Vista. Np. dla „Artist” w XP mamy:

objFolder.GetDetailsOf(objFile, 16)

a dla Visty będzie to:

objFolder.GetDetailsOf(objFile, 13)

Oto sam skrypcik (wystarczy go skopiować do notatnika i zapisać w pliku nazwa.vbs).

Set WshShell = WScript.CreateObject(„WScript.Shell”)
Set BrowseDialogBox = WScript.CreateObject(„Shell.Application”)
Set strFolder = BrowseDialogBox.BrowseForFolder(0, „Wskaż folder ‘iPod_Control’, w którym znajdują się pliki mp3″, &H0001)

If InStr(1, TypeName(strFolder), „Folder”) = 0 Then
WScript.Echo „Nie wskazano żadnego folderu, dlatego nastąpi zakończenie pracy skryptu!”
Wscript.Quit ‘ Jeżeli nic nie wskazano to zakończ skrypt
Else

Set inputdiabox = WScript.CreateObject(„WScript.Shell”)
Message =”W polu poniżej wpisz nazwę wykonawcy (pole ‘Artist’ w tagu id3)”
Title = „Parametry wejściowe skrytpu – Artysta”
artist = InputBox(Message,Title,”", 100, 100)

ipodFolder = strFolder.Self.Path
ipodFolder = ipodFolder & „\Music\”

Set objFSO = CreateObject(„Scripting.FileSystemObject”)
Set objFolder = objFSO.GetFolder(ipodFolder)
Set colSubfolders = objFolder.Subfolders

Set m3uFile = objFSO.OpenTextFile(„C:\” & artist & „.m3u”, 2, 1)
m3uFile.WriteLine(„#EXTM3U”)

For Each objSubfolder in colSubfolders
Set objShell = WScript.CreateObject(„Shell.Application”)
Set objFolder = objShell.NameSpace(ipodFolder & objSubfolder.Name)
Set colFiles = objFolder.Items

For Each objFile in colFiles

if objFolder.GetDetailsOf(objFile, 16) = artist then
m3uFile.WriteLine(ipodFolder & objSubfolder.Name & „\” & objFile.Name)
end if

Next

Next

m3uFile.Close ‘zamknięcie pliku

End If

Wscript.Echo „Koniec pracy skryptu. Lista M3U została zapisana na dysku C”
WScript.Quit

Wywołanie jest takie, że najpierw wskazujemy folder „iPod_Control”, a potem podajemy nazwę artysty (można zmienić skrypt i filtrować na podstawie innego tagu). W wyniku działania powstanie prosta lista m3u rozumiana przez WinAmp i mplayera. Oto przykład takiej listy:

#EXTM3U
G:\iPod_Control\Music\F00\XAKO.mp3
G:\iPod_Control\Music\F01\CAQY.mp3
G:\iPod_Control\Music\F02\TLBB.mp3

Mówiąc krótko skrypt jest niezwykle prymitywny, ale spełnia swoją rolę i ułatwia mi życie. Można mieć zastrzeżenia do długości pracy skryptu, ale nie stanowi to dla mnie przeszkody, a czasu na rozwijanie go nie mam (kiedyś bawiłem się w programik VB do odczytu tagów, ale też raczej dla zabawy). Może się komuś przyda lub zechce go rozwinąć.

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word