Обновить

Проигрыватель WAV файлов на STM32

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели11K
Всего голосов 23: ↑23 и ↓0+33
Комментарии28

Комментарии 28

Вы делали воспроизведение звука на микроконтроллере?

а бипер считается? На zx spectrum :)

Я не застал торжество zx spectrum.
Даже не знаю какая там была аппаратная начинка.
Есть ли блок-схема zx spectrum?

1 bit ЦАП, никаких таймеров и 3.5МГЦ ЦПУ причем команды далеко не за 1-2 такта. Однакож и семплы выводили, и чето синетезировали.

Сам я правда только из BASIC че то напискивал, да на контроллерах - не особо более. но есть тут у нас всемирно признанные авторитеты в этой области

Кто в теме - расскажите, а как в мире цифрового аудио борются с несовпадением частот приемника и передатчика? Используют тактовый сигнал из самого I2S для ЦАПа или манипулируют с отсчетами?

 как в мире цифрового аудио борются с несовпадением частот приемника и передатчика? 

Не совсем понята постановка задачи.
Есть ли возможность добавить подробностей?

Ну, например, телевизор выдает цифровой сигнал по I2S на ресивер с частотой дискретизации 48001Гц (частота шины в 32 раза больше). Далее нужно этот клок нужно чистить и заводить на ЦАП ресивера. Либо использовать внутренний клок, но его частота будет, скажем 47999Гц (цифры условные, наверное там точнее генератор). Тогда часть отсчетов будет выпадать и с этим нужно что-то делать.

На самом деле я уже глянул и увидел ключевые слова Word clock, Master reference clock, High-end 10Mhz и т.п. Так что, видимо, первый вариант.

всё верно - Master clock

По разному. Можно ресемплингом, можно подстройкой частоты мастерклока vcxo.

Зачем Вам внешний кодек для WAV плеера, если в микроконтроллере и так уже есть ЦАП? Вряд ли Вы делаете это для какого-то Hi-End воспроизведения, а для звука, встроенного в какое-то устройство, вполне хватит. WM8731, конечно, и в MP3 умеет, но в статье про это не упоминается.

WM8731, конечно, и в MP3 умеет, но в статье про это не упоминается.

Внутри ASIC WM8731 отсутствует MP3 декодер/энкодер.

https://habr.com/ru/articles/703588/

А что, ШИМа у него тоже нет? ))) Если есть - то это и есть DAC. А ШИМ можно еще и через DMA делать, а можно и вообще прерыванием и битбангом, если нет аппартаного.

Недоумеваю - я (и куча других людей) делали воспроизведление WAV ATTINY85, которая 8-битная с 16MHz, и да, она одновременно еще и успевала читать это с SD, а не просто играть, при этом вполне себе на 44kHz.

А тут 32-битный проц с частотой космолета - и для него использовали отдельную микруху....

да, она одновременно еще и успевала читать это с SD, а не просто играть, при этом вполне себе на 44kHz.

Мне нужна частота дискретизации 96kHz.

Дак при такой системной частоте разве это не получится? 44kHz было лишь примером что может слабый проц.

на AVR можно программировать буквально по тактам, в прерывании можно не сохранять регистры, на STM32 этих вольностей нет.

У STM32F407 есть двухканальный 12бит DAC, для сигналов, сообщений за глаза, для музыки мало.

А почему в stm32 вдруг стало нельзя по тактам программировать?

Если вы про HAL, то вроде никто не заставляет его использовать.

У меня есть проект на stm32 (не такой как в статье, но все же) в котором именно по тактам один кусок работает без каких-либо проблем, да, во внимание нужно больше принимать, так как проц куда навороченней, но это не проблема.

А тут 32-битный проц с частотой космолета - и для него использовали отдельную микруху....

В планах на этом железе сделать полно дуплексную перекачку звука.
Воспроизводить WAV и записывать WAV одновременно.


Как тут
Запуск I2S Трансивера на Artery [часть 2] (DMA, FSM, PipeLine)
https://habr.com/ru/articles/834304/

Пардоньте, был не прав насчёт MP3. Смутило, что в даташите в нескольких местах MP3 плеер упоминается как типичное применение. Но, как я писал, если Вы используете эту микруху, чтобы условно часы или игрушку электронную озвучить, это из пушки по воробьям, т.к. сам микроконтроллер ЦАП имеет

т.к. сам микроконтроллер ЦАП имеет

У аудиокодека выше динамический диапазон.
24 бит на WM8731 против 12 DAC бит.

Зачем Вам внешний кодек для WAV плеера, если в микроконтроллере и так уже есть ЦАП?

Благодаря аудиокодеку появляется ещё и парочка ADC для записи звука + аппаратная DSP обработка.

Там нет никаких технических подробностей.
Отсутствует бинарь с прошивкой.
Нет сорцов.

В устройстве на Tiny85 нет UART-shell для выбора wav файла, который надо проигрывать.

Одноразовое устройство.

Да, железка сильно упрощённая. Для кнопки переключения файлов, и то с трудом место нашлось.

Спасибо за статью, мне как раз эта тема интерсна. Статью в целом понял, но в деталях практически ничего не понял, может быть потом осенит. После чтения возник один вопрос — вы какое-то конкретное устройство планируете или просто прототипируете новые технологии? Просто интересно, т.к. конкретно мне интересен звук на микроконтроллерах был, потому что можно сделать устройства по типу умных колонок, роботов, медиа плееров или еще что-то.

После чтения возник один вопрос — вы какое-то конкретное устройство планируете или просто прототипируете новые технологии? 

Да. Я хочу сделать сонар с синтезированной апертурой
шаг 1) Научиться воспроизводить звук
шаг 2) Научиться записывать звук
шаг 3) Научиться воспроизводить и одновременно записывать звук
шаг 4) Отправлять зондирующие ЛЧМ импульсы и записывать эхо.
шаг 5) Вычислять свертку принятого ЛЧМ и получать графики корреляции (дальномер)
шар 6) Измерить N свёрток в известных местах вдоль прямой с шагом 0,2...3 метра
шаг 7) Далее загрузить графики свёрток на PC и построить карту окружающих предметов на основе интерференции свёрток (синтез апертуры)
Только и всего.

Спасибо за статью, мне как раз эта тема интерсна. 

Пожалуйста.

Вот оно как, теперь многое стало понятным, буду следить дальше за вашими статьями, если продолжите это все описывать

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации