Conoscere la durata di un file audio mediante il Componente gb.media
Per conoscere la durata di un file audio, il Componente gb.media fornisce la Proprietà .Duration della Classe MediaPlayer. In particolare questa Proprietà restituisce un valore di tipo Float che rappresenta la durata del brano musicale espresso in secondi.
Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione del Metodo ".Play()".
Indice
Usare la Classe "MediaPlayer"
Mostriamo un essenziale esempio usando la Classe "MediaPlayer":
Public Sub Main() Dim mp As MediaPlayer With mp = New MediaPlayer .URL = Media.URL("/percorso/del/file/audio") .Audio.Mute = True .Play Repeat ' Resta in attesa fino a che non viene conosciuta la durata del brano audio Wait 0.01 Until mp.Duration > 0.0 Print "Durata del brano: " & CStr(Time(0, 0, 0, mp.Duration * 1000)) .Stop() .Close() End With End
Usare la Classe "MediaPipeline"
Per utilizzare invece la Proprietà ".Duration" della Classe MediaPipeline si rinvia agli esempi presenti nella seguente pagina:
Eseguire i file audio mediante la Classe ''MediaPipeline'' del componente gb.media
Conoscere a durata di un file audio convertendolo preliminarmente in formato WAV
Si potrà conoscere la durata di un file audio, che non sia di formato WAV, con una procedura complessa convertendolo innanzitutto in detto formato audio e successivamente leggendo il valore del Byte-Rate al byte d'indice 28 del blocco header del file WAV generato.
Private bo As Boolean Public Sub Main() Dim s As String Dim fl As File Dim br, d As Integer Dim bb As Byte[] If Exist("/tmp/file.wav") Then Kill "/tmp/file.wav" s = "/percorso/del/file/audio" Conversione_in_WAV(s) fl = Open "/tmp/file.wav" For Read ' Legge il Byte-Rate del file WAV:" Seek #fl, 28 Read #fl, br ' Ottiene la durata del file audio:" Print "Dutata: "; Time(0, 0, 0, (Lof(fl) \ br) * 1000) End Private Procedure Conversione(s As String) Dim pl As MediaPipeline Dim src, map, con, mad, que, wav, snk As MediaControl Dim fil As MediaFilter Dim temporaneo As String temporaneo = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = s map = New MediaControl(pl, "decodebin") con = New MediaControl(pl, "audioconvert") wav = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = temporaneo src.LinkTo(map) map.LinkLaterTo(con) con.LinkTo(wav) wav.LinkTo(snk) pl.Play() Repeat Wait 0.01 Until bo Copy temporaneo To "/tmp/file.wav" pl.Stop pl.Close End Public Sub PLine_End() bo = True End
Note
Si è notato che la Proprietà ".Duration" non riesce a conoscere la durata audio di alcuni file MP3.