audio — Modulul Audio¶
Modulul audio este folosit pentru a înregistra eșantioane audio de la un microfon. Eșantioanele PDM captate de la microfon sunt filtrate și decimate în eșantioane PCM care pot fi transmise unei funcții de retroapelare (callback) a utilizatorului sau citite direct într-un tampon (buffer).
Funcții¶
- 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¶
Inițializează modulul audio. Trebuie apelată prima dată, înainte de a folosi modulul audio.
channelseste numărul de canale audio. Poate fi1sau2. Eșantioanele audio sunt intercalate atunci când se folosește mai mult de un canal. Captarea pe mai multe canale este acceptată doar pe plăcile cu mai mult de un microfon.frequencyeste frecvența de eșantionare PCM în Hz. Setul de frecvențe acceptate este specific portului/plăcii.gain_dbeste amplificarea (gain) microfonului care se aplică, în decibeli.highpasseste coeficientul filtrului trece-sus (STM32) sau o valoare booleană care activează filtrul trece-sus (Alif). Ignorat pe porturile care nu implementează un filtru trece-sus.sampleseste numărul de eșantioane PCM care se acumulează per funcție de retroapelare (callback). Dacă este setat la-1, valoarea este calculată automat din factorul de decimare și numărul de canale. Trebuie să fie un multiplu de 16. Disponibil pe porturile STM32 și Alif.bufferseste numărul de tampoane (buffers) PCM interne folosite pentru a pune în coadă eșantioanele între ISR-ul DMA și utilizator. Disponibil pe porturile Alif și RP2.overflowcontrolează dacă o depășire a tamponului (buffer) genereazăRuntimeError. Când esteFalse, cel mai vechi tampon (buffer) este suprascris și streaming-ul continuă. Disponibil pe porturile Alif și RP2.clkdivsuprascrie divizorul de ceas PIO folosit pentru a comanda ceasul PDM. Când este0, divizorul este calculat din frecvența solicitată. Disponibil pe portul RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Pornește captarea audio.
callbackeste apelată din planificator cu un singur argumentpcmbufde fiecare dată când un nou tampon (buffer) PCM este gata.pcmbufeste unbytearrayde eșantioane PCM cu semn pe 16 biți a cărui lungime este determinată de factorul de decimare, numărul de canale și argumentulsamplestransmis cătreaudio.init(). În modul cu un singur canal, fiecare intrare este un eșantion pe 16 biți; în modul cu două canale, eșantioanele sunt intercalate în perechi.Pe porturile care acceptă
audio.get_buffer()(Alif și RP2), transmiterea unei valori neapelabile (de ex.None) pornește captarea fără funcție de retroapelare (callback), astfel încât tampoanele (buffers) să poată fi golite folosind în schimbaudio.get_buffer().
- audio.stop_streaming() None¶
Oprește captarea audio și șterge orice funcție de retroapelare (callback) instalată.
- audio.get_buffer(timeout: int = 0) bytearray¶
Returnează următorul tampon (buffer) PCM disponibil. Blochează până când un tampon (buffer) este gata sau până când trec
timeoutmilisecunde (0înseamnă așteptare la nesfârșit). GenereazăRuntimeErrordacă streaming-ul nu este activat, dacă a avut loc o depășire a tamponului (buffer) în timp ceoverflowesteTruesau dacă este instalată o funcție de retroapelare (callback) de streaming.Disponibil pe porturile Alif și RP2.
- audio.read_pdm(buf: bytearray) None¶
Citește eșantioane PDM brute de la microfon direct în
buf.buftrebuie să fie un obiectarray/bytearraya cărui dimensiune a elementului corespunde numărului de canale (1 octet pentru mono, 2 octeți pentru stereo).Disponibil doar pe portul STM32 (plăci bazate pe SAI).
- audio.samples() int¶
Returnează numărul total de eșantioane PCM captate de la ultimul apel al
audio.start_streaming().Disponibil doar pe portul RP2.
- audio.overflow() bool¶
Returnează
Truedacă a avut loc o depășire a tamponului (buffer) de la ultimul apel alaudio.start_streaming().Disponibil doar pe portul RP2.