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.
channelsis het aantal audiokanalen. Mag1of2zijn. Audiomonsters worden afgewisseld wanneer meer dan één kanaal wordt gebruikt. Opname met meerdere kanalen wordt alleen ondersteund op borden met meer dan één microfoon.frequencyis de PCM-monsterfrequentie in Hz. De set ondersteunde frequenties is afhankelijk van de poort/het bord.gain_dbis de toe te passen microfoonversterking, in decibel.highpassis de hoogdoorlaatfiltercoëfficiënt (STM32) of een boolean die het hoogdoorlaatfilter inschakelt (Alif). Wordt genegeerd op poorten die geen hoogdoorlaatfilter implementeren.samplesis het aantal PCM-monsters dat per callback wordt verzameld. Indien ingesteld op-1wordt de waarde automatisch berekend uit de decimatiefactor en het aantal kanalen. Moet een veelvoud van 16 zijn. Beschikbaar op de STM32- en Alif-poorten.buffersis 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.overflowbepaalt of een bufferoverloop eenRuntimeErrorveroorzaakt. IndienFalsewordt de oudste buffer overschreven en gaat het streamen door. Beschikbaar op de Alif- en RP2-poorten.clkdivoverschrijft de PIO-klokdeler die wordt gebruikt om de PDM-klok aan te sturen. Indien0wordt 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.
callbackwordt vanuit de scheduler aangeroepen met één argumentpcmbuftelkens wanneer een nieuwe PCM-buffer gereed is.pcmbufis een 16-bitsbytearraymet teken van PCM-monsters waarvan de lengte wordt bepaald door de decimatiefactor, het aantal kanalen en hetsamplesargument dat aanaudio.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 metaudio.get_buffer()kunnen worden geleegd.
- audio.get_buffer(timeout: int = 0) bytearray¶
Retourneert de volgende beschikbare PCM-buffer. Blokkeert totdat een buffer gereed is of totdat
timeoutmilliseconden zijn verstreken (0betekent oneindig wachten). Veroorzaakt eenRuntimeErrorals streamen niet is ingeschakeld, als een bufferoverloop is opgetreden terwijloverflowTrueis, 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.bufmoet eenarray/bytearrayzijn 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
Trueals er sinds de laatste aanroep vanaudio.start_streaming()een bufferoverloop is opgetreden.Alleen beschikbaar op de RP2-poort.