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.
channelsist die Anzahl der Audiokanäle. Kann1oder2sein. Audio-Samples werden verschachtelt, wenn mehr als ein Kanal verwendet wird. Mehrkanalaufnahme wird nur auf Boards mit mehr als einem Mikrofon unterstützt.frequencyist die PCM-Samplingfrequenz in Hz. Der Satz der unterstützten Frequenzen ist port-/boardspezifisch.gain_dbist die anzuwendende Mikrofonverstärkung in Dezibel.highpassist der Hochpassfilter-Koeffizient (STM32) oder ein boolescher Wert, der den Hochpassfilter aktiviert (Alif). Wird auf Ports ignoriert, die keinen Hochpassfilter implementieren.samplesist die Anzahl der PCM-Samples, die pro Callback akkumuliert werden. Wird der Wert auf-1gesetzt, 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.buffersist 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.overflowsteuert, ob ein Pufferüberlauf einenRuntimeErrorauslöst. BeiFalsewird 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. Bei0wird 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.
callbackwird vom Scheduler mit einem einzigen Argumentpcmbufaufgerufen, sobald ein neuer PCM-Puffer bereit ist.pcmbufist ein vorzeichenbehaftetes 16-Bit-bytearrayvon PCM-Samples, dessen Länge durch den Dezimationsfaktor, die Anzahl der Kanäle und das anaudio.init()übergebene Argumentsamplesbestimmt 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 mitaudio.get_buffer()geleert werden können.
- 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
timeoutMillisekunden verstrichen sind (0bedeutet, unbegrenzt zu warten). LöstRuntimeErroraus, wenn das Streaming nicht aktiviert ist, wenn ein Pufferüberlauf aufgetreten ist währendoverflowTrueist, 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.bufmuss einarray/bytearraysein, 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
Truezurück, wenn seit dem letzten Aufruf vonaudio.start_streaming()ein Pufferüberlauf aufgetreten ist.Nur auf dem RP2-Port verfügbar.