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 vara1eller2. 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-1berä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.overflowstyr om en buffertöverspillning utlöserRuntimeError. NärFalseskrivs 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är0beräknas delaren utifrån den begärda frekvensen. Tillgängligt på RP2-porten.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Startar ljudinspelning.
callbackanropas från schemaläggaren med ett enda argumentpcmbufvarje gång en ny PCM-buffert är klar.pcmbufär enbytearraymed 16-bitars PCM-prover med tecken vars längd bestäms av decimeringsfaktorn, antalet kanaler och argumentetsamplessom skickas tillaudio.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 medaudio.get_buffer().
- audio.get_buffer(timeout: int = 0) bytearray¶
Returnerar nästa tillgängliga PCM-buffert. Blockerar tills en buffert är klar eller tills
timeoutmillisekunder har förflutit (0betyder vänta för evigt). UtlöserRuntimeErrorom strömning inte är aktiverad, om en buffertöverspillning har inträffat medanoverflowärTrue, 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.bufmåste vara enarray/bytearrayvars 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
Trueom en buffertöverspillning har inträffat sedan det senaste anropet tillaudio.start_streaming().Tillgängligt endast på RP2-porten.