audio — Audio-Modul

Das audio-Modul wird verwendet, um Audio-Samples von einem Mikrofon aufzunehmen. Die vom Mikrofon erfassten PDM-Samples werden gefiltert und auf PCM-Samples dezimiert, die an einen benutzerdefinierten Callback übergeben oder direkt in einen Puffer eingelesen werden können.

Funktionen

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

Initialisiert das Audio-Modul. Muss zuerst aufgerufen werden, bevor das Audio-Modul verwendet wird.

channels ist die Anzahl der Audiokanäle. Kann 1 oder 2 sein. Audio-Samples werden verschachtelt, wenn mehr als ein Kanal verwendet wird. Mehrkanalaufnahme wird nur auf Boards mit mehr als einem Mikrofon unterstützt.

frequency ist die PCM-Samplingfrequenz in Hz. Der Satz der unterstützten Frequenzen ist port-/boardspezifisch.

gain_db ist die anzuwendende Mikrofonverstärkung in Dezibel.

highpass ist der Hochpassfilter-Koeffizient (STM32) oder ein boolescher Wert, der den Hochpassfilter aktiviert (Alif). Wird auf Ports ignoriert, die keinen Hochpassfilter implementieren.

samples ist die Anzahl der PCM-Samples, die pro Callback akkumuliert werden. Wird der Wert auf -1 gesetzt, wird er automatisch aus dem Dezimationsfaktor und der Anzahl der Kanäle berechnet. Muss ein Vielfaches von 16 sein. Verfügbar auf den STM32- und Alif-Ports.

buffers ist die Anzahl der internen PCM-Puffer, die zum Einreihen von Samples zwischen dem DMA-ISR und dem Benutzer verwendet werden. Verfügbar auf den Alif- und RP2-Ports.

overflow steuert, ob ein Pufferüberlauf einen RuntimeError auslöst. Bei False wird der älteste Puffer überschrieben und das Streaming fortgesetzt. Verfügbar auf den Alif- und RP2-Ports.

clkdiv überschreibt den PIO-Taktteiler, der zum Ansteuern des PDM-Takts verwendet wird. Bei 0 wird der Teiler aus der angeforderten Frequenz berechnet. Verfügbar auf dem RP2-Port.

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

Startet die Audioaufnahme.

callback wird vom Scheduler mit einem einzigen Argument pcmbuf aufgerufen, sobald ein neuer PCM-Puffer bereit ist. pcmbuf ist ein vorzeichenbehaftetes 16-Bit-bytearray von PCM-Samples, dessen Länge durch den Dezimationsfaktor, die Anzahl der Kanäle und das an audio.init() übergebene Argument samples bestimmt wird. Im Einkanalmodus ist jeder Eintrag ein 16-Bit-Sample; im Zweikanalmodus werden die Samples paarweise verschachtelt.

Auf Ports, die audio.get_buffer() unterstützen (Alif und RP2), startet die Übergabe eines nicht aufrufbaren Werts (z. B. None) die Aufnahme ohne Callback, sodass die Puffer stattdessen mit audio.get_buffer() geleert werden können.

audio.stop_streaming() None

Stoppt die Audioaufnahme und löscht jeden installierten Callback.

audio.get_buffer(timeout: int = 0) bytearray

Gibt den nächsten verfügbaren PCM-Puffer zurück. Blockiert, bis ein Puffer bereit ist oder bis timeout Millisekunden verstrichen sind (0 bedeutet, unbegrenzt zu warten). Löst RuntimeError aus, wenn das Streaming nicht aktiviert ist, wenn ein Pufferüberlauf aufgetreten ist während overflow True ist, oder wenn ein Streaming-Callback installiert ist.

Verfügbar auf den Alif- und RP2-Ports.

audio.read_pdm(buf: bytearray) None

Liest rohe PDM-Samples vom Mikrofon direkt in buf. buf muss ein array/bytearray sein, dessen Elementgröße der Anzahl der Kanäle entspricht (1 Byte für Mono, 2 Byte für Stereo).

Nur auf dem STM32-Port (SAI-basierte Boards) verfügbar.

audio.samples() int

Gibt die Gesamtzahl der seit dem letzten Aufruf von audio.start_streaming() erfassten PCM-Samples zurück.

Nur auf dem RP2-Port verfügbar.

audio.overflow() bool

Gibt True zurück, wenn seit dem letzten Aufruf von audio.start_streaming() ein Pufferüberlauf aufgetreten ist.

Nur auf dem RP2-Port verfügbar.