Очнь хочется сделать голосовой движёк для Армады.
Карма: 5
Зарегистрирован: Вт ноя 27, 2007 12:32:06
Сообщений: 1497
Откуда: Tashkent
Рейтинг сообщения: 0
Завёл речевой декодер SPEEX на отладочной плате STM32 VLDiscovery.
Он относится к категории CELP и обеспечивает хороший коэффициент сжатия (скорость потока 1-2 килобайта в сек).
За основу были взяты материалы:
1.Статья с Easyelectronics
http://we.easyelectronics.ru/STM32/vosp ... speex.html
2.AN2812 Vocoder demonstration using a Speex audio codec
on STM32F101xx and STM32F103xx microcontrollers -- порт узкополосного варианта(8КГц) на STM32.
3.AN0055 - Application Note. Speex Codec. Порт кодека под контроллеры EFM32 от Energy micro. К сожалению исходники комплектуются только скомпилированной либой и толку от них ноль целых хрен десятых. Зато есть утилита speexenc, конвертирующая звуковые WAV-чики в h-файлы. Которые потом легко цепляются компилятором.
4.
http://www.speex.org - домашняя страница кодека с документацией.
Исходники были допилены для поддержки узкополосного(NarrowBand 8КГц) и широкополосного(WideBand 16KHz) режимов.
Оптимизированы по скорости загрузки буферов через DMA.
По Flash памяти декодер занимает около 30КБ, RAM - около 5КБ(надо настроить такую большую кучу т.к. идёт динамическое выделение памяти). Для работы судя по описаниям требует минимум 8МГц(низкая тактовая мной не проверялась).
Ограничения или недостатки:
-только декодер(для уменьшения размера кодер вырезан);
-в узкополосном режиме минимальная скорость потока 8 килобит(Quality=4);
-только постоянный битрейт(CBR);
-арифметика с фиксированной точкой. И как я понял процедура умножения сигналов вносит некоторую ошибку. Это проявляется в небольшом звоне голоса. В широкополосном режиме звон почти не заметен.В любом случае простой ФНЧ на выходе ЦАП поможет улучшить звук.
Применение.
Планируется использовать в моём синтезаторе.
Также может быть интересен в простых конструкциях вроде говорящих часов как одночиповое решение.
Исходники.
Проект под KEIL MDK470.
В файле 'main.h' выбрать частоту дискретизации(8/16K) и размер кодированного кадра ENCODED_FRAME_SIZE, соответсвующие
параметрам выбранного звука.
В файле 'main.c' функция play_message() воспроизводит звук.
В проект включены варианты одного сообщения с разным уровнем сжатия.
Звук снимается с выхода ЦАП PA4. Через кондёр можно подключить высокоомный динамик или наушники.
Есть идейка использовать оба выхода ЦАП в противофазном режиме для увеличения мощности, это чтобы отказаться от УНЧ.
Проект доступен по ссылке:
http://yadi.sk/d/Js5nb6jLAHd3x