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. |1|
- 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, mode As Integer) 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
Apertura del dispositivo PCM di ALSA ed impostazione dei parametri
Mostreremo un esempio che apre il dispositivo predefinito PCM, imposta alcuni parametri, e quindi visualizza il valore della maggior parte dei parametri dell'hardware audio. I risultati visualizzati variano leggermente a seconda dell'hardware audio.
Dopo aver eseguito il programma sul proprio sistema, sperimentare e apportare alcune modifiche. Cambiare il nome del dispositivo dal default a hw:0,0 o plughw : e vedere se i risultati cambiano. Modificare i valori dei parametri hardware e osservare come i risultati visualizzati cambiano.
Paragrafo in costruzione !
Note
[1] ALSA fornisce una serie di nomi dei dispositivi PCM. Quando si specifica una sorgente o un dispositivo audio, ALSA consente di specificare i dispositivi alternativi, non solo le schede audio.
L'elenco essenziale dei nomi principali per i dispositivi è il seguente:
- dispositivo standard: default
- è quello predefinito;
- corrisponde al dispositivo plughw predefinito;
- non prevede parametri.
- dispositivo nullo: null
- è un dispositivo nullo (buco nero);
- in lettura è muto;
- in scrittura non scrive;
- non prevede parametri.
- dispositivo hardware: hw
- consente l'accesso diretto ai driver della scheda installati sul computer;
- prevede i seguenti parametri:
- CARD: Tipo di scheda audio (numero o nome);
- DEV: Numero del dispostivo;
- SUBDEV: numero di porta all'interno della scheda audio (solo per le schede con più porte di uscita).
Se si pone il valore -1 in DEV ed in SUBDEV, viene indicato rispettivamente qualunque dispositivo o porta immediatamente disponibile.
- la sintassi è:
hw: <dispositivo> <dispositivo> <dispositivo>
esempio: hw:0,0
- dispositivo hardware con conversioni automatiche: plughw.
- consente l'accesso diretto al controllo finale con un plugin di conversione automatica.
- dispositivo di conversione automatica: plug
- passa i dati mediante un plugin di conversione prima di ridirigere il flusso a un plugin specificato come parametro.
- dispositivo di memoria condivisa: shm
- si usa per connettersi con dispositivi remoti.