Differenze tra le versioni di "Ottenere un semplice spettroscopio mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 47: Riga 47:
 
   
 
   
 
   pl.Close()
 
   pl.Close()
 +
  Print "\nEsecuzione terminata !"
 +
  Quit
 
   
 
   
 
  End
 
  End
Riga 53: Riga 55:
 
  Public Sub MPipe_Position()
 
  Public Sub MPipe_Position()
 
   
 
   
   Write "\rTempo Trascorso: " & Time(0, 0, 0, pl.Position * 1000)
+
   Write "\rTempo trascorso: " & Time(0, 0, 0, pl.Position * 1000)
 
   Flush  
 
   Flush  
 +
 +
End
 +
Con il seguente codice mostreremo lo spettroscopio all'interno di una ''DrawingArea'':
 +
Private pl As MediaPipeline
 +
 +
 +
Public Sub Button1_Click()
 +
 +
  Dim src, dcb, tee, que1, que2 As MediaControl
 +
  Dim vcon, spe, vsnk As MediaControl
 +
  Dim acon, asnk As MediaControl
 +
 
 +
  pl = New MediaPipeline As "MPipe"
 +
 
 +
  src = New MediaControl(pl, "filesrc")
 +
  src["location"] = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>"
 +
  dcb = New MediaControl(pl, "decodebin")
 +
  tee = New MediaControl(pl, "tee")
 +
  que1 = New MediaControl(pl, "queue")
 +
  vcon = New MediaControl(pl, "audioconvert")
 +
  spe = New MediaControl(pl, "spectrascope")
 +
  vsnk = New MediaControl(pl, "ximagesink")
 +
  que2 = New MediaControl(pl, "queue")
 +
  acon = New MediaControl(pl, "audioconvert")
 +
  asnk = New MediaControl(pl, "autoaudiosink")
 +
 +
  src.LinkTo(dcb)
 +
  dcb.LinkLaterTo(tee)
 +
<FONT Color=gray>' '''''Parte video:'''''</font>
 +
  tee.LinkTo(que1)
 +
  que1.LinkTo(vcon)
 +
  vcon.LinkTo(spe)
 +
  spe.LinkTo(vsnk)
 +
<FONT Color=gray>' '''''Parte audio:'''''</font>
 +
  tee.LinkTo(que2)
 +
  que2.LinkTo(acon)
 +
  acon.LinkTo(asnk)
 +
 +
<FONT Color=gray>' ''Dirige la grafica alla "DrawingArea":''</font>
 +
  vsnk.SetWindow(DrawingArea1)
 +
 +
  pl.Play()
 +
 +
  While pl.Duration < 1
 +
    Wait 0.01
 +
  Wend
 +
 +
  Wait pl.Duration
 +
 +
  pl.Close()
 +
  Me.Title = "Esecuzione terminata !"
 
   
 
   
 
  End
 
  End
 
   
 
   
 
   
 
   
  Public Sub MPipe_End()
+
  Public Sub MPipe_Position()
 
   
 
   
   Print "Esecuzione terminata !"
+
   Me.Title = "Durata audio: " & Str(Time(0, 0, 0, pl.Duration * 1000)) &
  Quit
+
            "  -  " & Str(Time(0, 0, 0, pl.Position * 1000))
 
   
 
   
 
  End
 
  End

Versione attuale delle 03:52, 7 nov 2023

Usando il plugin "spectrascope" di GStreamer è possibile sottoporre il flusso di dati audio a un semplice spettroscopio.

Mostriamo un esempio con un file audio gestito con il plugin decodificatore "decodebin".
Si vedrà il semplice spettroscopio, fornito da GStreamer, e si ascolterà contemporaneamente l'audio.

Private pl As MediaPipeline


Public Sub Main()

 Dim src, dcb, tee, que1, que2 As MediaControl
 Dim vcon, spe, vsnk As MediaControl
 Dim acon, asnk As MediaControl
 
 pl = New MediaPipeline As "MPipe"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/file/audio"
 dcb = New MediaControl(pl, "decodebin")
 tee = New MediaControl(pl, "tee")
 que1 = New MediaControl(pl, "queue")
 vcon = New MediaControl(pl, "audioconvert")
 spe = New MediaControl(pl, "spectrascope")
 vsnk = New MediaControl(pl, "ximagesink")
 que2 = New MediaControl(pl, "queue")
 acon = New MediaControl(pl, "audioconvert")
 asnk = New MediaControl(pl, "autoaudiosink")

 src.LinkTo(dcb)
 dcb.LinkLaterTo(tee)
' Parte video:
 tee.LinkTo(que1)
 que1.LinkTo(vcon)
 vcon.LinkTo(spe)
 spe.LinkTo(vsnk)
' Parte audio:
 tee.LinkTo(que2)
 que2.LinkTo(acon)
 acon.LinkTo(asnk)

 pl.Play()

 While pl.Duration < 1
   Wait 0.01
 Wend
 Print "La durata del file audio è: "; Time(0, 0, 0, pl.Duration * 1000)
 Wait pl.Duration

 pl.Close()
 Print "\nEsecuzione terminata !"
 Quit

End


Public Sub MPipe_Position()

 Write "\rTempo trascorso: " & Time(0, 0, 0, pl.Position * 1000)
 Flush 

End

Con il seguente codice mostreremo lo spettroscopio all'interno di una DrawingArea:

Private pl As MediaPipeline


Public Sub Button1_Click()

 Dim src, dcb, tee, que1, que2 As MediaControl
 Dim vcon, spe, vsnk As MediaControl
 Dim acon, asnk As MediaControl
 
 pl = New MediaPipeline As "MPipe"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/file/audio"
 dcb = New MediaControl(pl, "decodebin")
 tee = New MediaControl(pl, "tee")
 que1 = New MediaControl(pl, "queue")
 vcon = New MediaControl(pl, "audioconvert")
 spe = New MediaControl(pl, "spectrascope")
 vsnk = New MediaControl(pl, "ximagesink")
 que2 = New MediaControl(pl, "queue")
 acon = New MediaControl(pl, "audioconvert")
 asnk = New MediaControl(pl, "autoaudiosink")

 src.LinkTo(dcb)
 dcb.LinkLaterTo(tee)
' Parte video:
 tee.LinkTo(que1)
 que1.LinkTo(vcon)
 vcon.LinkTo(spe)
 spe.LinkTo(vsnk)
' Parte audio:
 tee.LinkTo(que2)
 que2.LinkTo(acon)
 acon.LinkTo(asnk)

' Dirige la grafica alla "DrawingArea":
 vsnk.SetWindow(DrawingArea1)

 pl.Play()

 While pl.Duration < 1
   Wait 0.01
 Wend

 Wait pl.Duration

 pl.Close()
 Me.Title = "Esecuzione terminata !"

End


Public Sub MPipe_Position()

 Me.Title = "Durata audio: " & Str(Time(0, 0, 0, pl.Duration * 1000)) &
            "  -  " & Str(Time(0, 0, 0, pl.Position * 1000))

End