audio — Ljudmodul

Modulen audio används för att spela in ljudprover från en mikrofon. PDM-prover som fångas från mikrofonen filtreras och decimeras till PCM-prover som kan skickas till ett användaråteranrop eller läsas direkt in i en buffert.

Funktioner

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

Initierar ljudmodulen. Måste anropas först innan ljudmodulen används.

channels är antalet ljudkanaler. Kan vara 1 eller 2. Ljudprover varvas när fler än en kanal används. Flerkanalsinspelning stöds endast på kort med fler än en mikrofon.

frequency är PCM-provtagningsfrekvensen i Hz. Uppsättningen av frekvenser som stöds är port-/kortspecifik.

gain_db är den mikrofonförstärkning som ska tillämpas, i decibel.

highpass är högpassfiltrets koefficient (STM32) eller ett booleskt värde som aktiverar högpassfiltret (Alif). Ignoreras på portar som inte implementerar ett högpassfilter.

samples är antalet PCM-prover som ackumuleras per återanrop. Om det sätts till -1 beräknas värdet automatiskt utifrån decimeringsfaktorn och antalet kanaler. Måste vara en multipel av 16. Tillgängligt på STM32- och Alif-portarna.

buffers är antalet interna PCM-buffertar som används för att köa prover mellan DMA-ISR:en och användaren. Tillgängligt på Alif- och RP2-portarna.

overflow styr om en buffertöverspillning utlöser RuntimeError. När False skrivs den äldsta bufferten över och strömningen fortsätter. Tillgängligt på Alif- och RP2-portarna.

clkdiv åsidosätter den PIO-klockdelare som används för att driva PDM-klockan. När 0 beräknas delaren utifrån den begärda frekvensen. Tillgängligt på RP2-porten.

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

Startar ljudinspelning.

callback anropas från schemaläggaren med ett enda argument pcmbuf varje gång en ny PCM-buffert är klar. pcmbuf är en bytearray med 16-bitars PCM-prover med tecken vars längd bestäms av decimeringsfaktorn, antalet kanaler och argumentet samples som skickas till audio.init(). I enkanalsläge är varje post ett 16-bitars prov; i tvåkanalsläge varvas proverna parvis.

På portar som stöder audio.get_buffer() (Alif och RP2) startar man inspelning utan ett återanrop genom att skicka ett icke-anropsbart värde (t.ex. None), så att buffertar i stället kan tömmas med audio.get_buffer().

audio.stop_streaming() None

Stoppar ljudinspelning och rensar eventuellt installerat återanrop.

audio.get_buffer(timeout: int = 0) bytearray

Returnerar nästa tillgängliga PCM-buffert. Blockerar tills en buffert är klar eller tills timeout millisekunder har förflutit (0 betyder vänta för evigt). Utlöser RuntimeError om strömning inte är aktiverad, om en buffertöverspillning har inträffat medan overflow är True, eller om ett strömningsåteranrop är installerat.

Tillgängligt på Alif- och RP2-portarna.

audio.read_pdm(buf: bytearray) None

Läser råa PDM-prover från mikrofonen direkt in i buf. buf måste vara en array/bytearray vars elementstorlek matchar antalet kanaler (1 byte för mono, 2 byte för stereo).

Tillgängligt endast på STM32-porten (SAI-baserade kort).

audio.samples() int

Returnerar det totala antalet PCM-prover som fångats sedan det senaste anropet till audio.start_streaming().

Tillgängligt endast på RP2-porten.

audio.overflow() bool

Returnerar True om en buffertöverspillning har inträffat sedan det senaste anropet till audio.start_streaming().

Tillgängligt endast på RP2-porten.