Создание собственного приложения для устройства USB MIDI - PullRequest
4 голосов
/ 15 ноября 2011

Я хочу попробовать сделать свое собственное приложение для моего Novation Nocturn, который представляет собой поверхность USB-контроллера DJ.Прикладное программное обеспечение взаимодействует с ним, чтобы отправлять MIDI-сообщения программам, таким как Traktor, Ableton и Cubase.

Я знаю о libusb, но это насколько я знаю.Я успешно установил его для взаимодействия с моим устройством, но остановился на этом.

Я в основном ищу подходящий материал для чтения.Спецификации USB, спецификации MIDI и тому подобное.Если честно, полная спецификация USB 2.0 выглядит так, как будто она содержит массу вещей, которые мне не нужны.Просто ищу что-нибудь интересное, чтобы сделать сейчас, когда я закончил свою степень (компьютерные науки).Мои текущие знания в области программирования - C ++ и, главным образом, C #.

. Могу дать некоторые указания о том, как застрять в этой задаче.

edit:

Обновление, чтобы включить некоторую информацию из диспетчера устройств на Nocturn.

Идентификаторы оборудования:

USB \ VID_1235 & PID_000A & REV_0009

USB \ VID_1235 & PID_000A

Совместимые идентификаторы:

USB \ Class_FF & SubClass_00 & Prot_00

USB \ Class_FF & SubClass_00

USB \ Class_FF

Класс устройства:

MEDIA

Ответы [ 6 ]

1 голос
/ 15 ноября 2011

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

Для C ++ Juce - это, вероятно, правильный путь, поскольку вы не упомянули целевую платформу или какие-либо другие специфические требования.

0 голосов
/ 25 февраля 2014

Старый поток, но я только недавно начал изучать это.

Я посмотрел на приложение Python, которое написал Деверт.Интересно, что оказывается, что данные, которые излучает Nocturn, на самом деле являются MIDI, хотя они не регистрируются в качестве устройства USB MIDI.сообщения об изменении управления (значение контроллера 0xB0) для всего.Кроме того, команды управления, которые отправляются на него, также являются сообщениями об изменении управления, хотя и только байтами данных, поскольку Nocturn, кажется, поддерживает состояние выполнения MIDI (т.е. при отправке нескольких сообщений об изменении управления не требуется повторять байт данных).

Действительно, глядя на магические данные инициализации, это на самом деле просто набор управляющих изменений: он начинается с 0xb0, а оттуда данные поступают в два раза.Например, последние два байта в строке инициализации - 0x7f 0x00, которые просто выключают светодиод для крайней правой кнопки вперед.(В результате отправки инициализации происходит что-то неуловимое, поскольку Nocturn иногда испускает некоторые сообщения, которые представляются в виде событий тайм-аута, и это поведение меняется в зависимости от того, отправлена ​​строка инициализации или нет.)

Использование сообщений, подобных MIDI, имеет смысл, поскольку Novation хорошо знает протокол MIDI, поэтому им будет проще использовать его для связи, даже если устройство не является строго MIDI-устройством.

Обратите внимание, что инкременторы просто отправляют значения 1 или 127, то есть шаг +1 или -1, поэтому даже с некоторыми программами тривиального отображения это не очень полезно, как есть.(На самом деле, если повернуть быстро, можно получить 3 или 125, например, с 125, соответствующим -3.) Единственный контроллер, который отправляет непрерывное значение, - это ползунок, который при перемещении выдает 8-битное значение.

0 голосов
/ 20 ноября 2011

Драйвер для Nocturn делает его системным MIDI-устройством, хотя на аппаратном уровне это не USB-MIDI-устройство.Программное обеспечение Automap работает полностью на уровне MIDI, получая инструкции MIDI и отправляя различные инструкции в ответ - оно отдельно от драйвера и не является обязательным.

В качестве альтернативы посмотрите на https://github.com/timoahummel/nocturn-game для примераговорить с ним напрямую через USB от Python.Возможно, вы можете перенести это на другой язык с помощью привязок libusb.

0 голосов
/ 19 ноября 2011

Готово ... Шучу, но я начал это на Python - лично я хочу поддержку linux.Я учу себя питону, но я только балуюсь программированием.

Вы можете увидеть базовую функциональность на https://github.com/dewert/nocturn-linux-midi. Парень, который обратный проектировал его (то есть прыжок, который я не смог бы сделатья), похоже, больше с этим не справляется.Его код на https://github.com/timoahummel/nocturn-game

Я использую PyPortMIDI и PyUSB, оба из которых, я считаю, являются обертками для эквивалентов C.Я думаю, что это все нормально в Windows, но я не пробовал.

То, что в настоящее время на моем github - это дерьмо, но это подтверждение концепции.Сейчас я работаю над тем, чтобы сделать это правильно, используя многопоточность и правильные параметры конфигурации.

0 голосов
/ 15 ноября 2011

Если вы хотите пойти по маршруту .NET, проще всего начать с кода CI MIDI Toolkit:

http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx

Там вы найдете всеосновы открытия устройства, чтения ввода и записи вывода.В качестве альтернативы, NAudio имеет некоторые классы MIDI, но они несколько неполны.

По мере разработки вам понадобится справка для спецификации MIDI handy.

Инструмент, который вы найдете бесценным - MIDI-OX .На самом деле, я предлагаю, чтобы перед началом кодирования вы запустили MIDI-OX и использовали его для прослушивания сообщений, поступающих с новации.Это даст вам хорошее представление о том, что посылает новация.Вы можете использовать его в сочетании с MIDI Yoke (настраиваемый виртуальный MIDI-порт) для вставки между Novation и Ableton Live (или любым другим программным обеспечением, которое вы обычно используете в Novation), чтобы вы могли видеть всесообщения в обычном использовании.

0 голосов
/ 15 ноября 2011

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

...