audio — Moduł Audio

Moduł audio służy do nagrywania próbek dźwięku z mikrofonu. Próbki PDM przechwycone z mikrofonu są filtrowane i decymowane do próbek PCM, które mogą zostać przekazane do wywołania zwrotnego użytkownika lub odczytane bezpośrednio do bufora.

Funkcje

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

Inicjalizuje moduł audio. Musi zostać wywołana jako pierwsza przed użyciem modułu audio.

channels to liczba kanałów audio. Może wynosić 1 lub 2. Próbki audio są przeplatane, gdy używany jest więcej niż jeden kanał. Przechwytywanie wielokanałowe jest obsługiwane tylko na płytkach z więcej niż jednym mikrofonem.

frequency to częstotliwość próbkowania PCM w Hz. Zestaw obsługiwanych częstotliwości zależy od portu/płytki.

gain_db to wzmocnienie mikrofonu do zastosowania, w decybelach.

highpass to współczynnik filtra górnoprzepustowego (STM32) lub wartość logiczna włączająca filtr górnoprzepustowy (Alif). Ignorowany na portach, które nie implementują filtra górnoprzepustowego.

samples to liczba próbek PCM gromadzonych na jedno wywołanie zwrotne. Jeśli ustawiona na -1, wartość jest obliczana automatycznie na podstawie współczynnika decymacji i liczby kanałów. Musi być wielokrotnością 16. Dostępne na portach STM32 i Alif.

buffers to liczba wewnętrznych buforów PCM używanych do kolejkowania próbek pomiędzy DMA ISR a użytkownikiem. Dostępne na portach Alif i RP2.

overflow określa, czy przepełnienie bufora wywołuje RuntimeError. Gdy ustawione na False, najstarszy bufor jest nadpisywany i strumieniowanie jest kontynuowane. Dostępne na portach Alif i RP2.

clkdiv nadpisuje dzielnik zegara PIO używany do sterowania zegarem PDM. Gdy ustawione na 0, dzielnik jest obliczany na podstawie żądanej częstotliwości. Dostępne na porcie RP2.

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

Rozpoczyna przechwytywanie dźwięku.

callback jest wywoływane z harmonogramu z jednym argumentem pcmbuf za każdym razem, gdy nowy bufor PCM jest gotowy. pcmbuf to 16-bitowy ze znakiem bytearray próbek PCM, którego długość jest określana przez współczynnik decymacji, liczbę kanałów oraz argument samples przekazany do audio.init(). W trybie jednokanałowym każdy wpis jest jedną 16-bitową próbką; w trybie dwukanałowym próbki są przeplatane w pary.

Na portach obsługujących audio.get_buffer() (Alif i RP2) przekazanie wartości niewywoływalnej (np. None) rozpoczyna przechwytywanie bez wywołania zwrotnego, dzięki czemu bufory można opróżniać za pomocą audio.get_buffer().

audio.stop_streaming() None

Zatrzymuje przechwytywanie dźwięku i czyści wszelkie zainstalowane wywołania zwrotne.

audio.get_buffer(timeout: int = 0) bytearray

Zwraca następny dostępny bufor PCM. Blokuje, dopóki bufor nie będzie gotowy lub dopóki nie upłynie timeout milisekund (0 oznacza oczekiwanie w nieskończoność). Wywołuje RuntimeError, jeśli strumieniowanie nie jest włączone, jeśli wystąpiło przepełnienie bufora przy overflow ustawionym na True, lub jeśli zainstalowane jest wywołanie zwrotne strumieniowania.

Dostępne na portach Alif i RP2.

audio.read_pdm(buf: bytearray) None

Odczytuje surowe próbki PDM z mikrofonu bezpośrednio do buf. buf musi być obiektem array/bytearray, którego rozmiar elementu odpowiada liczbie kanałów (1 bajt dla mono, 2 bajty dla stereo).

Dostępne tylko na porcie STM32 (płytki oparte na SAI).

audio.samples() int

Zwraca całkowitą liczbę próbek PCM przechwyconych od ostatniego wywołania audio.start_streaming().

Dostępne tylko na porcie RP2.

audio.overflow() bool

Zwraca True, jeśli od ostatniego wywołania audio.start_streaming() wystąpiło przepełnienie bufora.

Dostępne tylko na porcie RP2.