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 16: Riga 16:
 
          
 
          
 
     src = New MediaControl(pl, "uridecodebin")
 
     src = New MediaControl(pl, "uridecodebin")
     src["uri"] = <FONT Color=gray>''"http://Indirizzo/web/del/flusso/dei/dati/audio/della/radio''</font>
+
     src["uri"] = <FONT Color=gray>''"http&#058;//Indirizzo/web/del/flusso/dei/dati/audio/della/radio''</font>"
 
      
 
      
 
     tee = New MediaControl(pl, "tee")
 
     tee = New MediaControl(pl, "tee")

Versione delle 16:00, 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.

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