МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход2

MIDI-синтезатор

Подключение MIDI к ПЛИС платы Марсоход2

MIDI-синтезатор реализованный на ПЛИСобладает минимальной задержкой от нажатия на клавишу и до начала звучания, это заметно, особенно по сравнению с софтовыми синтезаторами. Но главное, такое решение открывает широкое поле для музыкальных экспериментов, поскольку сочетает гибкость программного со скоростью, производительностью и реакцией аппаратного.


Дополнительное оборудование: миди-клавиатура, миди-кабель, динамик.

Использованные готовые модули: приёмник UART из проекта http://opencores.org/project,uart2bus (uart_rx.v, baud_gen.v)

Получение команд.
Миди-клавиатура сама по себе не создаёт звука, только воспринимает и передаёт команды, главным образом нажатия и отпускания клавиш. Моя клавиатура Axelvox key 49j посылает сообщения одновременно через usb-интерфейс на компьютер, и в миди-порт. Миди-порт по сути представляет собой uart, и я просто завожу его прямо на плату. Этого вообще-то делать нельзя, должна быть развязка оптопарой, (эх, сделали бы совместимость с papilio - можно было бы использовать это - http://papilio.gadgetfactory.net/index.php?n=Papilio.MIDIAudioWing ). Пока всё нормально работает, видимо, потому что и клавиатура и плата висят на usb одного компьютера.

Для расшифровки сигналов uart на ПЛИС я использовал готовый компонент с open cores. Если с уарта пришло три байта, и старший из них код нажатия или отпускания, то у нас готова команда для выполнения. Второй и третий байт дают номер клавиши и скорость нажатия. Подробнее можно почитать вот здесь: http://www.midi.org/techspecs/midimessages.php

Синтез звука.
Синтезатор имеет 4 голоса (задаётся параметром), при нажатии ищется первый свободный канал. Звуковые сигналы от каналов в конце просто суммируются. Генерация начинается с синусоиды, которую я взял целиком из проекта "апгрейд Подмосковных вечеров". Разрядность повышать не стал, вот будь бы ЦАП получше... Начинаем модулировать.

Генератор огибающей.
Начнём с того, что звук клавиши должен меняться со временем - сначала атака (https://ru.wikipedia.org/wiki/Атака (музыка)), затем удержание и затухание. Эта задача решается в модуле AttackModulate - исходный сигнал умножается на кусочно-линейную функцию.

Обертоны.
Далее, звук простой синусоиды не слишком интересный, поэтому во-первых, частота слегка модулируется пилой (FM-синтез, частотное вибрато). Чтобы обогатить звук гармоническими обертонами впринципе можно использовать тот же FM-синтез, но я отдельно сгенерировал три гармоники частоты 1/2, 1/4, 1/8 каждая со своей огибающей(каждый очередной обертон затухает быстрее), и сложил. Принцип построения позаимствован из справочника Л.А.Кузнецова "Акустика музыкальных инструментов", рис. 2.33.

После синтеза цифровой звук преобразуется в аналоговый сигнал методом ШИМ, хорошо бы его заменить на настоящий ЦАП. В итоге сигнал выводится на колонку.

Вспомогательные функции.
На плате ко входу АЦП присоединён переменный резистор, который позволяет динамически менять какой-нибудь параметр, или выбрать, какую часть отладочной переменной отобразить на имеющиеся на плате четыре светодиода.

Итог: синтезатор работает, звук ... не слишком впечатляет, зато скорость реакции заметно лучше чем у MS software midi-synth. Гибкость ПЛИС-решения позволяет менять любую часть решения, можно например, сделать инструмент в натуральном строе вместо равномерно-темперированного, а также реализовать свой алгоритм синтеза звука.

Проект Altera Quartus II для платы Марсоход2 можно взять в разделе "загрузки" или вот здесь: icon Подключение MIDI клавиатуры (16.33 Кбайт)

Обновление для проекта вот здесь: icon Миди синтезатор - исправленная версия (29.24 Кбайт)

 

Комментарии  

0 #11 leshabirukov 03.06.2014 18:53
Угу. То ли никто не качал, то ли сказать стеснялись.
0 #10 Ganaza 03.06.2014 18:36
А, в смысле что проект выложен 1,5 года назад... Туплю, извините.
0 #9 Ganaza 03.06.2014 18:30
Да я полтора года назад даже не знал об этом сайте...
Вы меня ни с кем не путаете?
0 #8 leshabirukov 03.06.2014 18:27
Вам спасибо. Где вы были полтора года?
0 #7 Ganaza 03.06.2014 18:25
По Вашей ссылке все есть. Огромное спасибо!
0 #6 leshabirukov 03.06.2014 18:13
Ох, фигня. Вот, попробуйте вот этот:
https://dl.dropboxusercontent.com/u/70098769/midi_synth_mars.qar
0 #5 Ganaza 03.06.2014 17:46
Да нету их там
0 #4 leshabirukov 03.06.2014 17:43
Исходные тексты на верилоге нашли?
midi_sound.sv - интерпретация midi-комманд
channels.sv - генерация звука
+1 #3 Ganaza 03.06.2014 16:31
Скачал архив с проектом. Что-то не нахожу в нем указанного функционала, больше похоже на пустой шаблон проекта. Я не там ищу?
0 #2 Алексей Бирюков 30.03.2014 10:42
Добавлю, что
4-ый пин midi подключается к DATA0
5-ый пин midi подключается к земле
на динамик идёт пара IO14, IO15
0 #1 Алексей Бирюков 04.12.2012 08:57
С видео не получается - не вебке микрофон еле слышный, а внешний система не видит почему-то. Но я ещё буду пытаться. Чтобы попробовать в другом месте - клавиатуру тащить надо. Чтобы отвязаться от клавиатуры по-идее надо создать на компе миди-потребител я, который будет команды отправлять в виртуальный ком, ведущий через usb на Марсоход, но такую загогулину я даже начинать боюсь.
Да, ещё принимаются советы по поводу более благозвучных FM-алгоритмов.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter