Premettiamo che il seguente esempio e' attualemente INCOMPLETO, poiche' il file audio viene APERTO, ma non riprodotto.
gst-launch audiotestsrc ! jackaudiosink
' Gambas class file
Private Player_A As MediaPlayer 'player che gestira' i media con gb.media (gstreamer)
Private UscitaAudio As MediaControl 'l'ambito di rendering dei media
Public Sub Button1_Click()
Dialog.Filter = ["*.mp3", "file audio mp3", "*", "All files"]
If Dialog.OpenFile() Then
Return ' User pressed Cancel -
Else
Label1.Text = Dialog.Path
Button2.Enabled = True
Endif
End
Public Sub Button2_Click()
Try Player_A.Close
Player_A = New MediaPlayer As "MediaPlayer"
'se vuoi riprodurre il media nell'ambiente VERO usa questo
UscitaAudio = New MediaControl(Player_A, "jackaudiosink")
Button2.Enabled = False
Button3.Enabled = True
End
Public Sub Button3_Click()
Player_A.URL = Media.URL(Label1.Text)
Player_A.Play
Button4.Enabled = True
Button5.Enabled = False
Timer1.Start
End
Public Sub Timer1_Timer()
ProgressBar1.Value = Player_A.Position / Player_A.Duration
End
Public Sub Button4_Click()
Timer1.Stop
Try Player_A.Stop
Button5.Enabled = True
End
Public Sub Button5_Click()
Try Player_A.Close
Button2.Enabled = True
Button3.Enabled = False
Button4.Enabled = False
Button5.Enabled = False
End
hai copiaincollato o preso l'allegato?Scaricato l'allegato.
hai cliccato su browse per selezionare un file audio?No, il file audio me l'ha portato la cicogna ! >:(
UscitaAudio = New MediaControl(Player_A, "jackaudiosink")
ProgressBar1.Value = Player_A.Position / Player_A.Duration
Public Sub Timer1_Timer()
Print Player_A.Duration
End
Vi consiglio l'ottimo QJACKCTL) con questa riga da terminale:Codice: [Seleziona]possiamo vedere nelle connessioni che viene creato un "CAVO" tra' la sorgente (il programma gst-launch) e la destinazione (di default il primo canale audio d'uscita disponibile della vostra scheda audio).gst-launch audiotestsrc ! jackaudiosink
Library "libgstreamer-1.0"
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING
' gst_init (int *argc, char **argv[])
' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins.
Private Extern gst_init(argc As Pointer, argv As Pointer)
' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error)
' Create a new pipeline based on command line syntax.
Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer
' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)
' Sets the state of the element.
Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer
' void gst_object_unref(gpointer object)
' Decrements the reference count on object.
Private Extern gst_object_unref(gobject As Pointer)
Public Sub Main()
Dim audio As Pointer
gst_init(0, 0)
audio = gst_parse_launch("audiotestsrc volume=0.5 freq=440 wave=sine ! jackaudiosink", 0)
' Avviamo l'esecuzione dell'onda sinusoidale......:
gst_element_set_state(audio, GST_STATE_PLAYING)
' ...per 10 secondi:
Sleep 10
gst_object_unref(audio)
End
Public Sub Main()
Dim pl As MediaPipeline
Dim src, snk As MediaControl
pl = New MediaPipeline
src = New MediaControl(pl, "audiotestsrc")
src["volume"] = "0.5"
src["freq"] = "440"
src["wave"] = 0
snk = New MediaControl(pl, "jackaudiosink")
src.LinkTo(snk)
pl.Play()
Sleep 10
End
Public Sub Main()
Dim pl As MediaPipeline
Dim src, prs, cnv, snk As MediaControl
pl = New MediaPipeline
src = New MediaControl(pl, "filesrc")
src["location"] = "/percorso/del/file.wav" ' "location" è una proprietà del plugin "filesrc"
prs = New MediaControl(pl, "wavparse")
cnv = New MediaControl(pl, "audioconvert")
snk = New MediaControl(pl, "jackaudiosink")
src.LinkTo(prs)
prs.LinkTo(cnv)
cnv.LinkTo(snk)
pl.Play()
Print "\nDurata: " & Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)
Wait pl.Duration
End
Player_A = New MediaPlayer As "MediaPlayer"
'se vuoi riprodurre il media nell'ambiente VERO usa questo
UscitaAudio = New MediaControl(Player_A, "jackaudiosink")
Player_A.Audio.Output = UscitaAudio
....non capisco, del resto, l'utilità della variabile "UscitaAudio", dato che non viene utilizzata da alcuna funzione.
Ora funziona e va in play, mancava un pezzo.Codice: [Seleziona]UscitaAudio = New MediaControl(Player_A, "jackaudiosink")
Player_A.Audio.Output = UscitaAudio
dovevo indicare a gstreamer che l'uscita audio era quella settata nel modo opportuno
secondo te VUOTT per fare il play di uno streaming audio?...e se io fossi morto, o meglio...tornato indietro nel passato, come risolveresti ?
Ad ogni modo se vuoi eseguire un file wav con il Componente gb.media, utilizzando il plugin jackaudiosink di GStreamer, ecco qua:Codice: [Seleziona]Public Sub Main()
Dim pl As MediaPipeline
Dim src, prs, cnv, snk As MediaControl
pl = New MediaPipeline
src = New MediaControl(pl, "filesrc")
src["location"] = "/percorso/del/file.wav" ' "location" è una proprietà del plugin "filesrc"
prs = New MediaControl(pl, "wavparse")
cnv = New MediaControl(pl, "audioconvert")
snk = New MediaControl(pl, "jackaudiosink")
src.LinkTo(prs)
prs.LinkTo(cnv)
cnv.LinkTo(snk)
pl.Play()
Print "\nDurata: " & Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)
Wait pl.Duration
End
e suonaSì, confermo.
Public Sub Main()
Dim pl As MediaPipeline
Dim src As MediaControl
src = New MediaControl(pl, "playbin")
src["uri"] = "http://radiogalileo.it:8000/live"
pl.Play()
While True
Sleep 0.01
Wend
End
gst-launch-0.10 -v playbin uri=http://radiogalileo.it:8000/liveImpostazione della pipeline a PAUSED ...
ERRORE: la pipeline non vuole mettersi in pausa.
Elemento mancante: Sorgente protocollo HTTP
ERRORE: dall'elemento /GstPlayBin:playbin0: Per riprodurre questo stream è richiesto un plugin Sorgente protocollo HTTP, che però non risulta installato.
Informazioni di debug aggiuntive:
gstplaybasebin.c(1686): gen_source_element (): /GstPlayBin:playbin0:
No URI handler for http
Impostazione della pipeline a NULL ...
Esecuzione di free sulla pipeline...
Che differenza fara' con quelli che avevo nel sistema (gst-launch / gst-launch-0.10 / gst-launch-1.0) non so proprio ....
cioe' la versione 0.10 e 1.0 lo so, ma che bisogno c'era anche della versione senza numeri? CONFUSIONE :hard: :hard:
gst-launch-1.0 playbin uri=http://radiogalileo.it:8000/live name=play audio-sink="jackaudiosink"
Public Sub Form_Open()
Dim pl As MediaPipeline
Dim src, prs, cnv, snk As MediaControl
pl = New MediaPipeline
src = New MediaControl(pl, "playbin")
src["uri"] = "http://vps222134.ovh.net:8000/low_bitrate_lo_latency"
src["name"] = "play"
src["audio-sink"] = "jackaudiosink"
pl.Play()
While Not Eof
Sleep 0.1
Wend
End
ora la devo convertire in codice...vediamo chi arriva primo. ;D
Library "libgstreamer-1.0"
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING
Private Const GST_FORMAT_TIME As Integer = 3
' gst_init (int *argc, char **argv[])
' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins.
Private Extern gst_init(argc As Pointer, argv As Pointer)
' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error)
' Create a new pipeline based on command line syntax.
Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer
' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)
' Sets the state of the element.
Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer
' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur)
' Queries an element for the stream position in nanoseconds.
Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean
' void gst_object_unref(gpointer object)
' Decrements the reference count on object.
Private Extern gst_object_unref(gobject As Pointer)
Public Sub Main()
Dim audio As Pointer
Dim pos As Long
Dim po As Date
gst_init(0, 0)
audio = gst_parse_launch("uridecodebin uri=http://radiogalileo.it:8000/live ! audioconvert ! audioresample ! jackaudiosink", 0)
' Avviamo l'esecuzione audio:
gst_element_set_state(audio, GST_STATE_PLAYING)
While True
gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(pos))
po = Date(0, 0, 0, 0, 0, 0, pos / 1000000)
Write #File.Out, "\rTempo trascorso: " & po
Wend
gst_object_unref(audio)
End
http://radiogalileo.it:8000/live
http://radiogalileo.it:8000/live
....ma che 'sta radio è de Derni ? ???
la mia :D