• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

AMR аудио кодек. Возможно ли прикрутить?

p-a-h-a

Member
Здравствуйте, погуглив тему не смог найти нигде кодирование звука кроме как без сжатия wav.
Никто не пробовал разобраться с аудиокодеками для уменьшения объема данных?
Существует открытая библиотека на С# кодека AMR https://sourceforge.net/projects/opencore-amr/
Также нашел общее описание как ее запустить под windows https://www.codeproject.com/Articles/332109/AMR-Audio-Encoding
Древние мобильные телефоны, mp3 плееры обладали довольно слабыми процессорами и поддерживали AMR.
Отсюда вопрос: а возможно ли вообще на ESP8266 кодировать аудиопоток с микрофона (ADC) в формат со сжатием типа AMR или подобный?
Сам точно не осилю, но вдруг тема умных людей на идею AMR наведет.
 

p-a-h-a

Member
Вдруг кому интересно сжатие аудио, нашел кодек speex под stm32, не знаю на сколько легко его портировать.

Ссылки по теме https://m.habr.com/ru/post/346014/
 

vrd

Member
Телеграмм сможет принимать пакеты с частотой 4 мегагерца?
 

p-a-h-a

Member
Телеграмм сможет принимать пакеты с частотой 4 мегагерца?
Задумка немного другая: собираем звуковой файл в буфер на флеш память, предварительно сжав например speex кодеком на лету в контейнер ogg. Ну а дальше файл передать куда угодно можно. Выше ссылки приводил где ребята на stm32 кодировали сигнал с микрофона кодеком speex и по spi передали в esp8266, а тот уже передавал на сервер гугл для распознавания речи. Библиотека под stm32 тоже там есть, но в какую сторону копать для использования speex на esp32 не совсем понимаю. Нигде не видел примеров как звук сжать на esp своими силами. Только pcm формат все используют без сжатия.
 

vrd

Member
Задумка у меня простая. Берём esp, генератор по i2c, цифровой микрофон. Цифровой микрофон выдаёт уже готовый цифровой код, не требующий кодеков. От частоты внешнего генератора зависит качество звука. 1Мгц минимальное - 4Мгц максимальное.
Там можно даже сделать стерео, без усложнения схемы. Пакетов за один такт будет в 2 раза больше и всё.
Хватит ли esp-шке размера буфера для нормального создания продолжительной записи? Мне неизвестно.
По быстродействию будет лучше посылать поток даных по mqtt а приёмников можно сделать и 2 и 5. Один пишет в файл, по другому можно слушать онлайн. Готовые файлы можно пересылать куда угодно.
 

vrd

Member
На месте приёмника достаточно поставить ЦАП и слушать. Только выставит одинаковые частоты на генераторе i2c.
 

pvvx

Активный участник сообщества
Задумка у меня простая. Берём esp, генератор по i2c, цифровой микрофон. Цифровой микрофон выдаёт уже готовый цифровой код, не требующий кодеков. От частоты внешнего генератора зависит качество звука. 1Мгц минимальное - 4Мгц максимальное.
4МГц в формате PDM это всего 3.814 мбита в сек или 488 килобайт в сек.
WiFi у ESP8266 по TCP передает 800..1000 килобайт в сек, хотя-бы в web-свалке...
По быстродействию будет лучше посылать поток даных по mqtt а приёмников можно сделать и 2 и 5. Один пишет в файл, по другому можно слушать онлайн. Готовые файлы можно пересылать куда угодно.
Сервер с MQTT на типа RPi4 принимает всего несколько запросов в сек :p
Как понял вас совсем запутали.
 

pvvx

Активный участник сообщества
Обычный BT с PHY на 1 Мбит/c запросто передает звук без сжатия.
У WiFi скоростm модуляции канала (PHY) для одной антенны по устаревшим стандартам (те, что у ESP) - 20..74 Мбит.
 

vrd

Member
Обычный BT с PHY на 1 Мбит/c запросто передает звук без сжатия.
У WiFi скоростm модуляции канала (PHY) для одной антенны по устаревшим стандартам (те, что у ESP) - 20..74 Мбит.
Тогда лучше использовать esp32. Одно ядро пишет в память - второе передаёт куда надо готовые пакеты.
 

p-a-h-a

Member
Вот проект под ESP32. Кодирует файл с sd карты speex кодеком.
Фишка кодека - внятная речь сжимается до 8кбит/с. А это
16 минут в 1МБ памяти.
Осталось прикрутить в среду ардуино. Буду разбираться.
 

vrd

Member
Ещё как вариант, можно попробовать пир-ту-пир. Торенты доказали свою эффективность давно.
Только как прикрутить есп к торенту моих знаний недостаточно.
 

vrd

Member
Вот как вариант 8266 с 16 мегами памяти. Можно хороший кеш сделать.
 

p-a-h-a

Member
Мне нужно научится сжимать зауковую дорожку. Размер памяти при этом не имеет значение.
PCM не подходит.
Конкретно задача: записать во флеш wav файл с ПК и конвертировать его в ogg контейнер силами esp с сохранением во флеш памяти.
Поковырял speex кодек написанный под free rtos, портировать на С ардуино не выходит, знаний не хватает. Попытки не прекращаю. Попробую еще другие кодеки. Просто накидать необходимые файлы в папку скеча не вариант, компилятор ругается. Гугл мне в помощь.
 

vrd

Member
Когда читал про цифровые микрофоны - была найдена статья с испытаниями этих микрофонов. Там было написано - что был использован железный метод сжатия. Значит есть уже готовые микросхемы для сжатия цифрового звука.
Ушёл гуглить.
 

fifo654

New member
Мне нужно научится сжимать зауковую дорожку. Размер памяти при этом не имеет значение.
PCM не подходит.
Конкретно задача: записать во флеш wav файл с ПК и конвертировать его в ogg контейнер силами esp с сохранением во флеш памяти.
Поковырял speex кодек написанный под free rtos, портировать на С ардуино не выходит, знаний не хватает. Попытки не прекращаю. Попробую еще другие кодеки. Просто накидать необходимые файлы в папку скеча не вариант, компилятор ругается. Гугл мне в помощь.
Как успехи? Получилось перенести speex на esp'ху? Столкнулся с похожей ситуевиной. Нужно передавать речь с микрофона на сервак, а городить аппаратно уж слишком накладно. Просчитывал вариант STM32WB5MMG + STA013 - цена кусается очень.
 
Сверху Снизу