audio — Audio Module

De audio module wordt gebruikt om audiomonsters op te nemen vanaf een microfoon. PDM-monsters die van de microfoon worden vastgelegd, worden gefilterd en gedecimeerd tot PCM-monsters die aan een gebruikerscallback kunnen worden doorgegeven of rechtstreeks in een buffer kunnen worden ingelezen.

Functies

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

Initialiseert de audiomodule. Moet eerst worden aangeroepen voordat de audiomodule wordt gebruikt.

channels is het aantal audiokanalen. Mag 1 of 2 zijn. Audiomonsters worden afgewisseld wanneer meer dan één kanaal wordt gebruikt. Opname met meerdere kanalen wordt alleen ondersteund op borden met meer dan één microfoon.

frequency is de PCM-monsterfrequentie in Hz. De set ondersteunde frequenties is afhankelijk van de poort/het bord.

gain_db is de toe te passen microfoonversterking, in decibel.

highpass is de hoogdoorlaatfiltercoëfficiënt (STM32) of een boolean die het hoogdoorlaatfilter inschakelt (Alif). Wordt genegeerd op poorten die geen hoogdoorlaatfilter implementeren.

samples is het aantal PCM-monsters dat per callback wordt verzameld. Indien ingesteld op -1 wordt de waarde automatisch berekend uit de decimatiefactor en het aantal kanalen. Moet een veelvoud van 16 zijn. Beschikbaar op de STM32- en Alif-poorten.

buffers is het aantal interne PCM-buffers dat wordt gebruikt om monsters in de wachtrij te plaatsen tussen de DMA-ISR en de gebruiker. Beschikbaar op de Alif- en RP2-poorten.

overflow bepaalt of een bufferoverloop een RuntimeError veroorzaakt. Indien False wordt de oudste buffer overschreven en gaat het streamen door. Beschikbaar op de Alif- en RP2-poorten.

clkdiv overschrijft de PIO-klokdeler die wordt gebruikt om de PDM-klok aan te sturen. Indien 0 wordt de deler berekend uit de gevraagde frequentie. Beschikbaar op de RP2-poort.

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

Start de audio-opname.

callback wordt vanuit de scheduler aangeroepen met één argument pcmbuf telkens wanneer een nieuwe PCM-buffer gereed is. pcmbuf is een 16-bits bytearray met teken van PCM-monsters waarvan de lengte wordt bepaald door de decimatiefactor, het aantal kanalen en het samples argument dat aan audio.init() is doorgegeven. In de enkelkanaalsmodus is elke vermelding één 16-bits monster; in de tweekanaalsmodus worden monsters paarsgewijs afgewisseld.

Op poorten die audio.get_buffer() ondersteunen (Alif en RP2) start het doorgeven van een niet-aanroepbare waarde (bijv. None) de opname zonder callback, zodat buffers in plaats daarvan met audio.get_buffer() kunnen worden geleegd.

audio.stop_streaming() None

Stopt de audio-opname en wist elke geïnstalleerde callback.

audio.get_buffer(timeout: int = 0) bytearray

Retourneert de volgende beschikbare PCM-buffer. Blokkeert totdat een buffer gereed is of totdat timeout milliseconden zijn verstreken (0 betekent oneindig wachten). Veroorzaakt een RuntimeError als streamen niet is ingeschakeld, als een bufferoverloop is opgetreden terwijl overflow True is, of als een streamingcallback is geïnstalleerd.

Beschikbaar op de Alif- en RP2-poorten.

audio.read_pdm(buf: bytearray) None

Leest ruwe PDM-monsters van de microfoon rechtstreeks in buf. buf moet een array/bytearray zijn waarvan de elementgrootte overeenkomt met het aantal kanalen (1 byte voor mono, 2 bytes voor stereo).

Alleen beschikbaar op de STM32-poort (op SAI gebaseerde borden).

audio.samples() int

Retourneert het totale aantal PCM-monsters dat is vastgelegd sinds de laatste aanroep van audio.start_streaming().

Alleen beschikbaar op de RP2-poort.

audio.overflow() bool

Retourneert True als er sinds de laatste aanroep van audio.start_streaming() een bufferoverloop is opgetreden.

Alleen beschikbaar op de RP2-poort.