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

Музыка воодушевляет весь мир, снабжает душу крыльями, способствует полету воображения. Платон.

Несколько лет назад, для развития музыкальных наклонностей в моей семье, я приобрел MIDI-клавиатуру. Это был компромиссный выбор основанный на детальном сравнении различных видов электронных клавишных инструментов. Первым важным плюсом моего выбора было то, что MIDI-клавиатура намного дешевле полного синтезатора. ? второй, самый «жирный» плюс — при подключении ее к запущенному на ПК программному синтезатору можно получить весь спектр звуков и эффектов как и у дорогих аппаратных синтезаторов. Найти в Сети пакеты виртуальных музыкальных инструментов совсем не проблема. Некоторые из них звучат очень классно, особенно меня впечатлили классические инструменты Edirol Super Quartet. Существенным минусом тандема «клавиатура-ПК» оказался длительный запуск и настройка программного обеспечения для начала музицирования. Я с этим мирился, но для моего ребенка это была серьезная проблема. Ему нужно было что-то простое, типа «включил и играй», пусть и не супер звучащее. Пока я не начал заниматься микроконтроллерами эта проблема висела в воздухе.

В один прекрасный день я решил, что может стоит замутить на AVR дешевый MIDI-синтезатор. Подобный проект был очень интересен мне как эмбеддеру. Поиски информации о принципах генерации сложных звуков на AVR контроллерах привели к выводу, что это очень, очень, … очень не тривиальная тема. В найденных мной примерах разработки MIDI-синтезаторов количество тембров и многоголосие были весьма ограничены. Это меня совсем не устроило, к тому же я не хотел завязнуть в собственных изысканиях по синтезу звуков. Продолжив поиск далее, я нашел ссылку на замечательный чип от VLSI Solution — VS1053B. Его официальная спецификация — OggVorbis/MP3/AAC/WMA/FLAC/MIDI Audio Codec. Вот даташит на это чудо. Согласно даташиту на борту у этого чипа присутствует MIDI-синтезатор с двумя банками инструментов и эффектом реверберации. Сам чип обошелся бы мне в 143 грн. По сравнению со стоимостью самого дешевого готового промышленного MIDI-синтезатора это сущие копейки. Чтобы не возится с платой под корпус LQFP48, я решил купить уже готовый модуль от SparkFun для Ардуины на базе VS1053B, который у них называется — Music Instrument Shield. Вот на него ссылка. Модуль потянул на 260 грн., что вполне вписывалось в бюджетное решение. Спаяв на макетке цепь опторазвязки входа MIDI, я смог запустить модуль, подключить клавиши и послушать звучание синтезатора на чипе VS1053. Качество конечно не такое как у Super Quartet, но вполне приемлемое, и к тому же 128 инструментов только в первом банке инструментов (их список есть в даташите) — это замечательно. Это было именно то, что я искал. Возможно на этом можно было бы и остановиться, но а где тут AVR? Где же наш дорогой и любимый эмбеддинг? Все далее….

Моя MIDI-клавиатура M-Audio Keystation 61, как очень дешевое изделие, сильно урезана функционально. На ней есть всего две кнопки выбора функций, которых не достаточно для быстрого и удобного управления инструментом. По-умолчанию после включения питания, эти кнопки позволяют смещаться вверх или вниз на одну октаву. Чтобы переназначить управление другими функциями, надо совершить очень хитрые комбинации нажатий кнопок и клавиш, которые запомнить сложно. Поэтому я решил к MIDI-модулю добавить микроконтроллерное управление, которое бы оживило недоступные с клавиатуры функции.

?нтерфейс MIDI по сути оказался простым UART работающим на скорости 31250 бод, 8 бит данных, 1 стоп-бит и без контроля четности. Поэтому добавить AVR-посредника между клавишами и MIDI-модулем была не проблема. Этот контроллер должен был транслировать через себя MIDI-команды полученные с клавиатуры и вставлять необходимые команды управления. Так родилась концепция моего синтезатора. Детальная проработка позволила разделить устройство на три блока: питание, MIDI-Audio и управление.

Первый блок — блок питания.  Ничего революционного в нем нет. Схема классическая. Трансформатор 20 ватт, на выходе выпрямителя получаем 9 вольт, которые отдельным шнуром выводятся для питания MIDI-клавиатуры (т.е. мой синтезатор выступает еще и блоком питания для клавиш). После выпрямителя идет стабилизатор на LM7805 (КРЕН05), который выдает питание 5 вольт на все цифровые и аналоговые цепи. Тут все просто.

Второй блок — блок MIDI-Audio. Блок имеет цифровую и аналоговую части. На плате четко видно разделение цифровой и аналоговой земли. MIDI-модуль подключается сверху в разъемы на плате блока (прям как к Ардуине). На цифровой части находятся разъем MIDI, опторазвязка преобразователя MIDI-TTL и контроллер-посредник ATtiny2313. Контроллер транслирует через себя данные со входа Rx на выход Tx, это канал от клавиш к синтезатору VS1053. Команды управления контроллер получает от блока управления асинхронно параллельным кодом (это для скорости) на порт В. Блок управления сигнализирует контроллеру о готовности передачи байта сигналом внешнего прерывания. По окончании приема всех байтов MIDI-команды контроллер сразу выталкивает их на выход Tx, т.е. в синтезатор. На этом пока все обязанности контроллера-посредника заканчиваются. Работает контроллер только на прерываниях. На аналоговой части блока расположено два стерео усилителя: первый — линейный, второй — для наушников. Линейный усилитель усиливает слабый сигнал с аудио-выхода MIDI-модуля и выводит его на разъемы линейного выхода (разъемы типа тюльпан). На усилитель для наушников сигнал линейного выхода попадает через сдвоенный потенциометр регулятора громкости. Выход усилителя наушников оформлен в виде разъема под пальчиковый штекер. В этом блоке тоже все достаточно просто, без нюансов.

Третий блок — блок управления. Основа блока контроллер ATmega16. Порт С этого контроллера используется для передачи команд управления в блок MIDI-Audio. К этому же порту также подключен LCD на 2 строки по 16 символов (в моем случае это WH1602С). На LCD выводится номер и название (по даташиту VS1053) текущего инструмента. Все выводы порта A контроллера используются как входы АЦП. На текущий момент задействованы только 2 входа. К ним подключены потенциометры, с помощью которых задается уровень реверберации и время задержки реверберации. Остальные шесть входов пока заглушены и возможно будут использованы для будущих функций. На плате блока имеется преобразователь уровней RS232-TTL — чип MAX232N, для обеспечения подключения синтезатора к СОМ-порту компьютера. Это задел для будущих функций. Есть у меня мысли о загрузке с ПК небольших музыкальных семплов в память контроллера для подыгрывания исполнителю на втором MIDI-канале. Порт B используется для работы с матричной клавиатурой и светодиодами. Половина выводов этого порта подключена к двоично-десятичному дешифратору 74HC154N (аналог К155?Д3), который позволяет организовать до 16 вертикалей для матрицы клавиатуры (хотя я использовал всего 7). Эти выводы также управляют сдвиговым регистром 74HC595, который на прикрепленной к передней панели платке может зажигать до 8 светодиодов (запаяно 3, используется пока 1).

Клавиатура выполнена на отдельной плате, которая прикреплена к передней панели корпуса. Кнопки разделены на две группы: 8 кнопок управления и 20 кнопок для быстрого выбора инструментов. Текущая версия прошивки контроллера блока управления позволяет кнопками управления выбрать один из 128 инструментов и привязать его к любой из кнопок быстрого выбора. Данная привязка сохраняется в энергонезависимой памяти и сохраняется с выключением питания. Также сохраняется и последний выбранный инструмент, который автоматически выбирается сразу после включения устройства.

На этом я пока завершу рассказ о моем синтезаторе. Данный проект обязательно будет развиваться далее, впрочем как и эта статья. По мере появления доработок и интереса к моему устройству, я буду сюда дописывать.

Ссылка на архив с разводками плат и исходниками прошивок на IAR. 

Ссылка на схемы

Запись опубликована в рубрике Разное с метками , , . Добавьте в закладки постоянную ссылку.

47 комментариев на «MIDI-синтезатор.»

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

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.