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-бітний 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.