http://digilander.libero.it/Cenati

Elenco files Mp3

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript |

 

 

 

 

 

Elenco files Mp3 presenti sul disco fisso

Crea una lista in in foglio Excel contenente alcuni dati relativi ai files mp3 contenuti nel disco indicato.

Richiede che siano installati Microsoft Excel e il Windows Media Player in una versione successiva alla 7.

Il programma funziona appoggiandosi al nuovo modello ad oggetti del Media Player disponibile dalla versione 7. Io ho installato la 9.00 (non intenzionalmente, era nel security kit che MS mi ha spedito a casa) e funziona benone. La descrizione del modello ad oggetti l'ho trovata in un cd allegato ad un libro su WMP che spiegava come customizzare il programma. Dalle installazioni personalizzate agli skin. Una piccola sezione spiegava come incorporare il player in una pagina web. Sul cd c'era un file di help con la descrizione dei metodi e delle proprietà dell'object model ma senza alcun esempio di utilizzo.

Media Player è capace di cercare autonomamente tutti i files audio del disco fisso e di catalogarli. Tuttavia queste funzioni non sono stato in grado di attivarle come sembrerebbe logico che funzionasse secondo le istruzioni. Per ottenere la lista dei files mp3 mi sono quindi affidato ad un veloce comando dos che crea un file temporaneo di testo contenente il pathname di tutti gli *.mp3. Ogni riga di questo file va a finire in un vettore "songlist( )".

L'output dello script va a finire in un foglio di Excel. Attivarlo e scriverci è molto semplice, basta usare le istruzioni seguenti:
set oXL = WScript.CreateObject("Excel.Application")
oXL.Visible = TRUE
oXL.WorkBooks.Add
oXL.cells(riga, colonna)="contenuto della cella"

Manipolando opportunamente Riga e Colonna (magari con un ciclo for/next) si possono riempire agevolmente le celle del foglio elettronico.

Alcuni dati relativi alle canzoni vengono recuperati utilizzando direttamente delle funzioni di mediaplayer, come player.currentmedia.duration che restituisce la durata in secondi del brano.

Altre informazioni si possono ottenere in modo diverso tramite funzioni che leggono i tag ID3. Sono un poco più complesse in quanto possono servire anche a leggere i tag incorporati nei file wma, che è il formato proprietario del mediaplayer.

Per avere queste informazioni è necessario prima di tutto che il brano sia impostato come currentmedia, cioè il file attualmente puntato dal programma. Poi bisogna sapere in quale colonna è registrato il dato che ci interessa (ad esempio l'autore, "author"). Per fare questo si interroga la proprietà player.mediaCollection.getMediaAtom("Author"). Il risultato di questa funzione va passato a player.currentMedia.getItemInfobyAtom che estrae il contenuto di quella colonna che ho specificato.

La dimensione del file e la sua data di creazione vengono invece richieste al file system e non a mediaplayer.

E' da notare che tra l'accesso ad una canzone e alla successiva ho introdotto un ritardo di sessanta millisecondi. Questo perchè alcune volte mediaplayer smetteva di fornire i dati richiesti dopo un numero variabile di richieste. Non ho fatto ulteriori studi, ma probabilmente si potrebbe ottenere un comportamento più fluido del programma chiedendo a mediaplayer stesso quando è disponibile a ricevere altre richieste. Ci sono un paio di proprietà read-only che fanno questo, ma non so quale risultato devo aspettarmi per sapere se il programma è libero oppure no.

La funzione che crea l'elenco dei file mp3 è adeguatamente commentata ed è anche piuttosto interessante. A parte il comando DIR che genera l'elenco dei file, è da notare come viene richiesto al sistema un nome di file temporaneo e come tale file viene registrato nella directory TEMP, anch'essa richiesta al sistema.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script.

Cenati Giovanni.


        
'************************************************
' File:    Lista file Mp3.vbs
' Autore:  Giovanni Cenati http://digilander.libero.it/Cenati
' Codice vbs liberamente utilizzabile citando il sito.
' Crea in excel una lista dei files Mp3 e alcuni dati aggiuntivi.
' Creates an excel file with a list of Mp3 files and some additional data.
' 2004/11/02
'************************************************
Set Player = createobject("wmplayer.ocx.7")
Set fso = CreateObject("Scripting.FileSystemObject")
set oXL = WScript.CreateObject("Excel.Application")
oXL.Visible = TRUE
oXL.WorkBooks.Add

'drive= inputbox ("Scan which drive?","List of Mp3 files - Cenati Giovanni","C:\")
drive= inputbox ("Nome del drive in cui cercare:","Lista files Mp3 - Cenati Giovanni","C:\")
Mp3List= GetListOfMp3Files(drive)
songslist = Split(Mp3List, vbCrLf) 'Creates an array of the lines of the file
Mp3List=""
dim attr(10)
attr(1)= "Artist"
attr(2)= "Album"
attr(3)= "Author"
attr(4)= "Bitrate"
attr(5)= "CreationDate"
attr(6)= "Genre"

' Column Headers - Intestazioni delle colonne
oXL.cells(1,1)="File Name"
oXL.cells(1,2)="Name"
oXL.cells(1,3)="Durata(secondi)"
oXL.cells(1,4)="Durata(min,sec)"
for i= 1 to ubound(attr)
    oXL.cells(1,4+i)=attr(i)
next
oXL.cells(1,11)="File size"
oXL.cells(1,12)="File date"

on error resume next 'for song names with אטלעש
for songnumber=0 to ubound(songslist)
    row=songnumber+2
    player.mediaCollection.add(songslist(songnumber))
    player.url=songslist(songnumber)
    oXL.cells(row,1)= songslist(songnumber)
    oXL.cells(row,2)= player.currentmedia.name
    oXL.cells(row,3)= player.currentmedia.duration
    oXL.cells(row,4)= player.currentmedia.durationstring
    for a=1 to 6
        oXL.cells(row,4+a)= player.currentMedia.getItemInfobyAtom(player.mediaCollection.getMediaAtom(attr(a)))
    next
    set f = fso.GetFile(songslist(songnumber))
    oXL.cells(row,11)= f.size
    oXL.cells(row,12)= f.DateCreated

    wscript.sleep 60 'Altrimenti si blocca - Otherwise it hangs
next

msgbox "End of job - Cenati Giovanni"  ,,"List of Mp3 Files"

function GetListOfMp3Files(drive)
 dim fso, tmp, wshshell, ofile, path
 cmd = "dir "& trim(drive) & "*.mp3 /s/b "   ' Comando DOS
 Const tmpFolder=2
 Set fso = CreateObject("Scripting.FileSystemObject")
 ' Chiede al sistema un nome di file temporaneo.
 ' Asks Windows a unique temporary file name
 tmp = fso.GetTempName
 ' Recupera il path del file temporaneo.
 ' Gets the complete path of the temp file
 path = fso.GetSpecialFolder(tmpFolder)
 tmp = path & "\" & tmp     ' Questo ט il pathname completo del file tmp.
 ' Crea un oggetto WshShell... Creates the needed wshell object
 Set WshShell = CreateObject("WScript.Shell")
 ' Esegue il comando dos e redirige l'output sul file tmp 
 ' Executes dos command and redirects the output on the tmp file
 WSHShell.Run "%comspec% /c " & cmd & " >" & tmp, 0, True
 ' Legge il contenuto del file. Reads the content
 Set oFile = fso.OpenTextFile(tmp)
 GetListOfMp3Files = oFile.ReadAll
 oFile.Close  'lo chiude - Closes the file
 fso.DeleteFile tmp   ' e lo cancella - and deletes it
end function
' *** End ***
 
 
 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript