Indirizzare l'uscita o l'entrata audio mediante il componente gb.media
L'individuazione del dispositivo audio consente di indirizzare in modo specifico la sorgente audio in entrata o dei dati audio in uscita.
Usando il plugin "alsasink" di GStreamer
Usando il plugin "alsasink" di GStreamer 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.
Indirizzamento con la Classe "MediaPlayer "
Dirigere l'audio in Uscita
Usando la Classe MediaPlayer del Componente gb.media, per identificare il dispositivo audio, al quale dirigere l'audio in uscita, è necessario usare la Proprietà ".Audio.Output", assegnando contestualmente ad essa il plugin di GStreamer - ad esempio - alsasink mediante la Classe MediaControl e specificando il dispositivo audio, con la stringa dei valori come sopra descritto.
Esempio con la Classe "MediaPlayer"
Mostriamo un semplice esempio, nel quale indirizzeremo l'uscita dei dati audio al dispositivo audio mostrato nell'esempio precedente.
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 (ad esempio: hw:0,1,0), al quale indirizzare i dati audio:
.Audio.Output["device"] = "hw:0,1,0"
.Play
End With
Repeat
Write "\r" & Str(Time(0, 0, 0, mp.Pos * 1000))
Flush
Wait 0.01
Until mp.pos >= mp.Duration
mp.Close
End
Dirigere l'audio in Entrata
Per l'indirizzamento dei dati in Entrata la logica è analoga, ma si farà uso della Proprietà ".Audio.Input".
Indirizzamento con la Classe "MediaPipeline"
Usando, invece, la Classe MediaPipeline, si assegnerà alla Proprietà "device" dell'Oggetto MediaControl - al quale sia stato passato al suo 2° argomento ugualmente il plugin alsasink - la stringa relativa all'individuazione del dispositivo audio utilizzabile.
Con questa Classe sembra essere necessario l'uso del simbolo "plughw:".
Esempio con la Classe "MediaPipeline"
In questo esempio si eseguirà un file di formato OGG-Vorbis:
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") ' Specifica il dispositivo audio (ad esempio: plughw:1,0,0), al quale indirizzare i dati audio: snk["device"] = "plughw:1,0,0" src.LinkTo(dem) dem.LinkLaterTo(vor) vor.LinkTo(snk) pl.Play Repeat Write "\r" & Str(Time(0, 0, 0, pl.Pos * 1000)) Flush Wait 0.01 Until pl.pos >= pl.Duration pl.Close End
Usando il plugin "pulsesink" di GStreamer
Usando il plugin "pulsesink" di GStreamer, il dispositivo audio, al quale indirizzare l'audio, sarà individuato lanciando in terminale la seguente riga di comando: [nota 1]
pacmd list-sinks | grep -e 'name:' -e 'index:'
La stringa che ci interessa avrà ad esempio la seguente struttura:
alsa_output.pci-0000_04_00.6.analog-stereo
e verrà inserita nella proprietà "device" dell'Oggetto MediaControl, al quale è attribuito il plugin "pulsesink" di GStreamer.
Mostriamo un codice pratico, nel quale verrà eseguito un file OGG:
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, "pulsesink") ' Specifica il dispositivo audio (è solo un esempio), al quale indirizzare i dati audio: snk["device"] = "alsa_output.pci-0000_04_00.6.analog-stereo" src.LinkTo(dem) dem.LinkLaterTo(vor) vor.LinkTo(snk) pl.Play Repeat Write "\r" & Str(Time(0, 0, 0, pl.Pos * 1000)) Flush Wait 0.01 Until pl.pos >= pl.Duration pl.Close End
Note
[1] Al riguardo vedere anche: Registrare il sonoro da una fonte esterna e salvarlo in un file audio mediante il Componente gb.media