Библиотека PCMFlow722 обеспечивает двустороннюю HD-голосовую связь в реальном времени через ESP-NOW с использованием аудиокодека G.722

Библиотека PCMFlow722 Танаки Масаюки позволяет реализовать (полудуплексную) двустороннюю HD-голосовую связь в реальном времени через ESP-NOW на платах ESP32 с динамиком и микрофоном, фактически превращая их в рации.

Библиотека реализует дополнительный широкополосный кодек G.722 для PCMFlow — легковесной библиотеки декодирования аудио и потока PCM для Arduino, которая уже поддерживает несжатый PCM, MP3 и FLAC. PCM и FLAC требуют слишком большой пропускной способности через ESP-NOW, а MP3 не подходит для аудио в реальном времени, поэтому был выбран устаревший кодек G.722.

ESP-NOW two-way HD audio communication

Ключевое слово здесь — «HD-голос», поскольку двусторонняя аудиосвязь через ESP-NOW уже была реализована в таких проектах, как Atomic14’s esp32-walkie-talkie (5 лет назад) и более недавний хорошо документированный проект Adafruit ESP-NOW Walkie-Talkie project , но они обычно используют аудио более низкого качества G.711 или сжатое аудио.

Библиотека PCMFlowG722 и кодек G.722 обеспечивают HD-голос с «аудио 7 кГц при дискретизации 16 кГц, используя ту же пропускную способность 64 кбит/с, что и G.711 — те же размеры пакетов, но вдвое большую полосу пропускания аудио», как поясняет Танака. В таблице ниже сравниваются кодеки и библиотеки G.711, G.722 и Opus.

PCMFlowG711 PCMFlowG722 (this lib) PCMFlowOpus
Audio band narrowband (8 kHz / ≤ 3.4 kHz) wideband (16 kHz / ≤ 7 kHz) narrow / wide / fullband (8–48 kHz)
Bitrate (voice) 64 kbps fixed 64 kbps fixed (Mode 1) 16–32 kbps typical
Compression vs raw 16-bit PCM 10–15×
Codec flash footprint < 4 KB ~10 KB ~150–180 KB
Codec CPU negligible low non-trivial on M0/M3-class MCUs
Patent / license complexity none (1972 standard, expired) none (1988 standard, expired); core is Public Domain royalty-free patent grant, BSD-3-Clause source
Quality toll-grade telephony HD voice (wideband telephony) wideband / fullband, far better

Opus предлагает более низкую пропускную способность и полный диапазон аудио, но кодек G.722 менее сложен и требует меньше ресурсов (ЦП, памяти). Он также хорошо подходит для ESP-NOW, так как протокол передает полезные данные до 250 байт, а 20-мс голосовой кадр G.722 при 16 кГц дает 160 байт — столько же, сколько G.711, но с удвоенной полосой аудио, в то время как сырой 16-битный PCM 16 кГц в моно потребовал бы 640 байт (G.722 сжимает в 4 раза).

EspNowTransceiver

Библиотека реализует кодер G.722, сжимающий PCM 16 кГц в G.722, и декодер, выполняющий обратное преобразование. Если вы хотите попробовать это на своей плате, вам, вероятно, пригодится скетч Arduino EspNowTransceiver.ino Arduino sketch . Это полудуплексный приемопередатчик HD-голоса через ESP-NOW, и одна и та же прошивка работает как в режиме передатчика, так и приемника.

Она протестирована на платах M5Stack Core2 с SoC ESP32, 8 МБ PSRAM, 16 МБ SPI Flash, небольшим 2-дюймовым дисплеем, отображающим канал ESP-NOW, динамиком 1 Вт (1W-0928) и микрофоном SPM4123. Пока удерживается кнопка A, аудио передается через ESP-NOW на одно или несколько устройств Core2; во всех остальных случаях устройства работают как приемники аудио.

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments