Differenze tra le versioni di "Conoscere la durata di un file Midi mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 3: Riga 3:
 
Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione della funzione ".Play()".
 
Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione della funzione ".Play()".
  
Mostriamo un essenziale esempio:
+
===Usando la Classe ''MediaPlayer''===
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
Riga 20: Riga 20:
  
  
===Se la Proprietà ".Duration" restituisce un valore = 0===
+
===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"] = "<FONT Color=gray>''/percorso/del/file.mid''</font>"
 +
  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, <FONT Color=#B22222>.Duration</font> * 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.
 
Talvolta può accadere che la Proprietà ".Duration", ritardando la determinazione della durata del file Midi, restituisca un valore = 0.0.
 
<BR>In tal caso è sufficiente far precedere un ciclo, dal quale si uscirà soltanto quando la Proprietà ".Duration" restituirà un valore superiore a 0.0.
 
<BR>In tal caso è sufficiente far precedere un ciclo, dal quale si uscirà soltanto quando la Proprietà ".Duration" restituirà un valore superiore a 0.0.

Versione delle 18:53, 19 set 2022

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)