audio — Modulo Audio¶
Il modulo audio viene utilizzato per registrare campioni audio da un microfono. I campioni PDM acquisiti dal microfono vengono filtrati e decimati in campioni PCM, che possono essere passati a una callback definita dall’utente oppure letti direttamente in un buffer.
Funzioni¶
- audio.init(channels: int = 1, frequency: int = 16000, gain_db: int = 24, highpass: float | bool = 0.9883, samples: int = -1, buffers: int = 16, overflow: bool = True, clkdiv: int = 0) None¶
Inizializza il modulo audio. Deve essere chiamata per prima, prima di utilizzare il modulo audio.
channelsè il numero di canali audio. Può essere1o2. I campioni audio vengono interlacciati quando si utilizza più di un canale. L’acquisizione multicanale è supportata solo sulle schede dotate di più di un microfono.frequencyè la frequenza di campionamento PCM in Hz. L’insieme delle frequenze supportate dipende dalla porta/scheda.gain_dbè il guadagno del microfono da applicare, in decibel.highpassè il coefficiente del filtro passa-alto (STM32) oppure un valore booleano che abilita il filtro passa-alto (Alif). Viene ignorato sulle porte che non implementano un filtro passa-alto.samplesè il numero di campioni PCM da accumulare per ogni callback. Se impostato a-1il valore viene calcolato automaticamente dal fattore di decimazione e dal numero di canali. Deve essere un multiplo di 16. Disponibile sulle porte STM32 e Alif.buffersè il numero di buffer PCM interni utilizzati per accodare i campioni tra l’ISR del DMA e l’utente. Disponibile sulle porte Alif e RP2.overflowcontrolla se un overflow del buffer genera unRuntimeError. Quando èFalseil buffer più vecchio viene sovrascritto e lo streaming continua. Disponibile sulle porte Alif e RP2.clkdivsovrascrive il divisore di clock del PIO utilizzato per pilotare il clock PDM. Quando è0il divisore viene calcolato dalla frequenza richiesta. Disponibile sulla porta RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Avvia l’acquisizione audio.
callbackviene chiamata dallo scheduler con un singolo argomentopcmbufogni volta che un nuovo buffer PCM è pronto.pcmbufè unbytearraydi campioni PCM a 16 bit con segno, la cui lunghezza è determinata dal fattore di decimazione, dal numero di canali e dall’argomentosamplespassato aaudio.init(). In modalità a canale singolo ogni elemento è un campione a 16 bit; in modalità a doppio canale i campioni sono interlacciati a coppie.Sulle porte che supportano
audio.get_buffer()(Alif e RP2), passare un valore non richiamabile (ad esempioNone) avvia l’acquisizione senza una callback, in modo che i buffer possano essere svuotati conaudio.get_buffer().
- audio.get_buffer(timeout: int = 0) bytearray¶
Restituisce il prossimo buffer PCM disponibile. Si blocca finché un buffer non è pronto oppure finché non sono trascorsi
timeoutmillisecondi (0significa attendere indefinitamente). Genera unRuntimeErrorse lo streaming non è abilitato, se si è verificato un overflow del buffer mentreoverflowèTrue, oppure se è installata una callback di streaming.Disponibile sulle porte Alif e RP2.
- audio.read_pdm(buf: bytearray) None¶
Legge campioni PDM grezzi dal microfono direttamente in
buf.bufdeve essere unarray/bytearrayla cui dimensione degli elementi corrisponda al numero di canali (1 byte per il mono, 2 byte per lo stereo).Disponibile solo sulla porta STM32 (schede basate su SAI).
- audio.samples() int¶
Restituisce il numero totale di campioni PCM acquisiti dall’ultima chiamata a
audio.start_streaming().Disponibile solo sulla porta RP2.
- audio.overflow() bool¶
Restituisce
Truese si è verificato un overflow del buffer dall’ultima chiamata aaudio.start_streaming().Disponibile solo sulla porta RP2.