audio — Audio modul

Az audio modul mikrofonból származó hangminták rögzítésére szolgál. A mikrofonból befogott PDM-minták szűrésen és decimáláson esnek át, így PCM-mintákká alakulnak, amelyek átadhatók egy felhasználói visszahívásnak, vagy közvetlenül beolvashatók egy pufferbe.

Függvények

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

Inicializálja az audio modult. Az audio modul használata előtt először ezt kell meghívni.

A channels az audiocsatornák száma. Lehet 1 vagy 2. Ha egynél több csatornát használunk, a hangminták egymásba fűzve helyezkednek el. A többcsatornás befogás csak az egynél több mikrofonnal rendelkező lapokon támogatott.

A frequency a PCM-minták frekvenciája Hz-ben. A támogatott frekvenciák köre port-/lapfüggő.

A gain_db az alkalmazandó mikrofon-erősítés decibelben.

A highpass a felüláteresztő szűrő együtthatója (STM32), illetve a felüláteresztő szűrőt engedélyező logikai érték (Alif). Azokon a portokon figyelmen kívül marad, amelyek nem valósítanak meg felüláteresztő szűrőt.

A samples a visszahívásonként felhalmozandó PCM-minták száma. Ha -1 értékre van állítva, az értéket a rendszer automatikusan számítja ki a decimálási tényezőből és a csatornák számából. 16 többszörösének kell lennie. Az STM32 és az Alif portokon érhető el.

A buffers azoknak a belső PCM-puffereknek a száma, amelyekkel a minták a DMA ISR és a felhasználó között sorba állíthatók. Az Alif és az RP2 portokon érhető el.

Az overflow szabályozza, hogy egy pufferes túlcsordulás kiváltson-e RuntimeError hibát. False esetén a legrégebbi puffer felülíródik, és a streamelés folytatódik. Az Alif és az RP2 portokon érhető el.

A clkdiv felülbírálja a PDM-órajel meghajtására használt PIO-órajelosztót. 0 esetén az osztó a kért frekvenciából számítódik ki. Az RP2 porton érhető el.

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

Elindítja a hangbefogást.

A callback az ütemezőből kerül meghívásra egyetlen pcmbuf argumentummal minden alkalommal, amikor egy új PCM-puffer elkészül. A pcmbuf egy előjeles 16 bites bytearray PCM-mintákból, amelynek hosszát a decimálási tényező, a csatornák száma és az audio.init() függvénynek átadott samples argumentum határozza meg. Egycsatornás módban minden bejegyzés egy 16 bites minta; kétcsatornás módban a minták párosával egymásba fűzve helyezkednek el.

Azokon a portokon, amelyek támogatják az audio.get_buffer() függvényt (Alif és RP2), egy nem hívható érték (pl. None) átadása visszahívás nélkül indítja el a befogást, így a pufferek ehelyett az audio.get_buffer() függvénnyel üríthetők.

audio.stop_streaming() None

Leállítja a hangbefogást, és törli az esetlegesen telepített visszahívást.

audio.get_buffer(timeout: int = 0) bytearray

Visszaadja a következő elérhető PCM-puffert. Blokkol, amíg egy puffer el nem készül, vagy amíg timeout ezredmásodperc el nem telik (0 esetén korlátlanul vár). RuntimeError hibát vált ki, ha a streamelés nincs engedélyezve, ha pufferes túlcsordulás történt, miközben az overflow értéke True, vagy ha streamelő visszahívás van telepítve.

Az Alif és az RP2 portokon érhető el.

audio.read_pdm(buf: bytearray) None

Nyers PDM-mintákat olvas be a mikrofonból közvetlenül a buf pufferbe. A buf egy olyan array/bytearray legyen, amelynek elemmérete megegyezik a csatornák számával (1 bájt monó, 2 bájt sztereó esetén).

Csak az STM32 porton érhető el (SAI-alapú lapok).

audio.samples() int

Visszaadja az audio.start_streaming() függvény utolsó hívása óta befogott PCM-minták teljes számát.

Csak az RP2 porton érhető el.

audio.overflow() bool

True értéket ad vissza, ha az audio.start_streaming() függvény utolsó hívása óta pufferes túlcsordulás történt.

Csak az RP2 porton érhető el.