audio — Модуль Audio#

Модуль audio используется для записи аудиосэмплов с микрофона. Сэмплы PDM, захваченные с микрофона, фильтруются и прореживаются до сэмплов PCM, которые могут передаваться в пользовательскую функцию обратного вызова или считываться напрямую в буфер.

Функции#

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#

Инициализирует модуль audio. Должна вызываться первой перед использованием модуля audio.

channels — количество аудиоканалов. Может быть 1 или 2. При использовании более одного канала аудиосэмплы чередуются. Многоканальный захват поддерживается только на платах с более чем одним микрофоном.

frequency — частота сэмплирования PCM в Гц. Набор поддерживаемых частот зависит от порта и платы.

gain_db — применяемое усиление микрофона в децибелах.

highpass — коэффициент фильтра верхних частот (STM32) или булево значение, включающее фильтр верхних частот (Alif). Игнорируется на портах, которые не реализуют фильтр верхних частот.

samples — количество сэмплов PCM, накапливаемых за один вызов функции обратного вызова. Если задано значение -1, оно вычисляется автоматически из коэффициента прореживания и количества каналов. Должно быть кратно 16. Доступно на портах STM32 и Alif.

buffers — количество внутренних буферов PCM, используемых для постановки сэмплов в очередь между DMA ISR и пользователем. Доступно на портах Alif и RP2.

overflow управляет тем, вызывает ли переполнение буфера исключение RuntimeError. При значении False самый старый буфер перезаписывается, и потоковая передача продолжается. Доступно на портах Alif и RP2.

clkdiv переопределяет делитель тактовой частоты PIO, используемый для управления тактовым сигналом PDM. При значении 0 делитель вычисляется из запрошенной частоты. Доступно на порте RP2.

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

Запускает захват аудио.

callback вызывается планировщиком с единственным аргументом pcmbuf каждый раз, когда готов новый буфер PCM. pcmbuf — это знаковый 16-битный bytearray сэмплов PCM, длина которого определяется коэффициентом прореживания, количеством каналов и аргументом samples, переданным в audio.init(). В одноканальном режиме каждый элемент представляет собой один 16-битный сэмпл; в двухканальном режиме сэмплы чередуются парами.

На портах, поддерживающих audio.get_buffer() (Alif и RP2), передача невызываемого значения (например, None) запускает захват без функции обратного вызова, чтобы вместо этого буферы можно было опустошать с помощью audio.get_buffer().

audio.stop_streaming() None#

Останавливает захват аудио и очищает любую установленную функцию обратного вызова.

audio.get_buffer(timeout: int = 0) bytearray#

Возвращает следующий доступный буфер PCM. Блокируется до тех пор, пока буфер не будет готов или пока не истечёт timeout миллисекунд (0 означает ожидание без ограничения времени). Вызывает RuntimeError, если потоковая передача не включена, если произошло переполнение буфера при overflow равном True, или если установлена функция обратного вызова потоковой передачи.

Доступно на портах Alif и RP2.

audio.read_pdm(buf: bytearray) None#

Считывает необработанные сэмплы PDM с микрофона напрямую в buf. buf должен быть объектом array/bytearray, размер элемента которого соответствует количеству каналов (1 байт для моно, 2 байта для стерео).

Доступно только на порте STM32 (платы на базе SAI).

audio.samples() int#

Возвращает общее количество сэмплов PCM, захваченных с момента последнего вызова audio.start_streaming().

Доступно только на порте RP2.

audio.overflow() bool#

Возвращает True, если переполнение буфера произошло с момента последнего вызова audio.start_streaming().

Доступно только на порте RP2.