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

Da Gambas-it.org - Wikipedia.
 
(20 versioni intermedie di uno stesso utente non sono mostrate)
Riga 5: Riga 5:
 
L'utilizzo della Classe ''MediaPlayer'' prevede l'uso del plug-in ''playbin''.
 
L'utilizzo della Classe ''MediaPlayer'' prevede l'uso del plug-in ''playbin''.
  
Esempio pratico:
+
Mostriamo un esempio pratico con un programma a ''riga di comando'', nel quale basterà premere il tasto "Invio" per chiudere il programma.
'''Public''' Sub Main()
+
Private bo As Boolean
 +
 +
 +
Public Sub Main()
 
    
 
    
 
   Dim mp As MediaPlayer
 
   Dim mp As MediaPlayer
 
    
 
    
  With mp = New MediaPlayer
+
  With mp = New MediaPlayer
    .URL = "<FONT Color=gray>''http&#58;//indirizzo/web/del/flusso/radio/live''</font>"
+
    .URL = "<FONT Color=darkgreen>''http&#58;//indirizzo/web/del/'''flusso'''/radio/live''</font>"
    .Play
+
    .Play
   End With
+
  End With
 +
 
 +
  Repeat
 +
<FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 +
    Write "\rTempo trascorso: " & Str(Time(0, 0, 0, mp.Position * 1000))
 +
    Wait 0.01
 +
  Until bo = True
 +
 
 +
  mp.Stop
 +
  mp.Close
 +
  Quit
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()
 +
 
 +
  bo = True
 +
 
 +
End
 +
Quest'altro esempio è pratico e in ambiente grafico.
 +
<BR>Saranno mostrati anche i Metadati della radio web.
 +
Private mp As MediaPlayer
 +
Private Meta As New Collection
 +
Private ss As New String[]
 +
 +
 +
Public Sub ToggleButton1_Click()
 +
 +
  If ToggleButton1.Value Then
 +
    TextArea1.Clear
 +
    With mp = New MediaPlayer As "MediaPlayer1"
 +
      .URL = "https&#058;//giosa.radioca.st/stream"
 +
      .Play
 +
    End With
 +
  Else
 +
    mp.Stop
 +
    mp.Close
 +
  Endif
 +
 +
End
 +
 +
 +
Public Sub MediaPlayer1_Tag(tagList As MediaTagList)
 +
 +
  For Each tag As String In tagList.Tags
 +
    If Not Meta.Exist(tag) Then
 +
      Meta[tag] = tagList[tag]
 +
      ss.Push(tag)
 +
      ss.Push(tagList[tag])
 +
    Else
 +
      ss[ss.Find(tag) + 1] = tagList[tag]
 +
    Endif
 +
  Next
 +
 +
  TextArea1.Clear
 +
  For c As Short = 0 To ss.Max Step 2
 +
    TextArea1.Text &= ss[c] & ":   " & ss[c + 1] & gb.NewLine
 +
  Next
 +
 +
End
 +
 +
 +
Public Sub MediaPlayer1_Position()
 +
 
 +
  Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 +
 
 +
End
 +
 +
 +
Public Sub MediaPlayer1_End()
 +
 +
  ToggleButton1.Value = False
 
    
 
    
  While True
+
End
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
+
In questo esempio mostreremo da un indirizzo web di una radio on-line i suoi Metadati e l'effetto grafico di un visualizzatore audio di ''GStreamer''.
    Write #File.Out, "\rTempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000))
+
<BR>Per consentire l'uso dei [https://gstreamer.freedesktop.org/documentation/additional/splitup.html?gi-language=c plugin] dei visualizzatori audio, è necessario avere installati nel sistema i seguenti pacchetti dei [https://gstreamer.freedesktop.org/documentation/additional/splitup.html?gi-language=c plugin]:
    Wait 0.01
+
<BR> - gstreamer1.0-plugins-bad
  Wend
+
<BR> - gstreamer1.0-plugins-base
 +
<BR> - gstreamer1.0-plugins-base-apps
 +
<BR> - gstreamer1.0-plugins-good
 +
<BR> - gstreamer1.0-plugins-ugly
 +
Private mp As MediaPlayer
 +
Private Meta As New Collection
 +
Private ss As New String[]
 +
 +
 +
Public Sub ToggleButton1_Click()
 +
 +
  If ToggleButton1.Value Then
 +
    Dim plugVis As MediaControl
 +
    Dim tipoPlug As String[] = ["goom", "monoscope", "spacescope",
 +
                                "spectrascope", "synaescope", "wavescope"]
 +
    TextArea1.Clear
 +
    With mp = New MediaPlayer As "MediaPlayer1"
 +
      plugVis = New MediaControl(mp, tipoPlug[5])
 +
      plugVis["style"] = 2
 +
      .Video.Output = New MediaControl(mp, "ximagesink")
 +
      .SetWindow(DrawingArea1)
 +
      .URL = "https&#058;//giosa.radioca.st/stream"
 +
      .Play
 +
  <FONT Color=gray>' ''La seguente riga deve stare "dopo" il Metodo ".Play()", altrimenti - in caso si arresti e poi si riavvii l'esecuzione del flusso audio - l'esecuzione si arresterà dopo qualche secondo:''</font>
 +
      .Video.Visualisation = plugVis
 +
    End With
 +
  Else
 +
    mp.Stop
 +
    mp.Close
 +
  Endif
 +
 +
End
 +
 +
 +
Public Sub MediaPlayer1_Tag(tagList As MediaTagList)
 +
 +
  For Each tag As String In tagList.Tags
 +
    If Not Meta.Exist(tag) Then
 +
      Meta[tag] = tagList[tag]
 +
      ss.Push(tag)
 +
      ss.Push(tagList[tag])
 +
    Else
 +
      ss[ss.Find(tag) + 1] = tagList[tag]
 +
    Endif
 +
  Next
 +
 +
  TextArea1.Clear
 +
  For c As Short = 0 To ss.Max Step 2
 +
    TextArea1.Text &= ss[c] & ":   " & ss[c + 1] & gb.NewLine
 +
  Next
 +
 +
End
 +
 +
 +
Public Sub MediaPlayer1_Position()
 +
 
 +
  Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 +
 
 +
End
 +
 +
 +
Public Sub MediaPlayer1_End()
 +
 +
  ToggleButton1.Value = False
 
    
 
    
  '''End'''
+
  End
  
  
 
==Uso della Classe ''MediaPipeline''==
 
==Uso della Classe ''MediaPipeline''==
L'utilizzo della Classe ''MediaPipeline'' prevede l'uso del plug-in ''playbin''.
+
L'utilizzo della Classe ''MediaPipeline'' prevede l'uso del plug-in "''playbin''".
  
Esempio pratico:
+
Mostriamo un esempio pratico, nel quale basterà premere il tasto "Invio" per chiudere il programma.
  '''Public''' Sub Main()
+
Private bo As Boolean
 +
 +
 +
  Public Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
    
 
    
  pl = New MediaPipeline(Null, "playbin")
+
  pl = New MediaPipeline(Null, "playbin")
  pl["uri"] = "<FONT Color=gray>''http&#58;//indirizzo/web/del/flusso/radio/live''</font>"
+
  pl["uri"] = "https&#58;//hirschmilch.de:7001/psytrance.mp3"
 +
 
 +
  pl.Play()
 
    
 
    
  pl.Play()
+
  Repeat
     
 
  While True
 
 
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
    Write #File.Out, "\rTempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000))
+
    Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
    Wait 0.01
+
    Wait 0.01
  Wend
+
  Until bo = True
 +
 
 +
  pl.Stop
 +
  pl.Close
 +
  Quit 
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()
 
    
 
    
  '''End'''
+
  bo = True
 +
 
 +
  End
  
  
 
==Uso delle Classi ''MediaPipeline'' e ''MediaControl''==
 
==Uso delle Classi ''MediaPipeline'' e ''MediaControl''==
Anche l'uso delle Classi ''MediaPipeline'' e ''MediaControl'' prevede l'uso del plug-in ''playbin''.
+
Si potrà fare uso anche delle Classi ''MediaPipeline'' e ''MediaControl''.
  '''Public''' Sub Main()
+
 
 +
L'esempio, che segue, prevede l'uso del plug-in "''playbin''". Basterà premere il tasto "Invio" per chiudere il programma.
 +
  Private bo As Boolean
 +
 +
 +
Public Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src As MediaControl
 
   Dim src As MediaControl
 
    
 
    
   pl = New MediaPipeline
+
  pl = New MediaPipeline
 +
 
 +
  src = New MediaControl(pl, "playbin")
 +
  src["uri"] = "<FONT Color=darkgreen>''http&#58;//indirizzo/web/del/'''flusso'''/radio/live''</font>"
 +
    
 +
  pl.Play()
 +
 
 +
  Repeat
 +
<FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 +
    Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
 +
    Wait 0.01
 +
  Until bo = True
 +
 
 +
  pl.Stop
 +
  pl.Close
 +
  Quit
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()
 +
 
 +
  bo = True
 +
 
 +
End
 +
Quest'altro esempio prevede l'uso dei plug-in "''uridecodebin''". Basterà premere il tasto "Invio" per chiudere il programma.
 +
Private bo As Boolean
 +
 +
 +
Public Sub Main()
 +
 
 +
  Dim pl As MediaPipeline
 +
  Dim src, cnv, snk As MediaControl
 
    
 
    
  src = New MediaControl(pl, "playbin")
+
  pl = New MediaPipeline
  src["uri"] = "<FONT Color=gray>''http&#58;//indirizzo/web/del/flusso/radio/live''</font>"
 
 
    
 
    
  pl.Play()
+
  src = New MediaControl(pl, "uridecodebin")
 +
  src["uri"] = "http&#58;//94.130.113.214:8000/prog"
 +
  cnv = New MediaControl(pl, "audioconvert")
 +
  snk = New MediaControl(pl, "autoaudiosink")
 +
 
 +
  src.LinkLaterTo(cnv)
 +
  cnv.LinkTo(snk)
 +
 
 +
  pl.Play()
 
    
 
    
  While True
+
  Repeat
 
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
    Write #File.Out, "\rTempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000))
+
    Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
    Wait 0.01
+
    Wait 0.01
   Wend
+
  Until bo = True
 +
 
 +
  pl.Stop
 +
  pl.Close
 +
  Quit
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()
 +
 
 +
  bo = True
 +
 
 +
End
 +
Quest'altro esempio prevede l'uso dei plug-in "''souphttpsrc''" e "''decodebin''".
 +
<BR>Basterà premere il tasto "Invio" per chiudere il programma.
 +
Private bo As Boolean
 +
 +
 +
Public Sub Main()
 +
 
 +
  Dim pl As MediaPipeline
 +
  Dim src, dcd, cnv, snk As MediaControl
 +
    
 +
  pl = New MediaPipeline
 
    
 
    
  '''End'''
+
  src = New MediaControl(pl, "souphttpsrc")
 +
  src["location"] = "http&#58;//198.15.94.34:8006/stream/1/"
 +
  dcd = New MediaControl(pl, "decodebin")
 +
  cnv = New MediaControl(pl, "audioconvert")
 +
  snk = New MediaControl(pl, "autoaudiosink")
 +
 
 +
  src.LinkTo(dcd)
 +
  dcd.LinkLaterTo(cnv)
 +
  cnv.LinkTo(snk)
 +
 
 +
  pl.Play()
 +
 
 +
  Repeat
 +
  <FONT Color=gray>' ''Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 +
    Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
 +
    Wait 0.01
 +
  Until bo = True
 +
 
 +
  pl.Stop
 +
  pl.Close
 +
  Quit
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()
 +
 
 +
  bo = True
 +
 
 +
End
 +
Nel seguente esempio pratico in ambiente grafico saranno anche mostrati i Metadati della radio web:
 +
Private pl As MediaPipeline
 +
Private Meta As New Collection
 +
Private ss As New String[]
 +
 +
 +
Public Sub ToggleButton1_Click()
 +
 +
  Dim src, dcb, con, snk As MediaControl
 +
 +
  If ToggleButton1.Value Then
 +
    TextArea1.Clear
 +
    pl = New MediaPipeline As "PLine"
 +
    src = New MediaControl(pl, "souphttpsrc")
 +
    src["location"] = "https&#058;//giosa.radioca.st/stream"
 +
    dcb = New MediaControl(pl, "<Font color=red>decodebin</font>")
 +
    con = New MediaControl(pl, "audioconvert")
 +
    snk = New MediaControl(pl, "autoaudiosink")
 +
 +
    src.LinkTo(dcb)
 +
    dcb.LinkLaterTo(con)
 +
    con.LinkTo(snk)
 +
 +
    pl.Play
 +
 +
    While pl.Position < 0.1
 +
      Wait 0.01
 +
    Wend
 +
    While pl.State == Media.Playing
 +
      Me.Title = Str(Time(0, 0, 0, pl.Pos * 1000))
 +
      Wait 0.1
 +
    Wend
 +
    pl.Close
 +
  Else
 +
    pl.Stop
 +
    pl.Close
 +
  Endif
 +
 +
End
 +
 +
 +
Public Sub PLine_Tag(tagList As MediaTagList)
 +
 +
  For Each tag As String In tagList.Tags
 +
    If Not Meta.Exist(tag) Then
 +
      Meta[tag] = tagList[tag]
 +
      ss.Push(tag)
 +
      ss.Push(tagList[tag])
 +
    Else
 +
      ss[ss.Find(tag) + 1] = tagList[tag]
 +
    Endif
 +
  Next
 +
 +
  TextArea1.Clear
 +
  For c As Short = 0 To ss.Max Step 2
 +
    TextArea1.Text &= ss[c] & ":    " & ss[c + 1] & gb.NewLine
 +
  Next
 +
 +
End
  
  
Riga 73: Riga 381:
  
 
Mostriamo un esempio questa volta in ambiente grafico:
 
Mostriamo un esempio questa volta in ambiente grafico:
  Private bo As Boolean
+
  Private mp As MediaPlayer
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
  Dim mp As MediaPlayer
 
 
   Dim usc As MediaControl
 
   Dim usc As MediaControl
 
 
  Me.Show
 
 
    
 
    
  With mp = New MediaPlayer
+
  With mp = New MediaPlayer
    .URL = "<FONT Color=gray>''http&#58;//indirizzo/web/del/flusso/radio/live''</font>"
+
    .URL = "<FONT Color=darkgreen>''http&#58;//indirizzo/web/del/flusso/radio/live''</font>"
  End With
+
  End With
 
    
 
    
  usc = New MediaControl(mp, "jackaudiosink")
+
  usc = New MediaControl(mp, "jackaudiosink")
  mp.Audio.Output = usc
+
  mp.Audio.Output = usc
 
+
 
  mp.Play()
+
  End
 
 
  While bo = False
 
<FONT Color=gray>' ''Mostra in un "TextBox" il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 
    TextBox1.Text = CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000))
 
    Wait 0.01
 
  Wend
 
 
 
  mp.Stop
 
 
 
  Me.Close
 
 
 
  '''End'''
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub ToggleButton1_Click()
 
    
 
    
  bo = True
+
  If ToggleButton1.Value Then
 
+
    mp.Play
  '''End'''
+
    While mp.State == Media.Playing
 +
  <FONT Color=gray>' ''Mostra nell'intestazione della finestra il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font>
 +
      Me.Title = Format(Time(0, 0, 0, mp.Position * 1000), "hh:nn:ss.uuu")
 +
      Wait 0.01
 +
    Wend
 +
  Else
 +
    mp.Stop
 +
    mp.Close 
 +
    Me.Title = "00:00:00.000"
 +
  Endif
 +
 
 +
End

Versione attuale delle 18:49, 17 gen 2024

Le stazioni radio via WEB possono essere ascoltate in streaming anche utilizzando le risorse del Componente gb.media di Gambas.


Uso della Classe MediaPlayer

L'utilizzo della Classe MediaPlayer prevede l'uso del plug-in playbin.

Mostriamo un esempio pratico con un programma a riga di comando, nel quale basterà premere il tasto "Invio" per chiudere il programma.

Private bo As Boolean


Public Sub Main()
 
 Dim mp As MediaPlayer
 
 With mp = New MediaPlayer
   .URL = "http://indirizzo/web/del/flusso/radio/live"
   .Play
 End With
 
 Repeat
' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, mp.Position * 1000))
   Wait 0.01
 Until bo = True
 
 mp.Stop
 mp.Close
 Quit
 
End


Public Sub Application_Read()
 
 bo = True
 
End

Quest'altro esempio è pratico e in ambiente grafico.
Saranno mostrati anche i Metadati della radio web.

Private mp As MediaPlayer
Private Meta As New Collection
Private ss As New String[]


Public Sub ToggleButton1_Click()

 If ToggleButton1.Value Then
   TextArea1.Clear
   With mp = New MediaPlayer As "MediaPlayer1"
     .URL = "https://giosa.radioca.st/stream"
     .Play
   End With 
 Else
   mp.Stop
   mp.Close
 Endif

End


Public Sub MediaPlayer1_Tag(tagList As MediaTagList)

 For Each tag As String In tagList.Tags
   If Not Meta.Exist(tag) Then
     Meta[tag] = tagList[tag]
     ss.Push(tag)
     ss.Push(tagList[tag])
   Else
     ss[ss.Find(tag) + 1] = tagList[tag]
   Endif
 Next

 TextArea1.Clear
 For c As Short = 0 To ss.Max Step 2
   TextArea1.Text &= ss[c] & ":    " & ss[c + 1] & gb.NewLine
 Next

End


Public Sub MediaPlayer1_Position()
 
 Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
End


Public Sub MediaPlayer1_End()

 ToggleButton1.Value = False
  
End

In questo esempio mostreremo da un indirizzo web di una radio on-line i suoi Metadati e l'effetto grafico di un visualizzatore audio di GStreamer.
Per consentire l'uso dei plugin dei visualizzatori audio, è necessario avere installati nel sistema i seguenti pacchetti dei plugin:
- gstreamer1.0-plugins-bad
- gstreamer1.0-plugins-base
- gstreamer1.0-plugins-base-apps
- gstreamer1.0-plugins-good
- gstreamer1.0-plugins-ugly

Private mp As MediaPlayer
Private Meta As New Collection
Private ss As New String[]


Public Sub ToggleButton1_Click()

 If ToggleButton1.Value Then
   Dim plugVis As MediaControl
   Dim tipoPlug As String[] = ["goom", "monoscope", "spacescope",
                               "spectrascope", "synaescope", "wavescope"]
   TextArea1.Clear
   With mp = New MediaPlayer As "MediaPlayer1"
     plugVis = New MediaControl(mp, tipoPlug[5])
     plugVis["style"] = 2
     .Video.Output = New MediaControl(mp, "ximagesink")
     .SetWindow(DrawingArea1)
     .URL = "https://giosa.radioca.st/stream"
     .Play
' La seguente riga deve stare "dopo" il Metodo ".Play()", altrimenti - in caso si arresti e poi si riavvii l'esecuzione del flusso audio - l'esecuzione si arresterà dopo qualche secondo:
     .Video.Visualisation = plugVis
   End With 
 Else
   mp.Stop
   mp.Close
 Endif

End


Public Sub MediaPlayer1_Tag(tagList As MediaTagList)

 For Each tag As String In tagList.Tags
   If Not Meta.Exist(tag) Then
     Meta[tag] = tagList[tag]
     ss.Push(tag)
     ss.Push(tagList[tag])
   Else
     ss[ss.Find(tag) + 1] = tagList[tag]
   Endif
 Next

 TextArea1.Clear
 For c As Short = 0 To ss.Max Step 2
   TextArea1.Text &= ss[c] & ":    " & ss[c + 1] & gb.NewLine
 Next

End


Public Sub MediaPlayer1_Position()
 
 Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
End


Public Sub MediaPlayer1_End()

 ToggleButton1.Value = False
  
End


Uso della Classe MediaPipeline

L'utilizzo della Classe MediaPipeline prevede l'uso del plug-in "playbin".

Mostriamo un esempio pratico, nel quale basterà premere il tasto "Invio" per chiudere il programma.

Private bo As Boolean


Public Sub Main()
 
 Dim pl As MediaPipeline
 
 pl = New MediaPipeline(Null, "playbin")
 pl["uri"] = "https://hirschmilch.de:7001/psytrance.mp3"
 
 pl.Play()
  
 Repeat
' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Wait 0.01
 Until bo = True
 
 pl.Stop
 pl.Close
 Quit  
 
End


Public Sub Application_Read()
 
 bo = True
 
End


Uso delle Classi MediaPipeline e MediaControl

Si potrà fare uso anche delle Classi MediaPipeline e MediaControl.

L'esempio, che segue, prevede l'uso del plug-in "playbin". Basterà premere il tasto "Invio" per chiudere il programma.

Private bo As Boolean


Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src As MediaControl
  
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "playbin")
 src["uri"] = "http://indirizzo/web/del/flusso/radio/live"
  
 pl.Play()
  
 Repeat
' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Wait 0.01
 Until bo = True
 
 pl.Stop
 pl.Close
 Quit
 
End


Public Sub Application_Read()
 
 bo = True
 
End

Quest'altro esempio prevede l'uso dei plug-in "uridecodebin". Basterà premere il tasto "Invio" per chiudere il programma.

Private bo As Boolean


Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, cnv, snk As MediaControl
  
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "uridecodebin")
 src["uri"] = "http://94.130.113.214:8000/prog"
 cnv = New MediaControl(pl, "audioconvert")
 snk = New MediaControl(pl, "autoaudiosink")
 
 src.LinkLaterTo(cnv)
 cnv.LinkTo(snk)
 
 pl.Play()
  
 Repeat
' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Wait 0.01
 Until bo = True
 
 pl.Stop
 pl.Close
 Quit
 
End


Public Sub Application_Read()
 
 bo = True
 
End

Quest'altro esempio prevede l'uso dei plug-in "souphttpsrc" e "decodebin".
Basterà premere il tasto "Invio" per chiudere il programma.

Private bo As Boolean


Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, dcd, cnv, snk As MediaControl
  
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "souphttpsrc")
 src["location"] = "http://198.15.94.34:8006/stream/1/"
 dcd = New MediaControl(pl, "decodebin")
 cnv = New MediaControl(pl, "audioconvert")
 snk = New MediaControl(pl, "autoaudiosink")
 
 src.LinkTo(dcd)
 dcd.LinkLaterTo(cnv)
 cnv.LinkTo(snk)
 
 pl.Play()
  
 Repeat
' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Wait 0.01
 Until bo = True
 
 pl.Stop
 pl.Close
 Quit
 
End


Public Sub Application_Read()
 
 bo = True
 
End

Nel seguente esempio pratico in ambiente grafico saranno anche mostrati i Metadati della radio web:

Private pl As MediaPipeline
Private Meta As New Collection
Private ss As New String[]


Public Sub ToggleButton1_Click()

 Dim src, dcb, con, snk As MediaControl

 If ToggleButton1.Value Then
   TextArea1.Clear
   pl = New MediaPipeline As "PLine"
   src = New MediaControl(pl, "souphttpsrc")
   src["location"] = "https://giosa.radioca.st/stream"
   dcb = New MediaControl(pl, "decodebin")
   con = New MediaControl(pl, "audioconvert")
   snk = New MediaControl(pl, "autoaudiosink")

   src.LinkTo(dcb)
   dcb.LinkLaterTo(con)
   con.LinkTo(snk)

   pl.Play

   While pl.Position < 0.1
     Wait 0.01
   Wend
   While pl.State == Media.Playing
     Me.Title = Str(Time(0, 0, 0, pl.Pos * 1000))
     Wait 0.1
   Wend
   pl.Close
 Else
   pl.Stop
   pl.Close
 Endif

End


Public Sub PLine_Tag(tagList As MediaTagList)

 For Each tag As String In tagList.Tags
   If Not Meta.Exist(tag) Then
     Meta[tag] = tagList[tag]
     ss.Push(tag)
     ss.Push(tagList[tag])
   Else
     ss[ss.Find(tag) + 1] = tagList[tag]
   Endif
 Next

 TextArea1.Clear
 For c As Short = 0 To ss.Max Step 2
   TextArea1.Text &= ss[c] & ":    " & ss[c + 1] & gb.NewLine
 Next

End


Uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink

L'uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink richiede che sia preliminarmente avviato il programma server Jack.

Mostriamo un esempio questa volta in ambiente grafico:

Private mp As MediaPlayer


Public Sub Form_Open()
 
 Dim usc As MediaControl
  
 With mp = New MediaPlayer
   .URL = "http://indirizzo/web/del/flusso/radio/live"
 End With
  
 usc = New MediaControl(mp, "jackaudiosink")
 mp.Audio.Output = usc
 
End


Public Sub ToggleButton1_Click()
 
 If ToggleButton1.Value Then
   mp.Play
   While mp.State == Media.Playing
' Mostra nell'intestazione della finestra il tempo trascorso dall'avvio del processo dei dati audio ricevuti:
     Me.Title = Format(Time(0, 0, 0, mp.Position * 1000), "hh:nn:ss.uuu")
     Wait 0.01
   Wend
 Else
   mp.Stop
   mp.Close   
   Me.Title = "00:00:00.000"
 Endif
 
End