Pull to refresh

Comments 24

Покупал такой же, во всяком случае очень похожий, адаптер, как на КДПВ. Вполне нормально работает по этой инструкции и обеспечивает многоголосье, 10 одновременно нажатых клавиш.

Многоголосие обеспечивает любой адаптер, если он хоть как-то работает. При нажатии клавиши сообщение Note On передается один раз, в MIDI нет автоповтора, как в компьютерных клавиатурах. Можете подключить параллельно приемник и убедиться, что при нажатии хоть всех 88 клавиш для каждой исправно передается Note On, а при отпускании - Note Off.

Проблема у большинства таких адаптеров возникают только при передаче SysEx - по USB они передаются единым пакетом, и адаптер должен сперва принять его целиком, а затем (или параллельно) поочередно отдавать байты по MIDI. А буферы для этих пакетов почему-то очень маленькие. Такое впечатление, что микросхемы для этих адаптеров делали люди, читавшие только спецификацию MIDI, но толком с ним никогда не работавшие.

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

профессиональный стандарт… на сцене

В статье речь идёт об адаптере классического электрического интерфейса MIDI, который In/Out/Thru и DIN-5. Программный протокол не равен электрическому интерфейсу, поэтому в современной любительской и просьюмер музыкальной технике сейчас преобладает электрическое подключение по USB с программным протоколом MIDI. Обращаться к классическому интерфейсу дома приходится в основном при использовании старых железных синтезаторов и контроллеров, что сегодня нужно далеко не всем и не всегда.

Сам стандарт MIDI лет 15 как собирается в будущее, в этом году наконец собрался, представили MIDI 2.0. Но скорее всего он так и останется в сегменте профессионального оборудования.
MIDI постепенно становится беспроводным. И в каждом инструменте нужен MIDI.
Старые проекты на микроконтроллерах Atmega с программной реализацией протокола USB. В них используется режим Low Speed, который устарел и не поддерживается в Windows 7

То, что USB 1.1 устарел — спорить трудно. То, что он не поддерживается в Win 7 — неверно.
В Windows 7 устройства типа Audio Class не могут быть Low Speed. Версия тут не причём.
Так вроде все клавиатуры, мышки и прочие манипуляторы используют этот режим?
Вы перечислили устройства класса HID. Для MIDI нужен Audio Class.
Вот если б знал, что
режим Low Speed, который устарел и не поддерживается в Windows 7
ни за что не стал бы делать себе такой адаптер на atmega328 + soft-usb. И Digispark тоже этого не знают, похоже. :))
Такое ощущение, что статью писал начинающий копирайтер. И статья о том, как изобрести велосипед переходник USB-COM. Ведь по сути миди-интерфейс это обычный COM-порт с дебильной нестандартной частотой. Небольшой, кстати. Я не пойму зачем городить всякую кучу команд в статье, если они все идут транзитом с синта на хост. У меня тоже был переходник с КДПВ. Работал он нормально, только на всякие нестандартные команды (типа сисексы) реагировал кучей ненужных звуков на хосте и не передавал файлы с ямахи на хост и обратно. Меня это жутко бесило, и я подумывал сделать тоже такое устройство из ардуины или СТМки. Но мне удачно подвернулась ямаха с USB и я тупо забил на это дело. Придумать USB-COM переходник не так сложно, в том числе и с буфером. Главное правильно настроить USB на контроллере. Странно что автор выбрал какой-то невообразимый контроллер, который в мире наверное используют 2 человека. Я конечно понимаю, что 8051 изученная архитектура, но вот где его брать — непонятно. А ардуины и СТМки валяются на каждом углу. Значит повторяемость конструкции очень низкая. И суть этой разработки — потешить свое эго. Я не хочу принижать заслуги автора, но вопрос — НАХРЕНА? Например схемотехника. Прям вот оптопара именно эта на частоте 31250 вот прям так выпрямляет фронты, с чем ширпотреб типа PC817 или еще какие не справятся? Или преобразователь 3.3-5? Вот прям есть такая необходимость поставить целый корпус микросхемы преобразователя уровней с чем обычный резистор не справится?
Моя идея была вообще изначальна проста: процессор, оптрон, 2 резистора. Этого для миди вполне достаточно.
В статье сказано, что схем в Интернете много. Подключить MIDI через UART-переходник — это не проблема. Это костыль.Правильно — написать прошивку для USB-устройства типа Audio Class. В этот и заключалась основная работа, статья про программирование USB для MIDI устройств.
Кстати, частота 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 мс.

Sign up to leave a comment.

Articles