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.