Autore Topic: usare Gstreamer per riprodurre audio attraverso Jack Audio Server.  (Letto 801 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #15 il: 15 Febbraio 2017, 10:08:11 »
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

Forse agendo sulla definizione della sorgente?
Gstbasesrc sembrerebbe implementare oltre che filesrc anche metodi per sorgenti live.

tcpclientsrc sembra interessante
« Ultima modifica: 15 Febbraio 2017, 10:27:56 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #16 il: 15 Febbraio 2017, 12:24:16 »
Ma perché non fai le prove invece di domandare a me ?    :hard:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #17 il: 15 Febbraio 2017, 13:12:35 »
perche' stavo al bagno e mi passava per la testa questa roba :D

ora sono al pc e provo :p
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #18 il: 15 Febbraio 2017, 23:43:57 »
installando Playbin con (su debian like):
sudo apt-get install rygel-gst-renderer

da shell si da':
gst-launch-1.0 -v playbin uri=http://radiogalileo.it:8000/live

e suona ..... un interessante spunto
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #20 il: 16 Febbraio 2017, 00:06:49 »
....se vuoi utilizzare le sole risorse di Gambas, attiva il Componente gb.media e prova questo codice:   

Codice: [Seleziona]
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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #21 il: 16 Febbraio 2017, 12:59:10 »
t'assicuro che avevo fatto una cosa del genere ...

il test con laybin l'ho fatto ieri sera alla riunione del Linux User Group e funzionava, mentre sul pc dell'ufficio mi dava errore:

Citazione
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...

quindi mi ero un po' scoraggiato ....

per far andare la riproduzione da bash ho dovuto installare proprio  gst-launch-1.0 con:
sudo apt install gstreamer1.0-tools

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:
« Ultima modifica: 16 Febbraio 2017, 13:04:43 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #22 il: 16 Febbraio 2017, 15:12:26 »
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:

Hai fatto bene ad aggiornare GStreamer.

Comunque sia, di questa pagina:

https://gstreamer.freedesktop.org/documentation/application-development/appendix/porting-1.0.html

leggiti in particolare i primi due punti.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #23 il: 16 Febbraio 2017, 22:41:31 »
per ora ho individuato come fare in bash la pipeline che usa jack per riprodurre l'audio:
Citazione
gst-launch-1.0 playbin uri=http://radiogalileo.it:8000/live name=play  audio-sink="jackaudiosink"

ora la devo convertire in codice ...

questo non funziona

Codice: [Seleziona]
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
« Ultima modifica: 16 Febbraio 2017, 22:51:36 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #24 il: 16 Febbraio 2017, 22:45:33 »
ora la devo convertire in codice
...vediamo chi arriva primo.    ;D

...ma tu tanto non corri !    :-\
« Ultima modifica: 05 Ottobre 2020, 09:36:47 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #25 il: 16 Febbraio 2017, 22:52:12 »
gia' lo sai :D
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #26 il: 16 Febbraio 2017, 22:55:20 »
...però io non ho nessuna base come te con quel codice bash che hai scritto !   
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #27 il: 16 Febbraio 2017, 22:58:12 »
cioe' non esce nessun audio?

jack server sta girando si?
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:usare Gstreamer per riprodurre audio attraverso Jack Audio Server.
« Risposta #28 il: 16 Febbraio 2017, 23:11:42 »
...per ora sono al livello di uso delle funzioni esterne con Extern:    :D

Codice: [Seleziona]
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
« Ultima modifica: 16 Febbraio 2017, 23:12:43 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »