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


当前回答

许多键盘都有一个串行端口(RS-232)连接器,向计算机发送MIDI信号。我使用一个名为“梁”的程序将串口通信转换为键盘敲击。

“梁”有一个“映射”功能,允许您将每个键一个接一个地映射到相应的击键。

这可能是你正在寻找的简单解决方案!

其他回答

如果你使用Linux,可以去Footware看看。

它应该正是你所寻找的-如果你调整MIDI音高到你喜欢的键映射…

我从没想过这对除了我以外的任何人都有用;

如果你懂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方法实际发送击键到操作系统,从而发送到其他应用程序。

要解决这个问题,你需要做一些事情:

A way to capture MIDI data from your keyboard. Depending upon the interface: MIDI interface (classic) or USB MIDI interface (modern) the most likely interface is to a computer as it provides the most options. USB host microcontrollers are not as simple as just using a computer. A scheme to convert MIDI data into keystrokes. Like one user pointed out, chords are the way to go as the number of keys will not be dependent upon the number of piano keys. A way to inject a key into the operating system. This will require a low-level driver to be accurate. I have played around with applications that inject keyboard and mouse data into applications in Windows 7, and it can be flaky and depend upon whether an application is currently in focus. This is hardest part of the interface. What may work is to create a HID USB keyboard microcontroller that also has a serial interface.

串行接口将创建一个虚拟串行端口。读取MIDI数据并产生击键的软件可以向虚拟串行端口发送一个串行消息。微控制器将发送一个击键,使它看起来像一个标准的键盘输入。这将允许同时连接MIDI端口和USB MIDI键盘。

Hmmm, with this type of interface you could also simulate a mouse and use some piano keys setup for the mouse axis and buttons. The pressure could be used to determine mouse pointer velocity. So you could eliminate the mouse as well. Another benefit of this approach is any type of input device you connect could talk to the virtual serial port to produce keyboard and mouse events. So if you wanted to add other hardware such as drum pedals or a joystick it would be a matter of adjusting the program that talks to the serial interface.

Another take on the above is like some posted above to use an Arduino, but also include USB Host Shield from Sparkfun to handle USB based music keyboards. This allows the Arduino to be programmed as a keyboard or keyboard mouse combo in the boot loader chip and allows the device to act a USB host for the USB based music keyboard. Then you are covered for both types. Although, I still think the virtual serial port method is more flexible and would be easier to program in the long run. The Arduino device will be harder to change than a desktop program or service.

还有另一种可能: 单手和弦键盘已经存在。我看过关于它们的视频,但你必须确定它们是否会伤害你的手。

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

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

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

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

实际上,我在这个工作了一段时间前,试图捕捉摇滚乐队鼓输入到我的计算机(做一个小Java自制鼓模拟器)无论如何,我问了一个问题在这里,时间延迟问题(有轮询代码在那里,以及我试图做的事情。)如果我能找到我的程序,我可以给你的代码,它使用第三方API (JInput)。

祝你好运。