audio — Audio modul

Modul audio koristi se za snimanje zvučnih uzoraka s mikrofona. PDM uzorci snimljeni s mikrofona filtriraju se i decimiraju u PCM uzorke koji se mogu proslijediti korisničkom povratnom pozivu ili izravno učitati u međuspremnik.

Funkcije

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

Inicijalizira audio modul. Mora se pozvati prije korištenja audio modula.

channels je broj zvučnih kanala. Može biti 1 ili 2. Zvučni uzorci su isprepleteni kada se koristi više od jednog kanala. Višekanalno snimanje podržano je samo na pločama s više od jednog mikrofona.

frequency je frekvencija PCM uzorkovanja u Hz. Skup podržanih frekvencija ovisi o portu/ploči.

gain_db je pojačanje mikrofona koje se primjenjuje, u decibelima.

highpass je koeficijent visokopropusnog filtra (STM32) ili logička vrijednost koja omogućuje visokopropusni filtar (Alif). Zanemaruje se na portovima koji ne implementiraju visokopropusni filtar.

samples je broj PCM uzoraka koji se akumuliraju po povratnom pozivu. Ako je postavljen na -1, vrijednost se automatski izračunava iz faktora decimacije i broja kanala. Mora biti višekratnik broja 16. Dostupno na STM32 i Alif portovima.

buffers je broj internih PCM međuspremnika koji se koriste za stavljanje uzoraka u red između DMA ISR-a i korisnika. Dostupno na Alif i RP2 portovima.

overflow upravlja time hoće li prelijevanje međuspremnika izazvati RuntimeError. Kada je False, najstariji međuspremnik se prepisuje i strujanje se nastavlja. Dostupno na Alif i RP2 portovima.

clkdiv nadjačava PIO djelitelj takta koji se koristi za pogon PDM takta. Kada je 0, djelitelj se izračunava iz tražene frekvencije. Dostupno na RP2 portu.

audio.start_streaming(callback: Callable[[bytearray], None] | None) None

Pokreće snimanje zvuka.

callback se poziva iz rasporeda s jednim argumentom pcmbuf svaki put kada je novi PCM međuspremnik spreman. pcmbuf je predznačeni 16-bitni bytearray PCM uzoraka čija je duljina određena faktorom decimacije, brojem kanala i argumentom samples proslijeđenim funkciji audio.init(). U jednokanalnom načinu rada svaki je unos jedan 16-bitni uzorak; u dvokanalnom načinu rada uzorci su isprepleteni u parovima.

Na portovima koji podržavaju audio.get_buffer() (Alif i RP2), prosljeđivanje vrijednosti koja se ne može pozvati (npr. None) pokreće snimanje bez povratnog poziva tako da se međuspremnici mogu prazniti pomoću audio.get_buffer().

audio.stop_streaming() None

Zaustavlja snimanje zvuka i briše svaki instalirani povratni poziv.

audio.get_buffer(timeout: int = 0) bytearray

Vraća sljedeći dostupni PCM međuspremnik. Blokira dok međuspremnik ne bude spreman ili dok ne protekne timeout milisekundi (0 znači čekati zauvijek). Izaziva RuntimeError ako strujanje nije omogućeno, ako je došlo do prelijevanja međuspremnika dok je overflow True, ili ako je instaliran povratni poziv za strujanje.

Dostupno na Alif i RP2 portovima.

audio.read_pdm(buf: bytearray) None

Čita sirove PDM uzorke s mikrofona izravno u buf. buf mora biti array/bytearray čija veličina elementa odgovara broju kanala (1 bajt za mono, 2 bajta za stereo).

Dostupno samo na STM32 portu (ploče temeljene na SAI-ju).

audio.samples() int

Vraća ukupan broj PCM uzoraka snimljenih od posljednjeg poziva funkcije audio.start_streaming().

Dostupno samo na RP2 portu.

audio.overflow() bool

Vraća True ako je došlo do prelijevanja međuspremnika od posljednjeg poziva funkcije audio.start_streaming().

Dostupno samo na RP2 portu.