Комментарии 24
Покупал такой же, во всяком случае очень похожий, адаптер, как на КДПВ. Вполне нормально работает по этой инструкции и обеспечивает многоголосье, 10 одновременно нажатых клавиш.
Многоголосие обеспечивает любой адаптер, если он хоть как-то работает. При нажатии клавиши сообщение Note On передается один раз, в MIDI нет автоповтора, как в компьютерных клавиатурах. Можете подключить параллельно приемник и убедиться, что при нажатии хоть всех 88 клавиш для каждой исправно передается Note On, а при отпускании - Note Off.
Проблема у большинства таких адаптеров возникают только при передаче SysEx - по USB они передаются единым пакетом, и адаптер должен сперва принять его целиком, а затем (или параллельно) поочередно отдавать байты по MIDI. А буферы для этих пакетов почему-то очень маленькие. Такое впечатление, что микросхемы для этих адаптеров делали люди, читавшие только спецификацию MIDI, но толком с ним никогда не работавшие.
MIDI в домашней студии во многом дело дней минувших
профессиональный стандарт… на сцене
В статье речь идёт об адаптере классического электрического интерфейса MIDI, который In/Out/Thru и DIN-5. Программный протокол не равен электрическому интерфейсу, поэтому в современной любительской и просьюмер музыкальной технике сейчас преобладает электрическое подключение по USB с программным протоколом MIDI. Обращаться к классическому интерфейсу дома приходится в основном при использовании старых железных синтезаторов и контроллеров, что сегодня нужно далеко не всем и не всегда.
Сам стандарт MIDI лет 15 как собирается в будущее, в этом году наконец собрался, представили MIDI 2.0. Но скорее всего он так и останется в сегменте профессионального оборудования.
Старые проекты на микроконтроллерах Atmega с программной реализацией протокола USB. В них используется режим Low Speed, который устарел и не поддерживается в Windows 7
То, что USB 1.1 устарел — спорить трудно. То, что он не поддерживается в Win 7 — неверно.
режим Low Speed, который устарел и не поддерживается в Windows 7ни за что не стал бы делать себе такой адаптер на atmega328 + soft-usb. И Digispark тоже этого не знают, похоже. :))
Сохранил в закладки.
Моя идея была вообще изначальна проста: процессор, оптрон, 2 резистора. Этого для миди вполне достаточно.
Кстати, частота 31250 выбрана очень удобно для устройств от 2МГц, т.к. делитель для неё без остатка делится. То, что вы называете «преобразователь уровней» — это не только для 5В, это чтобы включить оптрон в синтезаторе, ток выдать согласно стандарту. Чтобы работало везде, а не только на коленке.
Сделать UART на 31250 бит/с не проблема, но в винде (за линуксы не знаю) он будет виден, как COM-порт. Соответственно, никакие MIDI-приложения с ним работать не станут. Им нужен MIDI-порт, у него весьма специфический API, который MS зачем-то нагородила еще в начале 90-х, и он так и остался по сей день.
Раньше, до висты, можно было сделать несложный драйвер режима пользователя, преобразующий COM-порт в MIDI-порт, а в висте эту возможность прикрыли, и MIDI-порты делаются только из соответствующих KS-пинов, а стандартный usbaudio.sys делает их только из устройств класса Audio. Опять же, можно сделать свой драйвер режима ядра, но его придется подписывать у MS, и затем сопровождать, выполняя новые требования MS.
Так что реализация на МК выглядит оптимальной.
Статья очень интересная многое понял, сам брал такой переходник рублей за 200 намучился с ним, пока не купил за 900 рублей тоже китайщину но более качественную, служит мне уже года три не единого косяка не замечал
Увы, в прошлом году мне эта статья почему-то не встретилась, а то бы прокомментировал сразу. :) Попалась только сегодня, когда попытался подключить через такой же китайский адаптер свою старую Yamaha DB50XG, и обнаружил, что адаптер портит все длинные SysEx, начиная с XG On, и включить XG было невозможно. Я этот адаптер покупал пару лет назад на Ali, "на всякий случай". Обнаружил, что вход не работает - даже при соединении входа с выходом индикатор In светится непрерывно, а данные в порт не приходят. Ну и забросил его, а вчера вот решил оформить DB50XG в коробку, чтобы подключать сразу по USB.
Представляется VID/PID 1a86/752d, что вроде как соответствует CH345. 14-выводная микросхема (обозначение тоже сошлифовано) во многом похожа на 20-выводной CH345 (есть выводы для индикаторов, Out активен низким, а In - высоким, может работать от 3.3 В). Такое впечатление, что какой-то клон, или сам Nanjing Qinheng втихушку делает упрощенную версию).
В блогах/форумах много жалоб на то, что CH345 портит SysEx, но мне не удалось понять, насколько это относится к оригинальной 20-выводной версии - в даташите на CH345 VID/PID почему-то не указаны, и вообще он какой-то невнятный, а все обсуждения (в том числе разработчиков Linux) идут вокруг этих дешевых адаптеров в черных корпусах.
Вы проделали отличную работу, спасибо! Сгоряча даже подумал повторить, но у меня есть нормальный адаптер с платой Z-TEK (микросхемы тоже шлифованные, но основа, похоже, тоже на МК, и там еще есть выходы второго канала, которые не распаяны). Покупал его лет десять назад в Китае на барахолке, за копейки. Этот отлично работает и по входу, и по выходу. Придется оформлять DB50XG с полноценным MIDI-входом и отдельным питанием, будет прям тон-генератор. :)
Спасибо за добрые слова.
Оригинальный CH345 действительно выпускается в микросхеме с 20-выводами, требует кварца 12МГц, а в схемах рекомендуется ставить опторон. А то, что мы видим в этом "китайском чуде" - неведомая зверушка. Использовать чужой VID/PID - не очень законно, но с технической точки зрения - оптимальное решение. Функционал и драйверы используются одни и те же. SysEx у меня сделан неизвестно как, т.е. не тестировал (не на чем), хотя пару месяцев назад выложил новую переработанную версию прошивки.
Корпус и mini-usb неудачно у меня получились. Слишком глубоко внутри и кабель тяжело втыкать. Но, в целом работает.
Кварц для таких применений не принципиален. RC-генератор на частоту порядка 1 МГц, запитанный от стабилизированного напряжения, дает нестабильность в единицы процентов, этого более, чем достаточно для любого нормального UART. А оптроны в MIDI главным образом для избегания земляных петель, увеличивающих шумы в звуковых трактах.
В даташите на CH345 меня сильно смущает как раз отсутствие упоминаний о VID/PID, как-то это несерьезно.
Для тестирования SysEx достаточно соединить вход с выходом, гнать на выход любые SysEx, и смотреть, как они принимаются на уровне системы (после обработки драйвером). Если совпадают с отправленными, то и инструменты будут их принимать нормально.
следует установить Asio-драйверы, потому что при использовании DirectSound и DirectInput наблюдается задержка между нажатием клавиши и воспроизведением ноты. Задержка не связана с аппаратной частью и является особенностью реализации ОС
ОС тоже ни при чем - у DirectInput задержка в единицы миллисекунд, у реализаций DirectSound на Vista+ - 20-30 мс, ухо этого не уловит. Проблема в приложениях, которые используют DS и MME как попало, поэтому для достижения стабильности им приходится задавать слишком долгую буферизацию. Когда берутся делать что-то для ASIO, там вроде как стыдно работать с большими буферами (а иногда попросту и драйвер не дает), поэтому приходится напрягаться и соответствовать. :)
Я заметил, что если в Cubase использовать программные звуки MIDI (что-то вроде GM DLS), то задержки ярко выражены. А вот другие звуки/инструменты Cubase воспроизводятся почти без задержек. Предполагаю, что проблема в древней mmsystem.dll, а именно функциях midiOut*** (например, midiOutCachePatches). Возможно, это такой legacy код из 20-го века, что в Microsoft мало кто сейчас что-то в нём понимает.
Да, программный MIDI-синтезатор в Windows примитивный - он тормозил еще в 90-х, когда его приделали, и вряд ли его с тех пор совершенствовали. :) А функции waveOutXxx работают примерно с той же эффективностью, что и WASAPI/shared. Буфер по умолчанию у этой подсистемы - 30 мс, при грамотной обработке приложению вполне хватает буфера в 40-50 мс.
MIDI2USB – музыка нас связала