Audio ed Alsa: apertura del subsistema PCM
Indice
Dichiarazione della Libreria di Alsa
Poiché bisognerà utilizzare delle funzioni esterne a Gambas, appartenenti alle API di ALSA, bisognerà innanzitutto individuare la specifica libreria condivisa .so ove tali funzioni sono contenute.
Si dichiarera all'inizio della Classe specifica la libreria di ALSA:
Library "libasound:2"
Apertura del subsistema PCM
L'apertura del sub-sistema PCM nella modalità di Riproduzione audio avviene mediante la specifica delle API di ALSA, così espressa in C:
int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)
laddove:
- snd_pcm_t **pcm è un puntatore ad un puntatore che rappresenta, quest'ultimo, l'handle necessario per l'apertura del dispositivo PCM. Per ottenere una variabile di tipo Puntatore di un Puntatore si utilizzerà in Gambas la funzione VarPtr( ).
In Gambas detto handle sarà dichiarato come una variabile di tipo Pointer:
Private handle As Pointer
- const char * name è una stringa che rappresenta il nome identificativo dell'handle del dispositivo PCM, e che potrà essere inizialmente "default":
Private device As String = "default"
Il nome è legato e condiziona il tipo di interfaccia al sub-sistema PCM di ALSA, che potrà essere individuato tra quelli compresi nella enumerazione _snd_pcm_type.
- snd_pcm_stream_t stream è un intero che specifica la modalità scelta della direzione del flusso dei dati, in tal caso sarà in modalità Riproduzione audio, ossia valore pari a zero:
Private Const SND_PCM_STREAM_PLAYBACK As Byte = 0
- int mode è la modalità di apertura del sub-sitema PCM. L'impostazione standard del valore mode è zero. Altre modalità sono Non blocking e Async notification.
La funzione restituisce un intero che, se è uguale, a zero significa che l'operazione della funzione ha avuto successo.
Dichiarazione della funzione esterna snd_pcm_open
In Gambas la funzione snd_pcm_open per l'apertura del sub-sistema PCM dovrà essere innanzitutto dichiarata preventivamente con Extern:
Private Extern snd_pcm_open(handleP As Pointer, nome As String, flusso As Integer, 0) As Integer
e potremo, quindi, in subroutine richiamarla per l'uso (i nomi dei parametri sono quelli indicati nel paragrafo precedente):
err = snd_pcm_open(VarPtr(handle), device, SND_PCM_STREAM_PLAYBACK, 0)
Riassunto esemplificativo
Il codice sin qui esposto sarà il seguente:
Library "libasound:2" Private handle As Pointer Private device As String = "default" Private Const SND_PCM_STREAM_PLAYBACK As Byte = 0 Private Extern snd_pcm_open(handleP As Pointer, nome As String, flusso As Integer, mode As Integer) As Integer Public apre_alsa() Dim err As Integer err = snd_pcm_open(VarPtr(handle), device, SND_PCM_STREAM_PLAYBACK, 0) End