Conoscere la durata di un file Midi mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.

Per conoscere la durata di un file Midi, 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 file Midi espresso in secondi.

Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione della funzione ".Play()".

Usando la Classe MediaPlayer

Public Sub Main()

 Dim mp As MediaPlayer

 With mp = New MediaPlayer
   .URL = Media.URL("/percorso/del/file.mid")
   .Audio.Mute = True  ' Questa istruzione non è essenziale ai fini dell'ottenimento della durata
   .Play()
   Print "Durata del file Midi: "; Time(0, 0, 0, .Duration * 1000)
   .Stop()
   .Close()
 End With

End


Usando la Classe MediaPipeline e MediaControl con il plugin "decodebin" di GStreamer

Public Sub Main()

 Dim pl As MediaPipeline
 Dim mid, dcb, fak As MediaControl

 pl = New MediaPipeline
 mid = New MediaControl(pl, "filesrc")
 mid["location"] = "/percorso/del/file.mid"
 dcb = New MediaControl(pl, "decodebin")
 fak = New MediaControl(pl, "fakesink")
 
 mid.LinkTo(dcb)
 dcb.LinkLaterTo(fak)
 
 With pl
   .Play()
 Print "Durata del file Midi: \e[1m"; Time(0, 0, 0, .Duration * 1000)
   .Stop()
   .Close()
 End With

End


Se la Proprietà ".Duration" restituisce un valore = 0

Talvolta può accadere che la Proprietà ".Duration", ritardando la determinazione della durata del file Midi, restituisca un valore = 0.0.
In tal caso è sufficiente far precedere un ciclo, dal quale si uscirà soltanto quando la Proprietà ".Duration" restituirà un valore superiore a 0.0.

Di seguito un esempio essenziale per ottenere con sicurezza il valore della durata di un file Midi dalla Proprietà ".Duration":

 Repeat 
   Wait 0.01
 Until mp.Duration > 0.0

 Print "Durata del file Midi: \e[34m"; Time(0, 0, 0, mp.Duration * 1000)