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¶
Ініціалізує аудіомодуль. Має бути викликано першим, перш ніж використовувати аудіомодуль.
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-бітнийbytearrayPCM-зразків, довжина якого визначається коефіцієнтом децимації, кількістю каналів та аргументом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.