audio — Audio-moduuli

audio-moduulilla tallennetaan äänen näytteitä mikrofonista. Mikrofonista kaapatut PDM-näytteet suodatetaan ja desimoidaan PCM-näytteiksi, jotka voidaan välittää käyttäjän takaisinkutsulle tai lukea suoraan puskuriin.

Funktiot

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

Alustaa audio-moduulin. Tämä on kutsuttava ensin ennen audio-moduulin käyttöä.

channels on äänikanavien lukumäärä. Voi olla 1 tai 2. Äänen näytteet lomitellaan, kun käytetään useampaa kuin yhtä kanavaa. Monikanavainen kaappaus on tuettu vain korteilla, joissa on useampi kuin yksi mikrofoni.

frequency on PCM-näytteenottotaajuus hertseinä. Tuettujen taajuuksien joukko on portti-/korttikohtainen.

gain_db on mikrofoniin sovellettava vahvistus desibeleinä.

highpass on ylipäästösuodattimen kerroin (STM32) tai ylipäästösuodattimen käyttöön ottava totuusarvo (Alif). Jätetään huomiotta porteilla, jotka eivät toteuta ylipäästösuodatinta.

samples on kutakin takaisinkutsua varten kerättävien PCM-näytteiden lukumäärä. Jos arvoksi asetetaan -1, arvo lasketaan automaattisesti desimointikertoimesta ja kanavien lukumäärästä. Sen on oltava 16:n monikerta. Saatavilla STM32- ja Alif-porteilla.

buffers on sisäisten PCM-puskureiden lukumäärä, joita käytetään näytteiden jonottamiseen DMA:n ISR:n ja käyttäjän välillä. Saatavilla Alif- ja RP2-porteilla.

overflow määrää, nostaako puskurin ylivuoto RuntimeError-virheen. Kun arvo on False, vanhin puskuri kirjoitetaan päälle ja virtaus jatkuu. Saatavilla Alif- ja RP2-porteilla.

clkdiv ohittaa PIO-kellojakajan, jota käytetään PDM-kellon ohjaamiseen. Kun arvo on 0, jakaja lasketaan pyydetystä taajuudesta. Saatavilla RP2-portilla.

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

Käynnistää äänen kaappauksen.

callback kutsutaan ajastimelta yhdellä argumentilla pcmbuf aina, kun uusi PCM-puskuri on valmis. pcmbuf on etumerkillinen 16-bittinen PCM-näytteiden bytearray, jonka pituuden määräävät desimointikerroin, kanavien lukumäärä ja audio.init()-funktiolle välitetty samples-argumentti. Yksikanavaisessa tilassa kukin alkio on yksi 16-bittinen näyte; kaksikanavaisessa tilassa näytteet lomitellaan pareittain.

Porteilla, jotka tukevat audio.get_buffer()-funktiota (Alif ja RP2), ei-kutsuttavan arvon (esim. None) välittäminen käynnistää kaappauksen ilman takaisinkutsua, jolloin puskurit voidaan tyhjentää audio.get_buffer()-funktiolla sen sijaan.

audio.stop_streaming() None

Pysäyttää äänen kaappauksen ja poistaa kaikki asennetut takaisinkutsut.

audio.get_buffer(timeout: int = 0) bytearray

Palauttaa seuraavan saatavilla olevan PCM-puskurin. Estää suorituksen, kunnes puskuri on valmis tai kunnes timeout millisekuntia on kulunut (0 tarkoittaa odottamista ikuisesti). Nostaa RuntimeError-virheen, jos virtausta ei ole otettu käyttöön, jos puskurin ylivuoto on tapahtunut overflow-arvon ollessa True, tai jos virtauksen takaisinkutsu on asennettu.

Saatavilla Alif- ja RP2-porteilla.

audio.read_pdm(buf: bytearray) None

Lukee raakoja PDM-näytteitä mikrofonista suoraan buf-puskuriin. buf-puskurin on oltava array/bytearray, jonka alkion koko vastaa kanavien lukumäärää (1 tavu monolle, 2 tavua stereolle).

Saatavilla vain STM32-portilla (SAI-pohjaiset kortit).

audio.samples() int

Palauttaa viimeisimmän audio.start_streaming()-kutsun jälkeen kaapattujen PCM-näytteiden kokonaismäärän.

Saatavilla vain RP2-portilla.

audio.overflow() bool

Palauttaa True, jos puskurin ylivuoto on tapahtunut viimeisimmän audio.start_streaming()-kutsun jälkeen.

Saatavilla vain RP2-portilla.