我有RSI问题,尝试了30种不同的电脑键盘,都让我很痛苦。弹钢琴不会给我带来痛苦。我已经弹钢琴20年了,没有任何疼痛问题。我想知道是否有一种方法可以从MIDI键盘捕获MIDI并输出键盘敲击。我对MIDI一无所知,但我想要一些关于如何将这个信号转换成按键的指导。


当前回答

关于MIDI

你说你“对迷笛一无所知”。一旦掌握了MIDI技术,它就相当简单,但在开始时可能会令人困惑。有一种资源对我理解MIDI的基础(如果你想编程MIDI交互,这当然是必要的)有极大的帮助,那就是为技术恐惧者写的一本叫做MIDI的书。这是一本容易读的书,非常有用。


Pure Data & Max

在我开发交互式多媒体的经验中,我遇到过两个非常相似的程序,它们有助于连接和映射来自任何设备的信号/输入。

这些是Mac环境下的Max和PC环境下的Pure Data。两者都有大量的在线文档和YouTube教程。视频Max/MSP教程1 -使用计算机键盘作为MIDI键盘(ableton风格)演示了Max内置的一个程序,该程序将计算机键盘映射到MIDI键盘的输入(这基本上与您正在尝试做的完全相反)。您可以通过使用相同的模式,但是反转信号/映射来获得预期的结果。


自动热键

AutoHotKey是一个免费的Windows开源实用程序,允许您将设备上的键和按钮重新映射到宏。它本机支持QWERTY键盘,操纵杆和鼠标宏。

但是,我能够找到支持您正在寻找的特定映射的实现。下面两个线程解释了这个过程:

MIDI IN支持AutoHotkey用例的讨论。作者正在寻找一个程序,可以检测MIDI输入并将其转换为按键。 MIDI输入库,作者的问题的解决方案和发布的代码/补丁AutoHotKey,它实际上实现了您预期的结果。

基本上,它看起来像AutoHotKey,以及这个用户的自定义补丁,将提供您所需要的创建从MIDI键盘到QWERTY键盘的输入信号的映射。您所要做的就是安装、配置和定义映射。


还有别的事吗?

Some of the other answers have given you much more extensive information on MIDI and MIDI programming, in general, but as your post states that doesn't seem to be quite what you are looking for. I would like to help you more if possible, but it would be easier if you could be more specific about the type of information you are looking for. For instance, are you more interested in how to convert a MIDI keyboard's input signals to a QWERTY keyboard's signals, or is your primary interest finding an out of the box solution to your specific problem? What are you looking for that has not yet been addressed?

其他回答

一个很好的。net库,完全支持midi (BASS),请访问http://www.un4seen.com。

而对于另一部分,将键盘midi音符转换为按键等,我会使用AutoItX, ActiveX/COM和DLL接口来实现autoIt。信息和下载,请登录http://www.autoitscript.com/site/autoit/

不需要编写键盘驱动程序。

如果你不想自己做任何编程,只是想解决问题,你可以买一个usb - midi键盘,你可以重新分配任何键来发送一个QWERTY键盘输出信号,而不是一个midi输出,例如M-Audio Axiom Pro

这种方法适用于任何操作系统和任何支持标准usb键盘的计算机,因为midi键盘将自己标识为标准QWERTY键盘。

关于MIDI

你说你“对迷笛一无所知”。一旦掌握了MIDI技术,它就相当简单,但在开始时可能会令人困惑。有一种资源对我理解MIDI的基础(如果你想编程MIDI交互,这当然是必要的)有极大的帮助,那就是为技术恐惧者写的一本叫做MIDI的书。这是一本容易读的书,非常有用。


Pure Data & Max

在我开发交互式多媒体的经验中,我遇到过两个非常相似的程序,它们有助于连接和映射来自任何设备的信号/输入。

这些是Mac环境下的Max和PC环境下的Pure Data。两者都有大量的在线文档和YouTube教程。视频Max/MSP教程1 -使用计算机键盘作为MIDI键盘(ableton风格)演示了Max内置的一个程序,该程序将计算机键盘映射到MIDI键盘的输入(这基本上与您正在尝试做的完全相反)。您可以通过使用相同的模式,但是反转信号/映射来获得预期的结果。


自动热键

AutoHotKey是一个免费的Windows开源实用程序,允许您将设备上的键和按钮重新映射到宏。它本机支持QWERTY键盘,操纵杆和鼠标宏。

但是,我能够找到支持您正在寻找的特定映射的实现。下面两个线程解释了这个过程:

MIDI IN支持AutoHotkey用例的讨论。作者正在寻找一个程序,可以检测MIDI输入并将其转换为按键。 MIDI输入库,作者的问题的解决方案和发布的代码/补丁AutoHotKey,它实际上实现了您预期的结果。

基本上,它看起来像AutoHotKey,以及这个用户的自定义补丁,将提供您所需要的创建从MIDI键盘到QWERTY键盘的输入信号的映射。您所要做的就是安装、配置和定义映射。


还有别的事吗?

Some of the other answers have given you much more extensive information on MIDI and MIDI programming, in general, but as your post states that doesn't seem to be quite what you are looking for. I would like to help you more if possible, but it would be easier if you could be more specific about the type of information you are looking for. For instance, are you more interested in how to convert a MIDI keyboard's input signals to a QWERTY keyboard's signals, or is your primary interest finding an out of the box solution to your specific problem? What are you looking for that has not yet been addressed?

如果你懂Java编程,你可以这样使用:

首先,实现一个javax.sound.midi.Receiver,使用send(..)方法将“Note on”事件映射到你想要的击键。

您需要使用它的getMessage方法获取MidiMessage的内容,并按照您的方式解释它。消息字节的含义可以在MIDI消息中找到。

在接收到某个键盘键的'note on'或'note off'后,您可以通过为它分配KeyEvent类的常量将其映射到您喜欢的键,例如c# 4 -> KeyEvent。VK_A等等。然后,java.awt可以使用这个键代码。Robot的keyPress和keyRelease方法实际发送击键到操作系统,从而发送到其他应用程序。

你可以用一个Teenys微控制器快速破解自己的USB键盘。

事实上,他们有如何制作USB键盘的示例代码。

你可以用两种方法来解决这个问题:

找一架旧钢琴,把开关直接连接到小钢琴上 添加额外的逻辑以连接到MIDI端口和必要的解码。