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


当前回答

以MAME街机游戏为例。他们已经建立了硬件设备,允许输入任意数量的不同项目。例如,iPac将输入设备的信号转换为USB,然后计算机可以使用USB来模拟按键。您可以使用任意组合的输入设备,只要不需要疯狂的编程逻辑就可以,因为解释输入的软件已经完成并经过了良好的测试。

我见过飞行模拟器座舱输入,自定义亭,和投票系统建立在这种方法.....而且价格也很合理!

其他回答

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

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

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

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

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

祝你好运。

在我看来,你不是在寻求如何自己建立它的建议,而是更多地询问已经有什么资源可以实现你想要的。根据你的操作系统,有很多方法可以实现这一点,而不必从头开始编写自己的程序:

MIDI中风

免费的。适用于Mac OS X 10.3及以上版本。这一款特别提供了“使用任何MIDI键盘作为完整的电脑键盘替代品的能力”。

Bome的迷笛翻译

免费/明信片(有点奇怪)。对于Windows 2000及以上版本,以及Mac OS x,它最初似乎更倾向于autohotkey类型的使用,但进一步研究,我认为它可以很好地做你想做的事情。

Max和aka,键盘

免费的。对于Mac OS x来说,这并不是一个“现成的”解决方案,但如果你对基本的设备配置感到满意,它应该不会太糟糕。

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

这不会太难。

我假设你用的是Windows,不过我不确定。我已经用普通的c++编写了一个MIDI排序器http://pianocheetah.com,它允许您使用钢琴键盘来运行命令。没有任何理由你不能做同样的事情来按键 进入键盘输入流。

但是现在来吧。你记得你花了多长时间来学习 首先是键盘,对吧? 你愿意再经历一次吗? 你愿意让你的键盘被污染吗 上面全是一堆愚蠢的关键符号?

你至少要用26个字母,10个数字,11个标点符号, 以及至少12个功能键及其移位状态。 所以有60个键加上移位的状态。 那会消耗掉整整5个八度的音阶。 你会一直做钢琴“跳”。 向触摸打字说再见。

你可能避免了肢体劳损,但你已经制造了另一种劳损 对你自己来说是不同类型的噩梦。

祝你的老板能在上班时给你买一个迷笛键盘。

如果你真的学会了弹钢琴,你就学会了 如何释放压力。用QWERTY键盘。 没有紧张。开始缓慢。