Differenze tra le versioni di "Ottenere un semplice spettroscopio mediante il Componente gb.media"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Usando il plugin "[https://gstreamer.freedesktop.org/documentation/audiovisualizers/spectrascope.html?gi-language=c spettrascope]" èpossibile sottoporre il flusso di dati aud...") |
|||
(10 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Usando il plugin "[https://gstreamer.freedesktop.org/documentation/audiovisualizers/spectrascope.html?gi-language=c | + | Usando il plugin "[https://gstreamer.freedesktop.org/documentation/audiovisualizers/spectrascope.html?gi-language=c 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" | + | Mostriamo un esempio con un file audio gestito con il plugin decodificatore "decodebin". |
− | Private | + | <BR>Si vedrà il semplice spettroscopio, fornito da ''GStreamer'', e si ascolterà contemporaneamente l'audio. |
+ | Private pl As MediaPipeline | ||
Public Sub Main() | Public Sub Main() | ||
− | Dim | + | Dim src, dcb, tee, que1, que2 As MediaControl |
− | Dim | + | Dim vcon, spe, vsnk As MediaControl |
+ | Dim acon, asnk As MediaControl | ||
pl = New MediaPipeline As "MPipe" | pl = New MediaPipeline As "MPipe" | ||
Riga 15: | Riga 17: | ||
src["location"] = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>" | src["location"] = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>" | ||
dcb = New MediaControl(pl, "decodebin") | 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") | 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) | src.LinkTo(dcb) | ||
− | dcb.LinkLaterTo( | + | dcb.LinkLaterTo(tee) |
− | + | <FONT Color=gray>' '''''Parte video:'''''</font> | |
− | spe.LinkTo( | + | 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) | ||
pl.Play() | pl.Play() | ||
Riga 30: | Riga 44: | ||
Wend | Wend | ||
Print "La durata del file audio è: "; Time(0, 0, 0, pl.Duration * 1000) | 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"] = "<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 | Wait 0.01 | ||
− | + | Wend | |
+ | |||
+ | Wait pl.Duration | ||
pl.Close() | pl.Close() | ||
+ | Me.Title = "Esecuzione terminata !" | ||
End | End | ||
− | Public Sub | + | 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 | 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