制作我自己的USB MIDI设备应用程序

时间:2011-11-14 21:16:51

标签: usb midi

我想尝试为我的Novation Nocturn制作我自己的应用程序,这是一个USB DJ控制器表面。应用程序软件与它交互,将MIDI消息发送给Traktor,Ableton和Cubase等软件。

我知道libusb,但就我而言。我已成功安装它以与我的设备进行交互但停在那里。

我基本上是在阅读一些合适的阅读材料。 USB规格,MIDI规格等。如果我是诚实的,完整的USB 2.0规范看起来像是拥有我不需要的东西。 现在我正在寻找一些有趣的事情,我已经完成了学位(计算机科学)。我目前的编程知识是C ++,主要是C#。

可以就如何坚持这项任务做一些指导。

修改

更新以在Nocturn中包含设备管理器中的一些信息。

硬件ID:

USB \ VID_1235&安培; PID_000A&安培; REV_0009

USB \ VID_1235&安培; PID_000A

兼容ID:

USB \ Class_FF&安培; SubClass_00&安培; Prot_00

USB \ Class_FF&安培; SubClass_00

USB \ Class_FF

设备类:

MEDIA

6 个答案:

答案 0 :(得分:1)

USB MIDI可能是一个低于你想要处理的抽象层。我建议找一个好的MIDI框架并通过MIDI与设备交互。

对于C ++,Juce可能是要走的路,因为你没有提到目标平台或任何其他特定要求。

答案 1 :(得分:0)

如果您想使用.NET路由,最简单的入门方法是使用C#MIDI工具包代码:

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

在那里,您将找到打开设备,读取输入和写入输出的所有基础知识。或者,NAudio有一些MIDI类,但它们有点不完整。

随着您的发展,您需要一个reference for the MIDI spec便利。

您会发现无价值的工具是MIDI-OX。事实上,我建议在开始编码之前,启动MIDI-OX并使用它来嗅探来自Novation的消息。它会让你很好地了解Novation发送的内容。您可以将它与MIDI Yoke(可配置的虚拟MIDI端口)结合使用,将其插入Novation和Ableton Live(或您通常用于Novation的任何软件)之间,以便您可以正常查看所有消息使用

答案 2 :(得分:0)

完成......开玩笑,但我已经开始使用Python - 我个人想要Linux支持。我正在教自己python,但我只涉足编程。

您可以在https://github.com/dewert/nocturn-linux-midi查看基本功能。对它进行逆向设计的人(即我自己无法实现的飞跃)似乎不再使用它了。他的代码在https://github.com/timoahummel/nocturn-game

我正在使用PyPortMIDI和PyUSB,我相信它们都是C等价物的包装器。我认为这在Windows上都可以,但还没试过。

目前在我的github上是什么废话,但它是概念验证。我现在正在努力使用线程和正确的配置选项。

答案 3 :(得分:0)

Nocturn的驱动程序使系统看起来像MIDI设备,即使它不是硬件级别的USB MIDI设备。 Automap软件完全在MIDI级别工作,接收MIDI指令并发送不同的指令作为响应 - 它与驱动程序是分开的而不是必需的。

或者,查看https://github.com/timoahummel/nocturn-game以获取直接通过USB与USB对话的示例。您可以使用libusb绑定将其移植到另一种语言。

答案 4 :(得分:0)

旧线程,但我刚刚开始研究这个问题。

我看了一下dewert编写的Python应用程序。有趣的是,事实证明,Nocturn发出的数据实际上是MIDI,虽然它没有将自己注册为USB MIDI设备。

但是查看来自设备的实际数据,它实际上会为所有内容发出控制变更消息(0xB0控制器值)。发送给它的控制命令也是控制变化消息,尽管只是数据字节,因为Nocturn似乎支持MIDI运行状态(即,当发送多个控制变化消息时,没有必要重复数据字节)。

实际上,看着神奇的初始化数据实际上只是一堆控制变化:它从0xb0开始,从那里开始,数据来自两个。例如,init字符串中的最后两个字节是0x7f 0x00,它只是关闭最右边的前进按钮的LED。 (由于Nocturn有时会发出一些似乎是某种形式的超时事件的消息,因此会发送初始化时会发生微妙的事情,并且该行为会根据是否已发送初始化字符串而发生变化。)

使用类似MIDI的信息是有道理的,因为Novation会很清楚MIDI协议,因此即使设备不是严格的MIDI设备,也最容易将它用于通信。

注意虽然增量器只发送值1或127,即+1或-1步,所以即使使用一些简单的映射软件,它也不是真的有用。 (实际上,如果快速转动,例如可以得到3或125,其中125对应于-3。)唯一发送连续值的控制器是滑块,移动时会发出8位值。

答案 5 :(得分:-1)

我想你一般都想知道USB classes,特别是USB MIDI class。如果您没有为某些专有协议提供文档(无论是否在那里使用),后者是您所希望的最佳方式。