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
channelsaz audiocsatornák száma. Lehet1vagy2. 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
frequencya PCM-minták frekvenciája Hz-ben. A támogatott frekvenciák köre port-/lapfüggő.A
gain_dbaz alkalmazandó mikrofon-erősítés decibelben.A
highpassa 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
samplesa 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
buffersazoknak 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
overflowszabályozza, hogy egy pufferes túlcsordulás kiváltson-eRuntimeErrorhibát.Falseesetén a legrégebbi puffer felülíródik, és a streamelés folytatódik. Az Alif és az RP2 portokon érhető el.A
clkdivfelülbírálja a PDM-órajel meghajtására használt PIO-órajelosztót.0eseté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
callbackaz ütemezőből kerül meghívásra egyetlenpcmbufargumentummal minden alkalommal, amikor egy új PCM-puffer elkészül. Apcmbufegy előjeles 16 bitesbytearrayPCM-mintákból, amelynek hosszát a decimálási tényező, a csatornák száma és azaudio.init()függvénynek átadottsamplesargumentum 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 azaudio.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
timeoutezredmásodperc el nem telik (0esetén korlátlanul vár).RuntimeErrorhibát vált ki, ha a streamelés nincs engedélyezve, ha pufferes túlcsordulás történt, miközben azoverflowértékeTrue, 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
bufpufferbe. Abufegy olyanarray/bytearraylegyen, 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 azaudio.start_streaming()függvény utolsó hívása óta pufferes túlcsordulás történt.Csak az RP2 porton érhető el.