Differenze tra le versioni di "Ottenere un semplice spettroscopio mediante il Componente gb.media"
Da Gambas-it.org - Wikipedia.
Riga 103: | Riga 103: | ||
Wait 0.01 | Wait 0.01 | ||
Wend | Wend | ||
− | + | ||
Wait pl.Duration | Wait pl.Duration | ||
Riga 114: | Riga 114: | ||
Public Sub MPipe_Position() | Public Sub MPipe_Position() | ||
− | Me.Title = " | + | Me.Title = "Durata audio: " & Str(Time(0, 0, 0, pl.Duration * 1000)) & |
+ | " - " & 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