21.1.1 Oggetti dispositivo audio

Gli oggetti dispositivo audio restituiti da open() definiscono i seguenti metodi (ad eccezione degli oggetti control che forniscono solo getinfo(), setinfo(), fileno() e drain()):

close( )
Questo metodo chiude esplicitamente il dispositivo. È utile in situazioni dove la cancellazione dell'oggetto non chiude immediatamente l'oggetto, poiché ci sono altri riferimenti ad esso. Un dispositivo chiuso non deve essere riutilizzato.

fileno( )
Restituisce il descrittore di file associato al dispositivo. Questo può essere utilizzato per impostare la notifica SIGPOLL, come descritto sotto.

drain( )
Questo metodo attende finché tutte le unità di output in attesa non vengono elaborate e restituite. Chiamare questo metodo è spesso non necessario: distruggendo gli oggetti verranno automaticamente chiusi tutti i dispositivi audio e questo implica un prosciugamento (NdT: drain) implicito.

flush( )
Questo metodo scarta tutto l'output in attesa. Può essere utilizzato per impedire una risposta lenta ad una richiesta di interruzione dell'utente (dovuto alla bufferizzazione fino ad un secondo del suono).

getinfo( )
Questo metodo recupera informazioni sullo stato come il volume di input e output, etc. e li restituisce nella forma dello stato degli oggetti audio. Questo oggetto non ha metodi, ma contiene vari attributi che descrivono lo stato corrente del dispositivo. Il nome ed il significato degli attributi sono descritti in <sun/audioio.h> e nella pagina di manuale audio(7I)<sun/audio.h>. I nomi dei membri hanno una sottile differenza dalle loro controparti in C: lo stato dell'oggetto è una singola struttura. I membri della sottostruttura play hanno un "o_" anteposto al loro nome ed i membri della struttura record hanno un "i_". Perciò, il membro C play.sample_rate è accessibile come o_sample_rate, record.gain come i_gain e monitor_gain linearmente come monitor_gain.

ibufcount( )
Questo metodo restituisce il numero totale di campionamenti che vengono bufferizzati lato registrazione, è utile per determinare quanti dati potranno essere letti da una read(), senza che il programma si blocchi.

obufcount( )
Questo metodo restituisce il numero di campionamenti bufferizzati lato riproduzione. Sfortunatamente, questo numero non può essere utilizzato per determinare il numero di campionamenti che possono essere scritti senza bloccaggio, poiché la lunghezza della coda di output del kernel sembra essere variabile.

read( size)
Questo metodo legge la dimensione (NdT: size) dei campioni dall'input audio e li restituisce come una stringa Python. La funzione è bloccante finché non sono disponibili abbastanza dati.

setinfo( status)
Questo metodo imposta i parametri dello stato del dispositivo audio. Il parametro status è un oggetto dispositivo di stato come restituito da getinfo() e possibilmente modificato dal programma.

write( samples)
A questo metodo viene passata una stringa Python contenente i campioni audio da riprodurre. Se non c'è abbastanza spazio libero nel buffer, ritorna immediatamente, altrimenti si blocca.

Il device audio supporta la notifica asincrona di vari eventi, attraverso il segnale SIGPOLL. Ecco un esempio di come si può abilitare questo in Python:

def handle_sigpoll(signum, frame):
    print 'I got a SIGPOLL update'

import fcntl, signal, STROPTS

signal.signal(signal.SIGPOLL, handle_sigpoll)
fcntl.ioctl(audio_obj.fileno(), STROPTS.I_SETSIG, STROPTS.S_MSG)

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.