|
|
|
La libreria di riferimento di Python |
|
|
|
14.11.1 Oggetti dispositivi audio
Prima che si possa scrivere o leggere da un dispositivo audio, si devono
chiamare tre metodi nel corretto ordine:
- setfmt() per impostare il formato di uscita
- channels() per impostare il numero dei canali
- speed() per impostare la frequenza di campionamento
Alternativamente, si può usare il metodo setparameters() per
impostare tutti e tre i parametri in una volta. Questo è più
conveniente, ma potrebbe non essere così flessibile in tutti i casi.
L'oggetto dispositivo audio restituito da open() definisce
i seguenti metodi:
-
Chiude esplicitamente il dispositivo audio. Quando si sta scrivendo
sopra o leggendo da una periferica audio, si dovrebbe esplicitamente
chiuderla. Una periferica chiusa non può essere nuovamente usata.
-
Restituisce il descrittore di file associato al dispositivo.
-
Legge la dimensione, size, in byte dall'input audio e lo
restituisce come una stringa Python. Diversamente da molti driver di
dispositivi Unix, i dispositivi audio OSS in modalità bloccante
(predefinita) bloccheranno read() finché l'intero
ammontare di dati richiesto sia disponibile.
-
Scrive la stringa Python data nel dispositivo audio e restituisce il
numero dei byte scritti. Se la periferica audio è in modalità
bloccante (predefinità), l'intera stringa viene sempre scritta
(ancora, questo è differente dalla solita semantica dei dispositivi
Unix). Se il dispositivo è in modalità non bloccante, alcuni dati
potrebbero non essere scritti (vedere writeall()).
-
Scrive l'intera stringa Python data nel dispositivo audio:
aspetta finché la periferica audio non sia in grado di accettare dati
e ripete finché i dati data non verranno interamente
scritti. Se il dispositivo è in modalità bloccante (predefinita),
questo ha lo stesso effetto di write(); writeall() è
utile soltanto in modalità non bloccante. Non vengono restituiti
valori poiché la quantità di dati scritti è sempre uguale a quella dei
dati letti.
I seguenti metodi mappano ognuno una chiamata di sistema
ioctl(). La corrispondenza è evidente: per esempio,
setfmt() corrisponde al SNDCTL_DSP_SETFMT
ioctl e
sync() per SNDCTL_DSP_SYNC
(questo può essere utile
quando si consulta la documentazione OSS). Se la sottostante
ioctl() fallisce, verranno sollevate tutte eccezioni
IOError.
-
Pone la periferica in modalità non bloccante. Una volta in modo
non bloccante, non c'è modo di farla tornare in modo bloccante.
-
Restituisce una maschera dei bit dei formati audio supportati dalla
scheda sonora. Su un tpico sistema Linux, questi formati sono:
AFMT_MU_LAW |
un logaritmo di codifica (usato dai file .au Sun e
/dev/audio) |
AFMT_A_LAW |
un logaritmo di codifica |
AFMT_IMA_ADPCM |
Un formato di compressione 4:1 definito da Interactive
Multimedia Association |
AFMT_U8 |
Non firmato, audio ad 8-bit |
AFMT_S16_LE |
Non firmato, audio a 16-bit, con ordine little-endian
(come usato dai processori Intel) |
AFMT_S16_BE |
Non firmato, audio a 16-bit audio, con ordine big-endian
(come usato dai processori 68k, PowerPC, Sparc) |
AFMT_S8 |
Non firmato, audio ad 8 bit |
AFMT_U16_LE |
Non firmato, audio little-endian a 16-bit |
AFMT_U16_BE |
Non firmato, audio big-endian a 16-bit |
Molti sistemi supportano solamente un sotto insieme di questi formati.
Numerosi dispositivi supportano solamente AFMT_U8; il
formato oggi più comunemente usato è il AFMT_S16_LE.
-
Tenta di impostare il corrente formato audio a
format (vedere getfmts() per una lista). Restituisce
il formato audio per il quale il dispositivo era stata impostata, che
potrebbe non essere il formato richiesto. Potrebbe anche essere usato
per restituire il corrente formato audio--si otterrà questo passando
un ``audio format'' di AFMT_QUERY.
-
Imposta il numero dei canali di output a nchannels. Un valore
di
1
indica suono mono, 2
stereo. Alcuni dispositivi
possono avere più di due canali ed alcune periferiche hig-end
potrebbero non supportare il mono. Restituisce il numero dei canali
del dispositivo che erano stati impostati.
-
Tenta di impostare il campionamento audio alla frequenza di
campionamento samplerate, di campioni per secondo. Restituisce
la frequenza attualmente impostata. La maggior parte dei dispositivi
audio non supporta campionamenti di frequenza arbitrari. I più comuni
campionamenti sono:
8000 |
frequenza predefinita per /dev/audio |
11025 |
registrazione vocale |
22050 |
|
44100 |
Qualità audio CD (a 16 bits/campione e 2 canali) |
96000 |
Qualità audio DVD (a 24 bits/campione) |
-
Attende finché il dispositivo audio abbia riprodotto ogni byte nel suo
buffer. Questo succede implicitamente quando la periferica è chiusa.
La documentazione OSS raccomanda la chiusura e la riapertura del
dispositivo piuttosto che l'uso di sync().
-
Interrompe immediatamente la riproduzione e la registrazione, e
riporta la periferica ad uno stato che può accettare comandi. La
documentazione OSS raccomanda la chiusura e la riapertura del
dispositivo dopo avere chiamato reset().
-
Dice al driver che c'è qualcosa di simile ad una pausa nell'output,
rendendo possibile per il dispositivo la gestione della pausa in modo
più intelligente. E' possibile perciò usarla dopo avere riprodotto un
effetto sonoro, prima di aspettare l'input dell'utente o prima di
accedere all'I/O del disco.
I seguenti metodi sono convenienti e combinano vari ioctls, o un ioctl
ed alcuni semplici calcoli.
setparameters( |
format, nchannels, samplerate [, strict=False]) |
-
Imposta i parametri della chiave audio di campionatura: il formato
dei campioni, il numero dei canali e la frequenza di campionamento in
una chiamata. format, nchannels e samplerate
dovrebbero essere specificati nei metodi setfmt(),
channels() e speed(). Se strict è vero,
setparameters() cerca di vedere se ogni parametro era
attualmente impostato al valore richiesto, e solleva un'eccezione
OSSAudioError se così non è. Restituisce una tupla
(format, nchannels, samplerate) che indica i
parametri dei valori che venivano attualmente impostati dal driver del
dispositivo (ad esempio, la stessa cosa dei valori restituiti da
setfmt(), channels() e speed()).
Per esempio,
(fmt, channels, rate) = dsp.setparameters(fmt, channels, rate)
è equivalente a
fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(channels)
-
Restituisce la grandezza del buffer hardware, in campioni.
-
Restituisce il numero di campioni che sono nel buffer hardware che
sono ancora da riprodurre.
-
Restituisce il numero di campioni presenti nel buffer hardware e che
sono ancora da riprodurre.
|
|
|
La libreria di riferimento di Python |
|
|
|
Release 2.3.4, documentation updated on 21. maggio 2005.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.