В Интернете можно найти множество примеров того, как воспроизвести музыку микроконтроллером, основанных на схемах с ШИМ. Но качество звука ШИМ оставляет желать лучшего, поэтому появилась идея использовать в качестве источника звука старую ISA звуковую карту Sound Blaster 16!
Когда начиналась работа над данным проектом, в интернете не нашлось примеров того, как управлять звуковой картой с помощью микроконтроллера. С момента создания первого проекта многое изменилось, и теперь стали использоваться DMA и 16-битные значения при работе на максимальной частоте дискретизации. В качестве источника аудио данных используется SD карта памяти, поддержка которой реализована в библиотеке FatFs. Для предотвращения «затыкания» звука при считывании данных с карты, воспроизведение осуществляется из 2-х буферов.
В качестве управляющего микроконтроллера используется ARM микроконтроллер STM32F103RBT6 в LQFP64 корпусе, с 128кБ flash памяти, 20кБ RAM, работающий на частоте 72МГц. Микроконтроллер установлен на покупной отладочной плате Mini STM32 V3.0, все соединения со звуковой картой выполнены проводом.
Схема:
Для упрощения на схеме опущены очевидные вещи, например, конденсаторы и подтягивающие резисторы. Как вы можете видеть — осталось лишь четыре свободных вывода, не считая выводов от JTAG интерфейса. Порты PA9 и PA10 предполагалось использовать для подключения к UART, а порт PB0 как вход для кнопки.
Программа поочередно считывает файлы в формате wav с карты памяти, и воспроизводит их в том же порядке, как они сохранены в файловой системе.
Файлы первого проекта:
MINI_STM32-V3.0_SCH.pdf – схема отладочной платы MINI STM32-V3.0
WAV_SB16_Good.zip – Исходный код в GCC программы на STM32 для управления звуковой картой SoundBlaster 16
В качестве продолжения проекта была выбрана звуковая карта Creative Sound Blaster AWE64 с усовершенствованными функциями, такими как цифровой выход и более высокая частота дискретизации. Первая звуковая карта была настроена при помощи переключателя. В новой карте настройки могут быть установлены с помощью программного обеспечения. Для возможности программной настройки карты, потребовалось написать функции настройки PnP. Для более полного использования возможностей карты AWE64 используются функции волнового синтеза звуковым процессором EMU8000 (EMU8K).
Для нужд синтеза звука на SoundBlaster AWE64 Gold установлена память объемом 4 МБ, в которой хранятся загружаемые сэмплы SoundFont. Технология SoundFont позволяет плате работать не лишь с заранее прошитыми в ROM инструментами, но и с новыми, загружаемыми в RAM. При необходимости память наращивается до 24 мегабайт.
При записи и воспроизведении цифрового звука Creative SoundBlaster AWE64 Gold обеспечивает характеристики на уровне бытовой Hi-Fi аппаратуры. Полоса частот — от 15 Гц до 55 кГц (+/- 1 дБ) при уровне гармонических искажений не выше 0.005%. Соотношение сигнала и шума не хуже 90 дБ, динамический диапазон при использовании для подключения внешнего высококачественного усилителя цифрового выхода S/PDIF составляет 120 дБ.
Управляющий микроконтроллер также был выбран более мощным, в его роли выступила отладочная плата STM32F4Discovery с установленным на ней MCU STM32F407VG. Микроконтроллер имеет 1МБ Flash памяти, 192кБ RAM памяти, 2xUSB и работает на частоте до 168МГц.
Сначала микроконтроллер производит инициализацию звуковой карты, устанавливает настройки по умолчанию, извлекает с карты памяти из файла SoundFont информацию об семплах (саундфонтах) и загружает их в DRAM звуковой карты. Затем основной цикл программы получает MIDI данные через USB или UART порт и передает эти данные соответствующим функциям управления звуком. Кроме того, через USB можно управлять микшером, изменить тип реверберации и хоруса или изменять параметры программы. Для более удобного управления звуковой картой с ПК, была написана небольшая программа на Qt. Устройство также может работать независимо от ПК, для этого имеется возможность подключения к другому устройству через UART.
Представленный проект по своей сути не является проектом законченного устройства, а является заготовкой для создания на его основе других более серьезных устройств, например музыкантам, для создания музыкальных инструментов, секвенсоров и т.п. Возможность загрузки соундфонтов позволяет подобрать требуемое звучание MIDI инструментов, а наличие звукового процессора, в отличие от ЦАП, позволяет производить аппаратное управление звуком, регулировку уровня громкости и прочее. Помимо этого звуковая карта уже содержит в себе все необходимые усилители, что позволяет напрямую подключать как усилители мощности, так и, например наушники, а также может использоваться в качестве АЦП, для подключения внешних аналоговых источников звука.
В представленном проекте в качестве источника аудио данных выступают wav и midi файлы, записанные на SD карте памяти, но мощностей используемого управляющего процессора вполне достаточно и для воспроизведения mp3 файлов. Для возможности их воспроизведения потребуется подключить соответствующую библиотеку для декодировки mp3 файла в wav поток данных, с дальнейшей передачей на звуковую карту с использованием имеющихся функций.
SynthControl-master.zip – Исходный код на Qt управляющей программы для ПК
emu8000_synth_usb.zip – Исходный код в GCC программы на STM32 для управления звуковой картой SoundBlaster AWE64 и соундфонт файл 4GMGS.
TestSounds.zip – Образцы воспроизведения midi файлов и исходные midi файлы. Воспроизведение midi файлов производилось с использованием соундфонтов SYNTHGS, 4GMGSMT, AWE32 и YMF724.
При написании статьи использовались материалы с сайта http://www.elektroda.pl
Скачать полный архив проекта с исходными кодами, и образцами воспроизводимых midi файлов.
Прикрепленные файлы:
- MINI_STM32-V3_0_SCH(1).pdf (68 Кб)
- emu8000_synth_usb-master.zip (4031 Кб)
- SynthControl-master.zip (9 Кб)