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.
channelsto liczba kanałów audio. Może wynosić1lub2. 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.frequencyto częstotliwość próbkowania PCM w Hz. Zestaw obsługiwanych częstotliwości zależy od portu/płytki.gain_dbto wzmocnienie mikrofonu do zastosowania, w decybelach.highpassto 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.samplesto 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.buffersto 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.overflowokreśla, czy przepełnienie bufora wywołujeRuntimeError. Gdy ustawione naFalse, najstarszy bufor jest nadpisywany i strumieniowanie jest kontynuowane. Dostępne na portach Alif i RP2.clkdivnadpisuje dzielnik zegara PIO używany do sterowania zegarem PDM. Gdy ustawione na0, 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.
callbackjest wywoływane z harmonogramu z jednym argumentempcmbufza każdym razem, gdy nowy bufor PCM jest gotowy.pcmbufto 16-bitowy ze znakiembytearraypróbek PCM, którego długość jest określana przez współczynnik decymacji, liczbę kanałów oraz argumentsamplesprzekazany doaudio.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
timeoutmilisekund (0oznacza oczekiwanie w nieskończoność). WywołujeRuntimeError, jeśli strumieniowanie nie jest włączone, jeśli wystąpiło przepełnienie bufora przyoverflowustawionym naTrue, 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.bufmusi być obiektemarray/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łaniaaudio.start_streaming()wystąpiło przepełnienie bufora.Dostępne tylko na porcie RP2.