Differenze tra le versioni di "Riproduzione e contemporanea registrazione dell'audio di radio WEB mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 75: Riga 75:
  
  
===Uso del plugin "Decodebin" di GStreamer per decodificare l'audio in entrata===  
+
===Uso dei plugin "souphttpsrc" e "Decodebin" di GStreamer per decodificare l'audio in entrata===  
Nell'esempio in ambiente grafico, che segue, si utilizzerà il plugin "''uridecodebin'' "
+
In quest'altro esempio si farà uso dei plugin "souphttpsrc" e "Decodebin" di GStreamer.
 +
Private pl As MediaPipeline
 +
 +
 +
'''Public''' Sub ToggleButton1_Click()
 +
 
 +
  Dim src, tee, que, dcd, dcd2 As MediaControl
 +
  Dim cnv1, snk1 As MediaControl
 +
  Dim cnv2, ven, omu, snk2 As MediaControl
 +
  Dim tm As Date
 +
   
 +
  If ToggleButton1.Value Then
 +
    pl = New MediaPipeline
 +
       
 +
    src = New MediaControl(pl, "souphttpsrc")
 +
    src["location"] = <FONT Color=gray>''"http&#058;//Indirizzo/web/del/flusso/dei/dati/audio/della/radio''</font>"
 +
   
 +
    tee = New MediaControl(pl, "tee")
 +
    que = New MediaControl(pl, "queue")
 +
   
 +
<FONT Color=gray>' ''Per ascoltare l'audio della radio web:''</font>
 +
    dcd = New MediaControl(pl, "decodebin")
 +
    cnv1 = New MediaControl(pl, "audioconvert")
 +
    snk1 = New MediaControl(pl, "autoaudiosink")
 +
   
 +
<FONT Color=gray>' ''Per salvare i dati del flusso audio della radio web in un file di formato OGG:''</font>
 +
    dcd2 = New MediaControl(pl, "decodebin")
 +
    cnv2 = New MediaControl(pl, "audioconvert")
 +
    ven = New MediaControl(pl, "vorbisenc")
 +
    omu = New MediaControl(pl, "oggmux")
 +
    snk2 = New MediaControl(pl, "filesink")
 +
    snk2["location"] = "/tmp/primoaudio.ogg"        <FONT Color=gray>' ''Cartella dove sarà salvato il file audio di formato OGG:''</font>
 +
   
 +
<FONT Color=gray>' ''Divide il flusso dei dati audio in due rami identici:''</font>
 +
    src.LinkTo(tee)
 +
   
 +
<FONT Color=gray>' ''1° ramo dei dati audio (per la riproduzione sonora):''</font>
 +
    tee.LinkTo(que)
 +
    que.LinkTo(dcd)
 +
    dcd.LinkLaterTo(cnv1)
 +
    cnv1.LinkTo(snk1)
 +
   
 +
<FONT Color=gray>' ''2° ramo dei dati audio (per salvare i dati in un file OGG):''</font>
 +
    tee.LinkTo(dcd2)
 +
    dcd2.LinkLaterTo(cnv2)
 +
    cnv2.LinkTo(ven)
 +
    ven.LinkTo(omu)
 +
    omu.LinkTo(snk2)
 +
   
 +
    pl.Play()
 +
       
 +
    Repeat
 +
      Wait 0.01
 +
    Until pl.State == Media.Playing
 +
   
 +
    tm = Now
 +
   
 +
    Repeat
 +
      Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
 +
      Wait 0.01
 +
    Until pl.State == Media.Ready
 +
  Else
 +
    pl.Stop
 +
    pl.Close
 +
  Endif
 +
   
 +
'''End'''
 +
 +
 +
'''Public''' Sub Form_Close()
 +
 +
<FONT Color=gray>' ''Poiché, chiudendo il "Form", i dati salvati nel file audio vengono inspiegabilmente perduti, è necessario copiare il file audio creato in un altro nuovo file audio identico:</font>
 +
  Copy "/tmp/primoaudio.ogg" To "/tmp/audiofinale.ogg"
 +
 +
'''End'''

Versione delle 16:21, 9 nov 2020

Per riprodurre e contemporaneamente registrare i dati audio di una radio web mediante le Classi "MediaPipeline" e "MediaControl" del Componente gb.media, è necessario dividere mediante il plugin "tee" di GStreamer il flusso di dati audio, sostanzialmente duplicandolo: un ramo servirà per l'uscita in riproduzione sonora, l'altro per l'uscita da salvare in un file audio.

Uso del plugin "Uridecodebin" di GStreamer per decodificare l'audio in entrata

Nell'esempio in ambiente grafico, che segue, si utilizzerà il plugin "uridecodebin " per decodificare i dati audio ricevuti, che saranno riprodotti e anche salvati in un file di formato OGG.

 Private pl As MediaPipeline
    
    
Public Sub ToggleButton1_Click()
 
 Dim src, tee, que As MediaControl
 Dim cnv1, snk1 As MediaControl
 Dim cnv2, ven, omu, snk2 As MediaControl
 Dim tm As Date
    
 If ToggleButton1.Value Then
   pl = New MediaPipeline
       
   src = New MediaControl(pl, "uridecodebin")
   src["uri"] = "http://Indirizzo/web/del/flusso/dei/dati/audio/della/radio"
   
   tee = New MediaControl(pl, "tee")
   que = New MediaControl(pl, "queue")
    
' Per ascoltare l'audio della radio web:
   cnv1 = New MediaControl(pl, "audioconvert")
   snk1 = New MediaControl(pl, "autoaudiosink")
   
' Per salvare i dati del flusso audio della radio web in un file di formato OGG:
   cnv2 = New MediaControl(pl, "audioconvert")
   ven = New MediaControl(pl, "vorbisenc")
   omu = New MediaControl(pl, "oggmux")
   snk2 = New MediaControl(pl, "filesink")
   snk2["location"] = "/tmp/primoaudio.ogg"        ' Cartella dove sarà salvato il file audio di formato OGG:
    
' Divide il flusso dei dati audio in due rami identici:
   src.LinkLaterTo(tee)
    
' 1° ramo dei dati audio (per la riproduzione sonora):
   tee.LinkTo(que)
   que.LinkTo(cnv1)
   cnv1.LinkTo(snk1)
    
' 2° ramo dei dati audio (per salvare i dati in un file OGG):
   tee.LinkTo(cnv2)
   cnv2.LinkTo(ven)
   ven.LinkTo(omu)
   omu.LinkTo(snk2)
       
   pl.Play()
       
   Repeat
     Wait 0.01
   Until pl.State == Media.Playing
    
   tm = Now
    
   Repeat
     Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
     Wait 0.01
   Until pl.State == Media.Ready
 Else
   pl.Stop
   pl.Close
 Endif
    
End


Public Sub Form_Close()

' Poiché, chiudendo il "Form", i dati salvati nel file audio vengono inspiegabilmente perduti, è necessario copiare il file audio creato in un altro nuovo file audio identico:
  Copy "/tmp/primoaudio.ogg" To "/tmp/audiofinale.ogg"

End


Uso dei plugin "souphttpsrc" e "Decodebin" di GStreamer per decodificare l'audio in entrata

In quest'altro esempio si farà uso dei plugin "souphttpsrc" e "Decodebin" di GStreamer.

Private pl As MediaPipeline


Public Sub ToggleButton1_Click()
 
 Dim src, tee, que, dcd, dcd2 As MediaControl
 Dim cnv1, snk1 As MediaControl
 Dim cnv2, ven, omu, snk2 As MediaControl
 Dim tm As Date
    
 If ToggleButton1.Value Then
   pl = New MediaPipeline
       
   src = New MediaControl(pl, "souphttpsrc")
   src["location"] = "http://Indirizzo/web/del/flusso/dei/dati/audio/della/radio"
   
   tee = New MediaControl(pl, "tee")
   que = New MediaControl(pl, "queue")
    
' Per ascoltare l'audio della radio web:
   dcd = New MediaControl(pl, "decodebin")
   cnv1 = New MediaControl(pl, "audioconvert")
   snk1 = New MediaControl(pl, "autoaudiosink")
   
' Per salvare i dati del flusso audio della radio web in un file di formato OGG:
   dcd2 = New MediaControl(pl, "decodebin")
   cnv2 = New MediaControl(pl, "audioconvert")
   ven = New MediaControl(pl, "vorbisenc")
   omu = New MediaControl(pl, "oggmux")
   snk2 = New MediaControl(pl, "filesink")
   snk2["location"] = "/tmp/primoaudio.ogg"        ' Cartella dove sarà salvato il file audio di formato OGG:
    
' Divide il flusso dei dati audio in due rami identici:
   src.LinkTo(tee)
    
' 1° ramo dei dati audio (per la riproduzione sonora):
   tee.LinkTo(que)
   que.LinkTo(dcd)
   dcd.LinkLaterTo(cnv1)
   cnv1.LinkTo(snk1)
    
' 2° ramo dei dati audio (per salvare i dati in un file OGG):
   tee.LinkTo(dcd2)
   dcd2.LinkLaterTo(cnv2)
   cnv2.LinkTo(ven)
   ven.LinkTo(omu)
   omu.LinkTo(snk2)
   
   pl.Play()
       
   Repeat
     Wait 0.01
   Until pl.State == Media.Playing
    
   tm = Now
    
   Repeat
     Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
     Wait 0.01
   Until pl.State == Media.Ready
 Else
   pl.Stop
   pl.Close
 Endif
    
End


Public Sub Form_Close()

' Poiché, chiudendo il "Form", i dati salvati nel file audio vengono inspiegabilmente perduti, è necessario copiare il file audio creato in un altro nuovo file audio identico:
  Copy "/tmp/primoaudio.ogg" To "/tmp/audiofinale.ogg"

End