使用钢琴键盘作为电脑键盘

我有RSI问题,并尝试了30种不同的电脑键盘,这些都让我感到痛苦。 弹钢琴不会使我感到痛苦。 我已经弹了大约20年的钢琴没有任何痛苦的问题。 我想知道是否有方法从MIDI键盘捕捉MIDI并输出键盘笔划。 我对MIDI什么都不了解,但是我想要一些关于如何把这个信号转换成按键的指导。

在.NET中有一个完整的midi支持(BASS)的好库,请访问http://www.un4seen.com

另一方面,将键盘midi音符转换为键等等,我会selectAutoItX,ActiveX / COM和DLL接口到autoIt。 信息和下载,请访问http://www.autoitscript.com/site/autoit/

无需编写键盘驱动程序。

我多年来没有做过任何MIDI编程,但是您的基本想法是非常合理的(无双关)。

MIDI是“事件”(或“消息”)的stream,其中最重要的两个是“音符”和“音符关”,它们携带音符编号(0 = C,低于中间C五个八度,通过127 = G五个八度以上G以上的中间C,半音)。 这些事件在速度敏感(“触敏”)的键盘上带有一个“速度”数字,用(你猜对它)的力在0和127之间。

在速度,和弦和踏板之间,我想你可以为钢琴键盘提供一个很好的“打字”界面。 尤其可能是一个非常强大的技术 – 正如我在评论中提到的那样,这就是为什么普通速记员可以使用一个速记机跟上连续数小时的谈话,甚至连顶级打字员也不会这样做 ,通过普通的打字机式键盘可以达到任何时间长度。 和机器速记一样,你需要一个和弦和和弦序列的“字典”。 (你能告诉我以前在机器速记的软件方面工作吗?)

要做到这一点,基本要素是:

  • 接收MIDIinput。 不要试图自己做这个,使用一个库。 编辑 :显然,Java声音API 支持MIDI ,包括从MIDI控制器接收事件。 凉。 此页面也可能有用。
  • 将这些数据转换成你想发送的键盘,例如通过上面提到的字典。
  • 输出击键到电脑。

为了与软件最广泛的兼容,你必须把它写成键盘设备驱动程序。 这是操作系统的一个插件,作为键盘事件的来源,与底层硬件(在你的情况下,钢琴键盘)交谈。 对于Windows和Linux,你可能会想要使用C。

但是,由于您只是生成击键(而不是尝试截取它们,我多年前正在尝试这些击键),所以您可以使用操作系统发送人工击键的任何function。 Windows有一个接口可以做到这一点(可能有几个,我想到的是SendInput但我知道有一些类似的“日记”界面),我相信其他操作系统也是如此。 这对于你的目的来说可能就足够了 – 这是我开始的地方,因为设备驱动程序的路由将会很尴尬,而且你可能不得不使用与Java不同的语言。 (我是Java的忠实粉丝,但操作系统用来与设备驱动程序交stream的接口往往更容易通过C和类似的方式消耗)。


更新 :关于和弦到键盘的“词典”的更多信息:

基本上,字典是一个trie (感谢,@亚当),我们用最长的前缀匹配search。 细节:

在机器速记中,速记员同时按下滑轮机上的多个键,然后全部释放。 他们称这是键盘的“中风” 就像在钢琴上弹奏和弦一样。 笔画经常(但不总是)对应于口语的音节。 就像音节一样,有时一个音符(和弦)有其自身的意义,有时只有意义和下面的音符相结合。 (认为​​“好”与“好”,然后是“再见”)。 虽然他们会受到他们学习的学校的严重影响,但是每个速记员都会有他们自己用来表示他们的意思的“词典”,他们会在工作的过程中不断磨练他们的字典。 字典中有速记部分(简称“steno”)一笔,或多笔。 通常,将会有几个具有相同起始行程的logging,这些行程通过它们的长度和随后的行程来区分。 例如(我不会在这里使用真正的steno,只是占位符),可能有这些条目:

  A =阿尔法
 A / B =字母表
 A / B / C =字母
 A / C =空调
 B =蜜蜂
 B / C =因为
 C =海
 D =狗
 D / D = Dee Dee 

(这些字母不是音符,只是抽象的标记。)

请注意, A启动多个条目,同时请注意,如何翻译C笔划取决于您以前是否看过AB ,或者您是否刚刚开始。

还要注意的是(尽pipe上面很小的样本没有显示),可能会有多种方式来“玩”相同的单词或短语,而不仅仅是一个。 速记员这样做是为了方便从前面的字stream到下一个字,取决于手的位置。 这里有一个明显的音乐比喻,你可以用它来使你的打字stream程更类似于播放音乐,以防止这种情况对你的钢琴演奏产生负面影响,并最大限度地提高实际上帮助RSI的可能性。

在将steno翻译成标准文本时,我们再次使用“最长前缀匹配”search:翻译algorithm从写入的第一个笔划开始,查找以该笔划开始的条目。 如果只有一个条目,而且是一个长的,那么我们可以可靠地说出“这是使用条目”,输出相应的文本,然后用下一个笔划重新开始。 但更可能的是,该笔画开始多个不同长度的input。 所以我们看下一个笔画,看是否有以这两个笔画开头的条目; 等等,直到我们得到一场比赛。

所以用上面的字典,假设我们看到这个序列:

  ACBBCABCABD 

以下是我们如何翻译它:

  1. A是三个不同长度的条目的开始; 看下一笔: C
  2. A/C只匹配一个条目; 输出“空调”,然后用下一行程重新开始: B
  3. B开始两个条目; 看下一笔: B
  4. B/B不启动任何东西; 取最长的前一场比赛( B )并输出(“蜜蜂”)
  5. 有输出B =“蜜蜂”,我们的缓冲区仍然有一个B笔划。 它开始两个条目,所以看下一个笔画: C
  6. B/C匹配一个条目; 输出“因为”,并开始新的下一个笔画: A
  7. A开始三个条目; 看下一个笔画: B
  8. A/B开始两个条目; 看下一个笔画: C
  9. A/B/C只能匹配一个条目; 输出“字母”,并开始新的下一个笔画: A
  10. A开始三个条目; 看下一笔: B
  11. A/B开始两个条目; 看下一个笔画: D
  12. A/B/D不匹配任何东西,所以取最早的匹配( A/B )并用它输出“字母”。 这使我们仍然在缓冲区。
  13. D开始两个条目,所以我们通常会看下一个笔画 – 但是我们已经处理了所有的笔画,所以要单独考虑。 孤立地说,它翻译为“狗”,所以输出。

以上要注意的方面:

  • 你有一个你已经阅读但尚未翻译的笔画的缓冲区。
  • 你总是希望匹配最多的笔触对一个单一的条目,你可以。 A/B应翻译为“字母”,而不是“阿尔法”和“蜜蜂”。
  • (上面没有显示)你可能有不能翻译的笔画序列,因为它们不匹配字典中的任何东西。 (Steno人使用名词“untranslate” – 例如,用我们的字典,笔画E将是一个“untranslate”)。
  • (以上未显示)一些速记理论允许同一套笔画根据更广泛的上下文来表示不止一件事情。 斯泰诺人称之为“冲突”。 你可能想要在你的项目中禁止他们,事实上,当速记人员被速记员手动翻译的时候,冲突是没有问题的,因为他们只知道在句子的哪里是正确的select,机器翻译的无冲突理论特别出现,以避免由此产生的翻译文本和“修复”冲突。
  • 实时翻译(你会这样做)意味着如果你收到一个部分的匹配,你会想要等待下一个和弦 – 但可能只是暂停,在这一点上尽可能地翻译缓冲区中的内容。 (或者,也许你不想暂停,这是你的电话。)
  • 可能最好有一个说“无视以前的中风”
  • 可能最好有一个说“完全清除缓冲区而不输出任何东西”

考虑做一些模拟usb(或ps / 2?)键盘的硬件。 您将不再依赖特定的操作系统或特定的操作系统API。 硬件解决scheme将经受住时间的考验。 当其他人正在运行Windows 11时,不要在Windows 7中使用旧API! Arduino很容易学习。

  • Arduino的MIDI硬件可以从现货供应
  • Arduinos已经被用来模拟键盘设备

有大量的信息和帮助Arduino。 这是一个为新手build立的硬件黑客平台。 现在只有Google推动Arduino才会变得更大。

编辑:虚拟USB键盘软件和硬件

在我听起来,你似乎没有多lessbuild议如何build立这个自己,并更多地问什么资源已经在那里完成你想要的。 根据您的操作系统,有很多方法可以完成这个任务,而无需从头编写自己的程序:

MIDI笔画

自由。 对于Mac OS X 10.3及更高版本 。 这一款专门配备了“能够使用任何MIDI键盘作为全面的电脑键盘替代品”。

Bome的MIDI翻译器

免费/明信片(有点奇怪)。 适用于Windows 2000及更高版本,以及Mac OS X。 它最初似乎更适合于AutoHotkeytypes的使用,但进一步看,我认为它可以做你想做的很好。

最大和aka.keyboard

自由。 对于Mac OS X。 不完全是“开箱即用”解决scheme,但如果您对基本设备configuration感到满意,则不会太糟糕。

您可以在MIDI DotNet的 .NET中使用源代码示例访问硬件。

VB 5/6-Tipp 0521:MIDI-Töneerzeugen (Visual Basic 6.0,某处也是.NET版本)中,作为源代码创buildMIDI音符数据stream的完整工作示例。

一个模拟键盘笔画的方法是在VB 5/6-Tipp 0155:Tastaturereignisse simulieren (Visual Basic 6.0,某处是.NET版本)

并认识击键描述Tipp上传:VB.NET 0266:Globaler KeyHook

在这里输入图像说明

然后,为钢琴演奏者使用一个良好的工作matrix Timo Boehme www.goldengel.ch

在钢琴和当你是一个好的球员,你可以有10个手指在键盘上,如果matrix是可用的,你可以更快,任何电脑键盘用户,我认为。 🙂

在这种情况下,如果我理解你的问题,这不应该是一件大事。

我在大学学习钢琴的表演,然后进入交互devise,编程和使用Vim ,所以实际上我花了很多时间来做这样的事情。

您可以在Linux中使用多媒体艺术家的graphics化编程语言“ Pure Data ”以及Alex Andre的x11key外部程序,从而使得这一工作非常快速。

在Mac上,您可以使用MidiStroke 。 我相信Windows上的方法涉及到MidiOx和AutoHotKey工具。 另一次我有一个使用Max / MSP的Java插件的版本。 我相信Patrice Colet为纯数据制作了一个外部的窗口,但是我似乎无法再find它了。 此外,还有一个MaxMSP的外部可以在Windows上执行此操作。 最后,非自由但真棒调整器可以做你想做的 – 看function页面。

当我得到它的工作,我从来没有坚持下去,因为我不能停止与布局工具。 虽然我的电子键盘上有我的显示器,但这很酷! 祝你好运。

关于MIDI

你说你对MIDI一无所知。 一旦你掌握MIDI技术,MIDI技术是相当直接的,但是一开始可能会引起混淆。 对于理解MIDI基础(当然,如果你想编程MIDI交互是必要的),对于我来说,这个资源是非常有用的资源之一,是一本叫做技术恐惧症的MIDI的书 。 这是一本容易阅读的书,非常有帮助。

纯数据和最大

根据我开发交互式多媒体的经验,我遇到了两个非常类似的程序,可以方便地连接和映射来自任何设备的信号/input。

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

AutoHotkey的

AutoHotKey是一个免费的Windows开源工具,允许您将设备上的按键和button重新映射到macros。 它本身支持QWERTY键盘,游戏杆和鼠标macros。

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

  1. 在AutoHotkey中支持MIDI IN的用例讨论。 作者正在寻找一个能够检测MIDI INinput并将其转换为按键的程序

  2. MIDIinput库 ,作者的问题的解决scheme和发布的代码/修补程序AutoHotKey实际上实现您的预​​期的结果。

基本上,它看起来像AutoHotKey,以及此用户的自定义修补程序,将提供您需要创build从MIDI键盘映射到QWERTY键盘的input信号。 所有你需要做的就是安装,configuration和定义你的映射。

还要别的吗?

一般来说,其他一些答案已经给了你更多关于MIDI和MIDI编程的广泛信息,但是正如你的文章所说的那样,看起来并不是你正在寻找的东西。 如果可能的话,我想尽可能地帮助你,但是如果你能够更加具体地了解你正在寻找的信息types,那将会更容易。 例如,你是否更感兴趣的是如何将MIDI键盘的input信号转换成QWERTY键盘的信号 ,或者是你的主要兴趣在于find一个开箱即用的解决scheme解决你的特定问题? 你在找什么还没有解决?

你可以使用Teenys微控制器很快破解自己的USB键盘。

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

你可以通过这两种方式来解决:

  1. 拿一架旧钢琴,直接把开关连接到teensy

  2. 添加额外的逻辑连接到MIDI端口和必要的解码。

实际上,我刚刚工作了一段时间,试图将摇滚乐鼓的input捕捉到我的电脑(制作一个小小的Java自制鼓模拟器)。无论如何,我在这里问了一个关于这个问题时间延迟问题 (那里有轮询代码以及我正在尝试做的事情)。 如果我能find我的程序,我可以给你的代码,它使用第三方API( JInput )。

祝你好运。

试试Bome的MIDI翻译器 。

它可以跨平台工作,可以轻松地将任何MIDIinput转换为按键,快速设置和configuration,并且可以免费供个人使用。

有一个教程, 快速提示:MIDI翻译 – MIDI到击键 ,如何轻松设置:

基本上,你可以做的事情有无限的可能性,包括和弦和修饰键。 我用我的现场音响装备来控制我的DAW,用我的钢琴,从来没有问题。

在Java中,您可以使用JMF(Java Media框架)来转换MIDI信号。 键盘devise的基本function很简单,就是用户界面; 并经常使用的字符/符号方便。

Java声音资源中的示例代码和API :示例:数字信号处理(DSP)有助于理解如何处理信号。

更多的参考资料:

  • 用控件处理audio
  • 数字audio信号处理,第2版

凯西有最好的答案。 我已经添加了一个评论,并upvoted它。 这种软件属于设备驱动程序或embedded式系统。 设备驱动程序要复杂得多,而且不能移植到其他操作系统。 有关参考,请参阅Linux上的Winmodems问题。

通过将您的代码放入embedded式系统,您可以将其移植到任何带有USB端口的MIDI设备以及任何接受USB键盘的计算机上。

有一个叫做GlovePIE的程序。 你可以用简单的脚本语言来编程,我相信它支持MIDI。 我不确定这是否符合“Java”类别,但它仍然是一个伟大的计划。 我用它来控制使用PS3控制器的机器人。 这是非常强大的。

许多键盘都有一个串行端口( RS-232 )连接器,用于向计算机发送MIDI信号。 我使用称为Girder的程序将串行端口通信转换为键盘笔划。

梁有一个“映射”function,让您将每个键,一个接一个,映射到相应的按键。

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

只要学习速记!

从你们所有的讨论中可以清楚的看出来。 从技术的angular度来看,你不想重新发明任何车轮。 但是,一旦你build立了联系(这个问题提出了什么问题)并开始工作,你仍然有大部分工作要做,你必须训练你的大脑。 你必须发明最聪明,最有效的方式来做到这一点 – 一个完全脱离计算机技术的devise问题。 你或我们任何一个人都会失败。

幸运的是,这个问题已经通过几个世纪的成熟得到了解决和磨练。

学习速记!

是的,这会让你回到一些杰克。 但是,你自己的时间是几百小时,最后是一个不太好的结果? 另外, 维基百科的速写文章说,它看起来更像是一个钢琴键盘。

当然,除非你想有一个sideshow效果。 我不得不承认,我从来没有想过这种可能性,看到有人用钢琴键盘敲出一段文字真的很有意思!

你可以开始与USB键盘与触摸板 (或指点杆会更符合人体工程学?),使用珩客来翻译它(我相信它可以configuration为让非字母键保留其function,因为他们是至关重要的编程),或者按照线程Re:Plover键盘滚动你自己的USB速记键盘,或者购买一个stenotype 。

祝你好运!

看看MAME街机游戏。 他们已经build立了硬件设备,允许从任何数量的不同项目input。 例如, iPac将来自input设备的信号转换为USB,然后计算机可以使用该USB来模拟密钥。 您可以使用任何方式组合的input设备,看起来很舒服,不需要任何疯狂的编程逻辑 – 因为解释input的软件已经完成并经过良好testing。

我已经看到了飞行模拟器的驾驶舱input,自定义信息亭和投票系统在这种方法build立…..和价格是正确的!

没有真正的程序相关,但我可以提供一些关于如何pipe理RSI的build议。

有些定时器会在整天引入频繁的微小rest的同时加快工作速度。 如果你已经研究了RSI,我相信你已经听说过微分。 这对于pipe理和防止再次发生至关重要。 一个免费的程序是Workrave

给QWERTY启动并尝试Dvorak 。 这是一个程序员德沃夏克键盘布局 。 德沃夏克在家庭行上使用最多的字符,而QWERTY则没有。 所以使用德沃夏克将减less由于不必“达到”字母造成的压力。

如果你还没有使用它,把那个“自然的”键盘从衣柜里拿出来。 input很轻。 注册按键的最低限度会做。

尝试将咖啡限制在每天一到两杯。 过量的咖啡因会让你感觉不到疲倦,容易忘记你有RSI。

过量的酒精会破坏你的身体所需的睡眠。 一个良好的夜间rest是驯服RSI的关键。

使用主动孤立的stetching拉伸。 一个很好的例程描述在手腕,手&手指伸展例程 – 主动隔离拉伸

学习如何与鼠标灵巧。 确保鼠标devise为双手使用,并有易于点击的button。

使用数位板作为您的主要input设备。 Wacom使一些体面的便宜的平板电脑 。

祝你好运!

要解决这个问题,你需要一些东西:

  1. 一种从键盘上捕捉MIDI数据的方法。 根据接口:MIDI接口(经典)或USB MIDI接口(现代),最有可能的接口是电脑,因为它提供了最多的select。 USB主机微控制器不像使用电脑那么简单。

  2. 将MIDI数据转换成按键的scheme。 就像一个用户指出的那样,和弦是要走的路,因为琴键的数量不取决于钢琴键的数量。

  3. 一种将密钥注入操作系统的方法。 这将需要一个低级别的驱动程序是准确的。 我已经使用了将键盘和鼠标数据注入到Windows 7中的应用程序的应用程序,它可以是片状的,取决于应用程序当前是否在焦点。 这是界面中最难的部分。 可能的工作是创build一个也有串行接口的HID USB键盘微控制器。

串行接口将创build一个虚拟串行端口。 读取MIDI数据并产生击键的软件可以将串行消息发送到虚拟串行端口。 微控制器会发送一个按键,所以它看起来像一个标准的键盘input。 这将允许连接MIDI端口和USB MIDI键盘。

嗯,与这种types的界面,你也可以模拟一个鼠标,并使用一些钢琴键设置鼠标轴和button。 压力可以用来确定鼠标指针的速度。 所以你可以消除鼠标。 这种方法的另一个好处是您连接的任何types的input设备都可以与虚拟串行端口通信以产生键盘和鼠标事件。 所以如果你想添加诸如鼓式踏板或游戏杆之类的其他硬件,那么调整与串行接口对话的程序是很重要的。

上面的另一个例子就像上面用到的一个Arduino一样,还包括Sparkfun的USB Host Shield来处理基于USB的音乐键盘。 这使得Arduino可以被编程为引导加载程序芯片中的键盘或键盘鼠标组合,并允许设备作为基于USB的音乐键盘的USB主机。 那么你被覆盖了这两种types。 尽pipe如此,我仍然认为虚拟串口方法更加灵活,从长远来看更容易编程。 Arduino设备将比桌面程序或服务更难改变。

还有另一种可能性:单手键盘已经存在。 我已经看过他们的video,但你必须确定是否这些伤害你的手。

你的疼痛症状很可能是心身症。

我曾经想过,在玩电脑游戏一个漫长的夜晚之后,我的手腕里有RSI好几个月了。 物理治疗没有帮助。 当我读到医生写的一篇文章解释RSI,腕pipe痛,背痛和IBS通常可能是心身疾病的时候,尤其是那些处于压力下的人,疼痛几乎消失了(这有助于观察我的手腕放松,血液stream向它,因为文章说自主血pipe收缩是疼痛的直接原因)。 事实上,当时我的压力很大。

It should be fairly easy using something like the .NET DirectSound interface to hook into an MIDI device. You will need to identify your target MIDI device and then get the code to listen in on the incoming messages (there are articles about doing this via Google).

Since you are using the MIDI in as a keyboard there are basically only two MIDI messages that you need to detect, namely note on and note off. The MIDI message is three data bytes specifying the command, the note and the velocity. The note off is just the note number (sometimes 'bad' MIDI stacks send a note on with zero velocity which you also have to expect).

Once you have the messages translating them the keyboard output should be fairly simple from .NET.

There is plenty of advice in the other answers about the technicalities; I just wanted to give you an idea of the actual MIDI messages. 祝你好运!

You'll get better and happier results (regardless what operating system and/or DAW program you like to use) by playing any external MIDI keyboard as a controller through your sound card. Then route that into your GB software (or whatever) and tone generate the many sounds they have supplied you that way in real-time.

If your sound card does not support MIDI I/O's (ins / outs /thrus), that's not a problem. You can consider researching and investing in an external MIDI table top converter. Many are equipped to further convert MIDI outs to USB 2.0 (by- passing an existing sound card altogether).

For example: it's pretty tough getting "human like" grace note results via a Z and X change key option using a computer keyboard and pencil tool. When, instead, your own fingers can just play that with a MIDI keyboard from its own physical octave register ranges—immediately!

I realize budgetary constraints may be involved. But, some of these seemingly cheap "Casio" type 5 octave keyboards sold at Radio Shack for under $100.00 US Dollars (*or less) is all you would need (plus, some of their on-board sound patches and sequencer modules sound and handle amazingly well for other things too).

RadioShack MIDI keyboard options .

As for external MIDI converters for existing sound cards, I've run some Google searches for you as follows with Mac platforms specifically in mind:

A lot of this external MIDI conversion information may be cumbersome to you at first, so I've broken down things more as "user friendly" for your considerations & budget:

  • MIDI sound cards

There's nothing wrong with facilitating virtual keyboards as VST 's when using DAW . They have their place.

But, you sound like an accomplished keyboardist. So, why not consider the external MIDI conversion / keyboard options I just mentioned for yourself?

Good luck and I hope this gave you some ideas that can and will work for you!

If you don't want to do any programming yourself but just want the problem solved you can just buy a USB-MIDI-keyboard where you can re-assign any key to send a QWERTY keyboard output signal instead of a MIDI-output, for example M-Audio Axiom Pro

This method will work with any OS and any computer that supports standard USB-keyboards since the MIDI-keyboard will identify itself as a standard QWERTY keyboard.

You can use a simple AutoIt script to both read MIDI events, see MIDI Input .

You'll also need MIDI UDF and simulate key presses .

Reading MIDI events should be easy, but different MIDI controllers (instruments) have different features. Try to find out what your MIDI piano can do first, then see how you can best map those features to simulated QWERTY -keyboard presses.

If you want, you could have something on screen or in the tray to help you see what you are doing (that is, for Shift , Ctrl and Alt simulation).

You might take a look at chorded keyboards . They have the advantage that you don't need to write a driver for them before you can use them, and some are similar to the layout of a piano keyboard.

If you know coding in Java, you could use this way:

First, implement a javax.sound.midi.Receiver with a send(..) method that is mapping the 'Note on' events to keystrokes like you want.

You would need to get the MidiMessage's content with its getMessage method and intepret it in your fashion. The meaning of the message bytes can be found in MIDI Messages .

After receiving a 'note on' or 'note off' for a certain keyboard key, you may map that to a key you like by assigning it a constant of the KeyEvent class, something like C#4 -> KeyEvent.VK_A and so on. This key code can then be used by java.awt.Robot 's keyPress and keyRelease methods to actually send the keystroke to the OS and thus to other applications.

I know exactly how you feel. Doing crazy keyboard coding commands all-day makes my hands hurt.

A piano won't do the job (your better off getting a Dorvak keyboard ). The best solution would be mental telepathy or at this moment in time voice control.

I find Arthro-Aid Direct cream is good and Wild Blend works OK as well.

The other thing I've noticed is that the mouse is also majorly to blame, most are un-ergonomic and clicking so much cause RSI and CTS . To overcome this I occasionally use auto mouse clickers, for example Auto Mouse Clicker .

I know of patents with mouse's as grips that you squeeze, I'm keen to buy.

PS: Get your income protection insurance before you see a doctor about your hands!

And don't program on weekends:)

I agree with Brian O'Dell's answer – if this were my project, I'd do it in hardware. It has the advantage of being platform and hardware independent – your box replaces the need for a MIDI-USB interface and a PC API.

mbed is a fast-prototyping platform that is very easy to learn, and has multiple advantages over Arduino IMHO (online compiler, 512 KB flash, 96 MHz, C++ language). It has a USB keyboard interface and a USB Midi interface pre-written for you.

The community is very friendly and willing to help, and there are a lot of existing projects using both MIDI and USB hid emulation – search Youtube for "mbed MIDI" or similar.

If you use Linux have a take at Footware .

It should be exactly what you're looking for – if you adjust the MIDI pitches to a keymapping of your liking…

I never thought this could be useful for anyone but me ;o)

To type faster maybe it's an idea to 'play' the consonants on the left hand and the vowels on the right (or vice versa). You don't need a key for every consonant, because you could combine them like:

 BCDGHJKLMNPQRSTWXYZ cc# dd# eff# g c+d ... 

You can leave two close keys out (like c# + d , this doesn't play easily). You can even leave the black keys out.

For vowels it is easy:

AEIOUY

cdefga

However, also think about using multiple keystrokes: like c# = aa , d# = ee , etc.

You can do the same trick with the consonants (having combination of keys for st, sp, etc.)

You can play consonants and vowels at the same time, bind them together alternately or with priority (consonants, then vowels, etc.)

You probably will have to learn to type again, but I'm sure you can do a lot quicker than a normal typing person can.

Use another octave for digits and special characters, use a switch for shift, use an easy to play a combination of keys for space (like two cs with both left and right hand, make sure it doesn't mean (a) character(s)).

Also think about using a pedal which can have values of 0-127. You could use it as shift or space too … or backspace/enter.

I hope this give some new ideas and good luck with your project.

The answers to your question are already on this page, but I'd like to make some additional inputs.

First, I'm not convinced typing on a piano keyboard instead will stop the pains. In this regard, I'll suggest you look into something like Nuance Dragon – Naturally Speaking for your typing.

Secondly, if you insist on going ahead with this, you'll probably need to go with Nasebnbaar's (though I don't agree it'll be any faster) and Brian's suggestion. This is probably something you should contact an engineer to do properly, but if you must do it yourself, you'd be better off asking for directions on Electrical Engineering – Stack Echange.

Thirdly, if you simply want to understand how MIDI files work , how to read them programmatically , and how to simulate a keyboard stroke , then good luck 😉

Lastly, I'd like to get a copy as well if you eventually decide to go with the second option 🙂