вер. 260823

- О чём это?
- Стандарт
- DB-15F на звуковой карте (а также Wavetable Upgrage)
- COM-to-MIDI на 80С51 (но есть нюанс)
- COM-to-MIDI на ардуине (но есть нюанс)
- COM-to-MIDI без ардуины (но есть нюанс)
- MIDI-вывод со Спектрума (базовый минимум)
- MIDI на MSX (с точки зрения Ямахи)
- MIDI для самоиграйки
- USB MIDI (для компьютера)
- USB MIDI (для синтезатора)
- MIDI для чиптюна
- Примеры из разных проектов
- О чём это?
Статья содержит некоторое обобщение опыта нашей лаборатории бесполезных вещей в области соединения по MIDI различных устройств. Главным образом внимание уделено физическому уровню MIDI версии 1.0, а модель данных и программный протокол MIDI затрагивается лишь вскользь, где это необходимо. Формат статьи «цифровая кладовка» — сборище разных данных, которое может изредка дополняться, переделываться и т. д. Как цифровой огород, только ничего не растёт =)
Напомним, MIDI (Musical Instrument Digital Interface) — это стандарт связи цифровых музыкальных инструментов, выпущенный в 1983 г. и позволяющий обмениваться информацией устройствам разных производителей. Кроме того, MIDI стал частью зарождавшихся тогда мультимедийных технологий на ПК и в этом качестве интересен не только музыкантам, но и любителям ретрокомпьютеров. Физический интерфейс представляет собой токовую петлю ~5 мА с гальванической развязкой, передающую данные в последовательном формате 8N1 со скоростью 31250 (±1%) бит/с . Типичный соединитель DIN 41524 (5 контактов), иногда может применяться TRS («джек»).
Собственно, обеспечение нужного битрейта и преобразование «(LV)TTL <-> токовая петля» и являются основными задачами при конструировании MIDI-интерфейсов для различной цифровой техники. Ниже рассмотрено несколько ситуаций.
Кстати, абзац отказа от ответственности: Если что-либо делать, можно что-нибудь сломать. Мы не виноваты, если что. Со своей стороны уточняем, что почти всё написанное проверено на практике, и в написании не помогала никакая искусственная нервная сеть.
2. Стандарт
В спецификации стандарта MIDI 1.0 физический уровень выглядит так:

Типичные компоненты: оптрон Sharp PC-900 (или 6N138 или любой другой достаточно быстрый (важно для длинных цепочек инструментов) с соответствующими изменениями в обвязке, см. примеры и ссылку); буферы или пара TTL инверторов в качестве формирователей; резисторы 220 Ом (точность 5%), которые и дают с указанным оптроном при напряжении питания 5В ток в петле около 5 мА (при другом напряжении или отличающемся по падению напряжения оптроне, величина сопротивления требует корректировки). Диод D1 защищает сравнительно нежный светодиод оптрона от случайного включения с обратной полярностью (типичное предельное обратное напряжение светодиода там ~5В).
На устройстве, в зависимости от его возможностей, может быть до трех* MIDI-портов: IN — вход, OUT — выход, THRU — сквозной (без логической обработки) повторитель входа. При подключении кабелем соединяются порт IN одного устройства и OUT (или THRU) — другого. Для осуществления двунаправленного обмена нужна пара кабелей. Длина кабеля — до 15 метров, внутри — экранированная витая пара, подключенная к контактам 4 и 5 DIN-вилки. Экран подключается только со стороны OUT или THRU портов для исключения гальванической связи.
* — может быть и больше, если устройство и ПО поддерживают работу с более, чем 16-ю MIDI-каналами. К примеру, редкий музыкальный компьютер Yamaha C1 1988 года имел на спине 11 (одиннадцать!) MIDI-портов и мог работать со 128-ю выходными MIDI-каналами.

3. DB-15F на звуковой карте (а также Wavetable Upgrage)
Стандарт MIDI-интерфейса для ПК (причем не только для IBM PC/XT, но и Apple II и некоторых других), был задан Roland’ом, выпустившим в 1984 г. MPU-401 (MIDI Processing Unit, блок обработки MIDI). Он представлял собой внешний модуль с процессором и портами, соединявшийся с интерфейсной платой, устанавливаемой в компьютер. Уместно напомнить, что в те годы IBM PC слабо ассоциировался с мультимедиа вообще, и работой с музыкой в частности. До бума «саундбластеров» оставалось еще лет пять, а до «студийной зрелости» все пятнадцать. Однако, именно режим совместимости с MPU-401 UART («dumb mode») стал программным стандартом для звуковых карт следующих поколений.

Большинство звуковых карт не (полу)профессионального сегмента, не имели стандартных DIN разъемов под MIDI, но соответствующие TTL-сигналы присутствовали на разъеме DB-15F, основное предназначение которого — подключение джойстика (или двух) к мультимедийному компьютеру (он становился таковым при установке звуковой карты). Эта славная традиция соблюдалась более десятилетия и сошла на нет с повсеместным утверждением USB-портов и соответствующей периферии. В середине же 1990-х для того, чтобы подключить MIDI-синтезатор к звуковой карте компьютера требовался специальный адаптер. Его начинка фактически повторяла картинку из стандарта выше (минус секция THRU, плюс хвостик на джойстик), при этом цена его была ~$20 и казалась неадекватной этой начинке (столько в 2002 г. стоила планка самсунговской SDRAM на 128МБ). Автору в 2018 г. в местном магазинчике попались эти адаптеры по 110 рублей — он купил два, не имея планов даже на один, таковы последствия травм юности =).

Впрочем, адаптер несложно изготавливался самостоятельно, например, по такой схеме:

Источник: https://fr.audiofanzine.com/dossiers_v3/intermidi/cablemidi.htm
Сигналы MIDI выведены на 12 (OUT) и 15 (IN) контакты розетки DB-15F. Питание схемы производится от GAME/MIDI-порта, буферы выхода и входа отсутствуют, что, обычно, не вызывает проблем на коротких кабелях, но на длинных (а также с некоторыми моделями звуковых карт), такой адаптер может работать не стабильно. Чуть более сложные, но безопасные варианты описаны, например, тут или здесь. Вот та же схема из книги Петелиных «Персональный оркестр в ПК»:

У Николенко в книге «MIDI — язык богов» приведена такая:

Примеры дизайна из 2001 г. =)
Раз…

И два…


Видна типичная ошибка начинающего ЛУТера — картинку надо зеркалить перед переносом на медь =). И еще самонадеянно исключен диод защиты оптрона.
Помимо внешнего разъема GAME/MIDI многие звуковые карты оснащались внутренним соединителем для дочерней платы wavetable-синтезатора в виде 26 контактной двухрядной гребёнки, обычно подписанной как Wavetable Upgrade (или WaveBlaster, MIDI EFX, и т. д).

На нее также выведен TTL-сигнал MIDI OUT (в редких случаях — также MIDI IN на 8 контакте). Правда, за малым количеством исключений, программно этот разъем и внешний порт GAME/MIDI не различимы и одновременно их использовать можно, только разделяя функции ввода и вывода или заглушая аудиовывод одного из устройств (если не требуется их унисон). Типичная разводка разъема WT Upgrade такова:

На разъем выведено питание +5В аналоговой секции (VCCA; 6, 10, 14), +12В (18) и -12В (22) (не на всех картах), цифровая земля (1, 3, 5, 7, 9, 11), аналоговая земля (15, 17, 19, 21, 23, 25), инвертированная линия сброса (26), стерео аналоговый аудиовход (20 и 24), и MIDI Out (4). На рисунке выше назначение сигналов указано в логике дочерней платы.
Разводка является более-менее стандартной для разных карт, но могут быть исключения, как на некоторых картах на чипах ESS, где ввод звука с аналогового переделан на проприетарный цифровой канал (соответственно, требуется дочерняя плата с цифровым выводом).
4. COM-to-MIDI на 80С51 (но есть нюанс)
В некоторых случаях установка звуковой карты (или MPU-совместимой ISA-платы) затруднена или невозможна (ноутбуки, например). При этом, в самом ПК уже имеется встроенный последовательный порт (а часто и не один). Почему бы не сделать адаптер, позволяющий обмениваться MIDI-данными через штатный COM-порт? Главной проблемой на этом пути будет даже не преобразование уровней RS-232 в токовую петлю и обратно, а согласование скоростей. Битрейт MIDI 31250 б/с (1 МГц / 32) не совпадает ни с одним стандартным значением скорости, на которых может работать COM-порт ПК. Ближайшие 38400 и 28800 — слишком далеки для асинхронного режима, поэтому адаптер должен не только поддерживать две разные скорости обмена, но и обеспечивать буферизацию и управление потоком данных.
Предлагаемая схема (автор Paul Messick, сайт в Интернете уже не работает) построена на популярнейшем микроконтроллере 80С51, использует один аппаратный последовательный порт МК, второй реализует программно, имеет буфер около 120 байт для данных, поддерживает аппаратное управление потоком и может обходиться «фантомным» питанием от линий порта RS-232. Программная поддержка под DOS не ясна, но предположительно с ним мог бы работать softMPU и DOSMID в режиме вывода в COM-порт. Для Win 3.1/95 автор схемы написал драйвер, добавляющий в систему стандартный MIDI-порт.

А нюанс в том, что схему эту в нашей лаборатории бесполезных вещей пытались собрать два раза с интервалом в 20 лет (буквально) и оба раза она не заработала ни в досовском тесте петли, ни с драйвером для Windows. Докопаться до причины пока не хватает то ли ума, то ли страсти, но логический анализатор показывает, что какой-то обмен завязывается, и тут же тухнет на этапе опознания адаптера программой. Тем не менее, схема интересна с методической точки зрения. Конечно, она не является единственной и в интернетах тех лет можно было найти еще несколько вариантов (вот, например). К слову, были (и даже есть условно-актуальные) попытки использовать для этой цели и LPT-порт, но, как правило, имели более скудную программную поддержку (к примеру, 1992 г., драйвер только для досовского Cakewalk’a).
5. COM-to-MIDI на ардуине (но есть нюанс)
Что ж, разобраться с чужим не получилось, а что если сделать свое на знакомых DIYщикам железках? Ага, Arduino (UNO/Nano), преобразователь уровней на MAX232 (лучше готовый мини-модуль), оптрон, резисторы, соединители…
Схема проще некуда, прошивка — тоже. Принимаем данные с одного порта, отправляем на другой, и наоборот. Со стороны MIDI скорость 31250, а со стороны ПК — 38400. Нюанс в том, что в таком минимальном варианте не реализовано управление потоком (пока), поэтому при плотном трафике или bulk-пересылках SysEx начинаются потери данных. С другой стороны, для типичных применений (озвучка игр, музицирование вручную, прослушивание обычных MIDI-файлов) такой реализации адаптера вполне достаточно. Более того, если применить Arduino на ATmega328PB, у которого есть второй аппаратный UART, то без потерь пересылаются bulk’и до 160 байт. Главное неудобство такого адаптера — необходимость питания 5В. Его придется брать или от отдельного блока (зарядка от мобильника) или выводить с порта PS/2 или из БП ПК.

Под DOS адаптер можно использовать с softMPU и DOSMID в режиме вывода в COM-порт. А для Win 3.1 и 95/98 подходит драйвер от Yamaha CBX-T3, добавляющий в систему стандартный MIDI-порт. Этот драйвер ожидает управление выходным потоком по RTS/CTS, поэтому для нормальной работы надо поставить перемычку между 7 и 8 пином DB-9 (или реализовать соответствующую полную логику в контроллере нашего адаптера).
Демонстрация
6. COM-to-MIDI без ардуины (но есть нюанс)
Еще один подход к проблеме согласования скоростей заключался в том, чтобы сменить базовую частоту аппаратуры COM-порта, например, заменой кварцевого резонатора. Этот порт больше нельзя будет использовать с периферией ПК, но адаптер для MIDI теперь сильно упрощается, сводясь к гальванической развязке и согласованию уровней. Впрочем, часто кварц был один на оба канала UARTa или вообще отсутствовал, а частота получалась делением базовой частоты шины. Это требовало уже более серьезной переделки контроллера.
Например…

Но встречались и решения, не требовавшие лезть с паяльником в компьютер. Например, во времена 486-х процессоров Winbond выпускал контроллер Multi I/O W83787(I)F. Он обычно устанавливался на материнские платы и приносил с собой два канала IDE, контроллер Floppy-дисковода, порт принтера, джойстика и два UARTа (в W83787IF еще была поддержка ИК-порта). Его можно было найти на матерях Zida 4DPS, Lucky Star LS-486E и многих других. Один или оба UARTа W83787(I)F могли быть в BIOS переключены в режим MIDI. При этом менялся делитель частоты тактового генератора 24 МГц с 13 на 12, что позволяло перестроить ряд скоростей и получить нужные 31250 б/с.

Далее, можно прицепить физическую обвязку (оптрон, буфер, MAX232), взять драйвер от Ямахи и вот вам MIDI-порт. Правда, и здесь не без тонкостей. Необходимая скорость на выходе будет, если сконфигурировать COM-порт «как будто» на 28800 б/с — стандартное, но более редкое значение. При том, что softMPU, что драйвер Ямахи настраивают порт на 38400. Остается только запускать утилитку, меняющую скорость порта после запуска softMPU и драйвера, пользуясь тем, что Win95/98 не пресекает прямое обращение к аппаратуре.
7. MIDI-вывод со Спектрума (базовый минимум)
Поскольку звук и музыка на Спектруме — поле обширное, максимально сузим тему до возможности послушать на внешнем синтезаторе MIDI-файлы, которые лежат на дискете формата TR-DOS. Надо взять дискету с ZX MIDI player и файлами (в нашей лаборатории TRD-образ на Кворуме-128 не захотел запускаться с DivMMC, пришлось брать BDI и Gotek) и уже в плеере выбрать направление вывода данных. Популярный способ, примененный еще в Spectrum 128K — это вывод MIDI-данных через линию GPIO A2 чипа PSG (19 нога AY-3-8910 или YM2149F)*. В нашем случае, была плата Турбосаунд+Кемпстон и на неиспользуемый в реальности контакт порта джойстика для третьей кнопки прокидывались данные. Дальше — простейший адаптер из пары резисторов, и вот уже MIDI-guy (SAM2695 внутри) весело запел.
В рамках суженной темы — всё.
* — такой способ (программное управление цифровой линией) может быть реализован на любой системе, и существуют плееры и для PC, и для MSX (через порт принтера), и, наверняка, для многих других компьютеров; главный минус в том, что это требует гораздо больше процессорного времени, особенно, в случае работы на ввод.
8. MIDI на MSX (с точки зрения Ямахи)
С программной точки зрения единого стандарта MIDI на MSX нет (стандарт MSX-MIDI появился на закате платформы), а есть несколько разных реализаций. Если сузить фокус до Yamaha, которая тащила в 1980-х MSX как музыкальную платформу (см. модули SFG-01 или SFG-05), то та применяла для MIDI I/O собственные навороченные контроллеры (например, YM2148), обычно отображаемые в пространство памяти и традиционно скупо документированные, что отразилось в сравнительно бедном оснащении упомянутых адаптеров программными средствами за пределами Ямаховской «экосистемы». Впрочем, на момент актуальности YM2151, оснащенный экранным редактором патчей, представлял собой весьма интересный FM-синтезатор (кстати, в нашей лаборатории бесполезных вещей сделали реплику дата-картриджа для SFG-05, которую можно использовать для сохранения патчей). В SFG-05 появилась возможность использовать MIDI-вход для подключения внешней MIDI-клавиатуры, а до этого поиграть в реальном времени можно было только на фирменных клавиатурах (Yamaha YK-01, YK-10/20), подключавшихся через специальный разъем и не передававших динамику клавиш, хотя синтезатор имел средства реагирования на динамику. Стандартная программная оболочка SFG-05 имела также простенький режим «самоиграйки» с автоаккопаниментом, но его забыли научить работать с внешней MIDI-клавиатурой, поэтому переключение тона аккомпанимента (как и индикация нажатых клавиш) работают только с «фирменной» клавиатурой. Не то чтобы в этом была какая-то особая надобность, но слегка обидно. Впрочем, наша лаборатория бесполезных вещей разработала адаптер, позволяющий подключить обычную MIDI-клавиатуру в «фирменный» порт SFG-05.

Еще картинки Ямах…






В наши дни превратить старую школьную Ямаху КУВТ в музыкальный компьютер 1980-х можно, например, с помощью реплики от RBSC. К слову, сеть КУВТ2 также была построена на универсальных ямаховских коммуникационных контроллерах YM3802, которые поддерживали различные форматы и скорости обмена, помимо MIDI, а в качестве MIDI-приемопередатчика применялись, например, на звуковых картах Media Vision Pro Audio Spectrum.
Кстати…
Стоит в контексте упомянуть проект MAmidiMEmo, который представляет собой программный синтезатор, умеющий эмулировать массу музыкальных ретрочипов, а кроме того, позволяющий подключить любую MSX-машину (и многие другие) через порт джойстика к ПК посредством моста USB-Serial (см. раздел VSIF в документации) и задействовать обычным для ПК с Windows образом установленные на MSX музыкальные средства (PSG, OPM, OPLL и т.д.). Это, конечно, не относится к аппаратуре MIDI, но решает схожую задачу по пересылке музыкальной и конфигурационной информации. Чума ваще.
9. MIDI для самоиграйки
Попалась как-то ссылка (если кратко — на плате синта есть контакты, куда выведены сигналы MIDI). Поскольку имеющийся в лаборатории Yamaha PSS-F30 построен на той же аппаратной платформе, что и рассмотренный в статье PSS-A50, он был обречен на дооснащение MIDI-портами (тем более, что в отличие от А50, там нет чипа USB MIDI). Это позволило удобно применять его в качестве компактной MIDI-клавиатуры и даже «почти XG» тон-генератора. Схема стандартная — КМОП-буфер, оптронная развязка и DINы на корпус, только питание там 3,3В, что требует уменьшить номинал резисторов на выходе (100 … 50 Ом).


Поскольку сам синтезатор ничего про обретённые порты не знает, никакого управления MIDI-функциями нет, передача идет только по первому каналу, а номера программ не совпадают с GM, но с этим все равно можно работать. Кроме того, на MIDI-выход постоянно идут MIDI-сообщения реального времени Active Sensing и Timing Clock, которые, как внезапно выяснилось, могут смущать некоторые MIDI-интерфейсы.
10. USB MIDI для компьютера
С утверждением USB многие стандартные порты ушли со спин компьютеров и периферии. То же стало и с MIDI, который остался только на (полу)профессиональном оборудовании. Если нужно подключить «старое» устройство с MIDI-портами к компьютеру, потребуется адаптер USB-MIDI, который несложно найти в продаже или сделать самому. Но жирный нюанс преобразования USB <-> MIDI состоит в том, что его нельзя провести на чисто физическом уровне, поэтому прошивка адаптера (и отчасти — системный драйвер) должна учитывать особенности структур данных MIDI (переменную и иногда весьма большую длину сообщений SysEx). На этом спотыкается большинство наивных реализаций.
Например, самые дешевые USB-MIDI-адаптеры (типичный облик — овальная черная коробочка с серебристыми проводами) от рождения имеют ряд «особенностей», из-за которых их лучше избегать в сколько-нибудь серьезной работе.

В нашей ЛБВ есть два таких адаптера. Что интересно, несмотря на внешнюю неразличимость, внутри они заметно отличаются по исполнению (тут еще про третий вариант и про то, как сделать свой). Обзовем их, согласно надписям на платах, M-272 и MD01C. При подключении по USB они оба передают одинаковые VID 1A86 PID 752D, соответствующие чипу USB-MIDI WCH CH345 (хотя, как минимум один из них точно таковым не является).


Итак, невооруженным взглядом видно, что в обоих исполнениях отсутствует гальваническая развязка входа и не подключен к земле экран выходного порта (впрочем, экран и к DIN-вилке не подключен). В первом случае «преобразование» токовой петли в потенциальный сигнал сделано резистором (как в даташите на CH345 в варианте экзотического адаптера USB <-> DB-15F, при этом, на плате есть пустые посадочные места под оптрон и защитный диод и вернуть развязку можно). Во втором — схемой на транзисторе (места под развязку не предусмотрено), которая довольно капризна к величине и частоте входного тока, и, в частности, не работает с MIDI-выходом дооснащенной самоиграйки из п. 9 (при том, что десяток других устройств, включая «братский» M-272, претензий к нему не имеют). Здесь подробнее описана схема второго адаптера и переделка (или здесь). На M-272 перепутаны обозначения индикаторов (на корпусе, на плате они просто пронумерованы). Указанные недоделки можно исправить, но тут на первый план выходит та самая проблема, что оба адаптера плохо работают с плотным потоком данных. Причем, если M-272 явно имеет ошибки в реализации управления потоком, то MD01C и не пытается ничем управлять (размер буфера в чипе CJS1039B, по некоторым данным, всего 8 байт, впрочем, учитывая ненадежность входной цепи, объективно его измерить сложно). В итоге, пересылки SysEx-сообщений (не говоря уж о MIDI Bulk) происходят с ошибками. Резюмируя, экземпляр M-272 можно использовать, чтобы слушать обычные мидишки (где плотность сообщений не более ~500 в сек, и SysEx на уровне десятка байт, типа XG System On (хотя в экспериментах удавалось передавать без ошибок почти сотню байт в направлении MIDI -> USB) или наигрывать вручную, а вот MD01C без переделки для работы на вход не годится, а на выход — только если нет ничего другого под рукой.
Когда дошли руки добавить к обоим адаптерам оптроны, выяснилось еще кое-что «интересное» про MD01C. Он заработал с выходом самоиграйки, но, что с ней, что с YS200, при попытке взять (или снять) одновременно три ноты, он передавал только одно сообщение Note On (Off), а не три. У M-272 таких проблем не было. Дело оказалось в том, что обе ямахи постоянно передают сообщения реального времени Active Sensing (а PSS-F30 — еще и Timing Clock), которые ломают обработку близких событий внутри адаптера. А вот Alesis Micron никаких Realtime Messages не гоняет, и его аккорды MD01C передает нормально. В общем, можно дополнить вывод тем, что рассмотренные адаптеры различаются не только обвязкой, но и способом обработки сообщений (и, отсюда, степенью соответствия стандарту MIDI), а MD01C, даже после исправления схемотехники входа, с некоторыми MIDI-устройствами будет продолжать глючить.
В качестве референса при оценке вышеописанных адаптеров использовался фирменный адаптер M-Audio Midisport 2×2 (MIDIMAN Anniversary Edition), построенный на контроллере Cypress CY7C64713, который умеет гонять во все стороны SysEx размером не менее чем 4кБ на блок (большие пока не проверялись):

Между этими вариантами «дешево, но плохо» и «хорошо, но дорого» есть середина — «недорого и неплохо»: можно сделать адаптер на основе Arduino Leonardo / Micro (МК ATmega32u4), который имеет аппаратную поддержку USB 1.1 и может выступать в роли USB-функции (мыши, клавиатуры, последовательного порта и т.п.). Собственно схема там минималистична — MIDI висит на UARTе МК со штатной обвязкой из оптрона и резисторов.

Прошивкой может служить один из примеров от MIDI-библиотек для Ардуино, но они, как правило, также имеют проблему с обработкой SysEx и годятся только для стандартных коротких сообщений. Приятное исключение составляет MIDIUARTUSB, которая справляется с отправкой SysEx не менее 4 кБ длиной (USB -> MIDI) и приемом до 1 кБ (MIDI -> USB), причем вторая величина ограничена только объемом ОЗУ применяемого контроллера.
11. USB MIDI для синтезатора
А что если задача обратная — есть синтезатор только с USB-портом, но хочется его задействовать для управления обычным MIDI оборудованием? Или заставить его играть музыку из досовских игр с компьютера без USB?
Один из вариантов решения — Arduino UNO/Nano и USB Host Shield на Max3421E. Этот чип работает как корень шины USB и умеет взаимодействовать с различными функциями, включая MIDI-контроллеры. Соответственно, если занять UART МК для MIDI-интерфейса (и прошить стандартный пример библиотеки USB HOST Shield Library 2.0/USBH_MIDI/bidirectional_converter), можно получить мост USB B-MIDI.

Casio CTK-2000, оснащенный только USB MIDI, исполняет theace.mid из примеров Midisoft Studio 4 под Windows 95 на Pentium-166 (вывод через переходник DB-15 — MIDI на SB 32 и адаптер USB-host — MIDI):
Некоторые навороченные ардуины (DUE и некоторые другие) умеют работать USB-хостом сами, без дополнительных контроллеров, но, по крайней мере некоторое время назад, программная поддержка там была слабее и список реально работавших устройств был меньше. Стоит проверить, как оно сейчас.
12. MIDI для чиптюна
Если охота послушать любимые мидишки (или сыграть вживую) на PSG, наваливающем тру-8-битный звук, то можно взять эмулятор YM2149F или AY-3-8910, Ардуино на ATmega32u4, открыть эту ссылку и немного попаять. Получится неплохой синтезатор, умеющий эффективно раскидывать «три с половиной» генератора PSG на несколько MIDI-каналов. Ардуино здесь работает не только как преобразователь «последовательного в параллельный», но и как полноценный управляющий агент, помогающий подружиться двум весьма разным логикам управления звуком, характерным для MIDI и чиптюна.
В нашей ЛБВ слегка переделали этот проект, чтобы вместо USB MIDI можно было использовать обычный MIDI-порт и Arduino Nano. И еще добавлены 5 переключателей (на A1…A5), чтобы можно было выбирать «патчи» вручную, а не автоматом по номеру миди-канала. Поскольку в Ардуино на ATmega328 линии UART используется для загрузки прошивки, предусмотрен джампер, отключающий выход оптрона от линии Rx на время программирования МК.

Еще можно посмотреть на вариант с двумя PSG или на звуковой движок Sega MegaDrive с MIDI-входом…
13. Примеры из разных проектов
Варианты реализации физического уровня из разных проектов.
- Синтезатор Yamaha YS200 (1988 г.)

IC33 — 6N137, IC6 — 74HC14, D1 — 1SS176. Как и во многих профессиональных инструментах, помимо стандартных элементов добавлены индуктивности на обе линии разъемов, а экран со стороны MIDI IN развязан с землей конденсатором.
2. Синтезатор Alesis Micron (2005 г.)

3. Модуль FM-синтезатора YAMAHA SFG-01 (1983 г.)

IC108 — 74LS04, IC109 — TLP552, D3 — 1SS133
4. MegaMIDI (YM2612 + SN76489) (2021 г.)

5. MIDI-guy (SAM2695) (2024 г.)

Вместо DIN применен TRS (jack 3.5 mm), а для обеспечения совместимости с разными типами разводки введен диодный массив U3. Но автор схемы забыл отразить влияние лишних диодов на ток. Поэтому величина R2 требует корректировки вниз, например, 110 Ом. Также величину R3 рекомендуется увеличить до 390 Ом.
Дополнительная информация
- W83787IF datasheet (про MIDI-режим — стр. 66)
2. WCH CH435T datasheet