audio — Modul Audio¶
Modul audio slouží k záznamu zvukových vzorků z mikrofonu. PDM vzorky zachycené z mikrofonu jsou filtrovány a decimovány na PCM vzorky, které lze předat uživatelskému callbacku nebo přečíst přímo do bufferu.
Funkce¶
- 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¶
Inicializuje modul audio. Musí být zavolána jako první, dříve než se modul audio začne používat.
channelsje počet zvukových kanálů. Může být1nebo2. Při použití více než jednoho kanálu jsou zvukové vzorky prokládané. Vícekanálový záznam je podporován pouze na deskách s více než jedním mikrofonem.frequencyje vzorkovací frekvence PCM v Hz. Sada podporovaných frekvencí závisí na portu/desce.gain_dbje zisk mikrofonu, který se má aplikovat, v decibelech.highpassje koeficient horní propusti (STM32) nebo boolean, který horní propust povoluje (Alif). Na portech, které horní propust neimplementují, je ignorován.samplesje počet PCM vzorků, které se mají akumulovat na jeden callback. Pokud je nastaveno na-1, hodnota se vypočítá automaticky z decimačního faktoru a počtu kanálů. Musí být násobkem 16. Dostupné na portech STM32 a Alif.buffersje počet interních PCM bufferů použitých k řazení vzorků do fronty mezi DMA ISR a uživatelem. Dostupné na portech Alif a RP2.overflowřídí, zda přetečení bufferu vyvoláRuntimeError. Při hodnotěFalseje nejstarší buffer přepsán a streamování pokračuje. Dostupné na portech Alif a RP2.clkdivpřepíše dělič PIO hodin použitý k řízení PDM hodin. Při hodnotě0se dělič vypočítá z požadované frekvence. Dostupné na portu RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Spustí záznam zvuku.
callbackje volán z plánovače s jediným argumentempcmbufpokaždé, když je připraven nový PCM buffer.pcmbufje signed 16bitovýbytearrayPCM vzorků, jehož délka je určena decimačním faktorem, počtem kanálů a argumentemsamplespředaným funkciaudio.init(). V jednokanálovém režimu je každá položka jedním 16bitovým vzorkem; v dvoukanálovém režimu jsou vzorky prokládané v párech.Na portech, které podporují
audio.get_buffer()(Alif a RP2), předání nevolatelné hodnoty (např.None) spustí záznam bez callbacku, takže buffery lze místo toho vyprazdňovat pomocíaudio.get_buffer().
- audio.get_buffer(timeout: int = 0) bytearray¶
Vrátí další dostupný PCM buffer. Blokuje, dokud není buffer připraven nebo dokud neuplyne
timeoutmilisekund (0znamená čekat navždy). VyvoláRuntimeError, pokud není povoleno streamování, pokud došlo k přetečení bufferu přioverflownastaveném naTrue, nebo pokud je nainstalován streamovací callback.Dostupné na portech Alif a RP2.
- audio.read_pdm(buf: bytearray) None¶
Čte surové PDM vzorky z mikrofonu přímo do
buf.bufmusí býtarray/bytearray, jehož velikost prvku odpovídá počtu kanálů (1 bajt pro mono, 2 bajty pro stereo).Dostupné pouze na portu STM32 (desky založené na SAI).
- audio.samples() int¶
Vrátí celkový počet PCM vzorků zachycených od posledního volání
audio.start_streaming().Dostupné pouze na portu RP2.
- audio.overflow() bool¶
Vrátí
True, pokud došlo k přetečení bufferu od posledního voláníaudio.start_streaming().Dostupné pouze na portu RP2.