Tworzenie listy odtwarzania ipoda - skrypcik WSH

Wednesday, November 26, 2008, autor: Rafał

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ąć.



 

 

 



Zostaw komentarz


 


 


 


 

*
Wpisz słowo z obrazka. Kliknij na obrazku aby usłyszeć angielską wersję audio
Kliknij na obrazku aby usłyszeć angielską wersję audio