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.