Indirizzare l'uscita o l'entrata audio mediante il componente gb.media

Da Gambas-it.org - Wikipedia.

L'individuazione del dispositivo audio consente di indirizzare in modo specifico la sorgente audio in entrata o dei dati audio in uscita.
In particolare sarà necessario definire:
- il numero identificativo della scheda audio;
- il numero identificativo del dispositivo audio;
- il numero identificativo del sub-dispositivo audio.
Questi tre valori possono essere individuati agevolmente nei file contenuti nel percorso "/proc/asound/ " e sono passati alla risorsa audio, utilizzata, mediante una stringa, che premette il simbolo "hw:", come nell'esempio seguente:

"hw:0,1,0"

oppure con il simbolo "plughw:"

"plughw:0,1,0"

Questa operazione di indirizzamento specifico è possibile anche con le risorse del componente gb.media di Gambas.

In generale per identificare il dispositivo audio, al quale dirigere l'audio in uscita, è necessario usare la Proprietà ".Audio.Output " della Classe "MediaPlayer " o della Classe "MediaPipeline ", assegnando contestualmente ad essa il plugin di GStreaer - ad esempio - "alsasink " mediante la Classe "MediaControl " e specificando il dispositivo audio, con la stringa dei valori come sopra descritto.

Per l'indirizzamento dei dati in Entrata la logica è analoga, ma si farà uso della Proprietà ".Audio.Input ".

Esempio con la Classe "MediaPlayer"

Mostriamo un semplice esempio, nel quale indirizzeremo l'uscita dei dati audio al dispositivo audio mostrato nell'esempio precedente.
Useremo la Classe "MediaPlayer " del Componente gb.media .

Public Sub Main()
 
 Dim mp As MediaPlayer
 
 With mp = New MediaPlayer
   .URL = Media.URL("/percorso/del/file/audio")
   .Audio.Output = New MediaControl(mp, "alsasink")
' Specifica il dispositivo audio, al quale indirizzare i dati audio:
   .Audio.Output["device"] = "hw:0,1,0"
   .Play
 End With
 
 Repeat         ' Consente a "MediaPlayer" di ritornare il corretto valore della durata del file audio
   Wait 0.01
 Until mp.Duration > 0.0
  
 Wait mp.Duration
 
 mp.Close
  
End


Esempio con la Classe "MediaPipeline"

In quest'altro esempio si eseguirà un file di formato .ogg, usando la Classe "MediaPipeline " del Componente gb.media .
Con questa Classe si è cnstatato che è necessario usare il simbolo "plughw:".

Public Sub Main()

 Dim pl As New MediaPipeline
 Dim src, dem, vor, snk As MediaControl
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/file/audio.ogg"
 dem = New MediaControl(pl, "oggdemux")
 vor = New MediaControl(pl, "vorbisdec")
 snk = New MediaControl(pl, "alsasink")
 snk["device"] = "plughw:1,0,0"
  
 src.LinkTo(dem)
 dem.LinkLaterTo(vor)
 vor.LinkTo(snk)
 
 pl.Play

 Repeat
   Wait 0.01
 Until pl.Duration > 0.0
 
 Wait pl.Duration

 pl.Close

End