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

时间:2011-05-08 14:36:44

标签: keyboard midi

我遇到了RSI个问题并尝试了30种不同的计算机键盘,这些都给我带来了痛苦。弹钢琴不会让我感到痛苦。我已经弹钢琴大约20年没有任何疼痛问题。我想知道是否有办法从MIDI键盘捕捉MIDI并输出键盘敲击。我对MIDI一无所知,但我想要一些如何将这个信号转换成按键的指导。

34 个答案:

答案 0 :(得分:430)

答案 1 :(得分:184)

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

Arduino有很多信息和帮助。它是为新手打造的硬件黑客平台。它现在只会变Google is pushing Arduino.

编辑:虚拟USB键盘softwarehardware

答案 2 :(得分:111)

对我而言,听起来像是在寻找关于如何自己构建这个的建议,而是更多地询问已经有哪些资源来实现你想要的东西。根据您的操作系统,有许多方法可以实现这一点,而无需从头开始编写您自己的程序:

MIDI Stroke

免。对于 Mac OS X 10.3及更高版本。这个特别提到“能够使用任何MIDI键盘作为完整的电脑键盘更换。”

Bome's MIDI Translator

免费/明信片(这有点奇怪)。对于 Windows 2000及更高版本,以及Mac OS X 。它最初似乎更倾向于AutoHotkey类型的使用,但进一步看,我认为它可以做你想要的。

Max and aka.keyboard

免。对于 Mac OS X 。不完全是“开箱即用”的解决方案,但如果您对基本的设备配置感到满意,那应该不会太糟糕。

答案 3 :(得分:49)

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

一个完整的工作样本作为创建MIDI音符数据流的源代码在 VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0,某处也是.NET版本)

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

识别按键是在 Tipp-Upload: VB.NET 0266: Globaler KeyHook 中描述的。

Enter image description here

然后,只需为钢琴演奏者使用一个好的工作矩阵 Timo Boehme www.goldengel.ch

在钢琴上,当你是一个好的玩家时,你可以在键盘上放10个手指,如果矩阵可用,你可以比我想的任何电脑键盘用户快得多。 : - )

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

答案 4 :(得分:41)

我在大学学习钢琴演奏,然后进入交互设计,编程和使用Vim,所以我实际上花了很多时间对这样的事情进行原型设计。

通过使用多媒体艺术家的图形编程语言“Pure Data”以及Alex Andre外部的x11key,您可以在Linux中快速完成此工作。

在Mac上,您可以使用MidiStroke。我相信Windows上的方法涉及MidiOxAutoHotKey工具。在另一个时间我有一个版本使用Java插件Max/MSP。我相信Patrice Colet为Pure Data创建了一个外部窗口,但是我似乎无法找到它。此外,还有an external for MaxMSP可以在Windows上执行此操作。最后,非自由但令人敬畏的Osculator可以做你想做的事 - 请参阅功能页面。

当我开始工作时,我从来没有坚持过,因为我无法停止使用布局工具。不过只是把我的显示器放在电动键盘上真酷!祝你好运。

答案 5 :(得分:37)

关于MIDI

你说你“对MIDI一无所知”。一旦掌握了MIDI技术,它就相当直接,但一开始就会让人感到困惑。对我来说理解MIDI基础非常有用的资源之一(如果你想编写MIDI交互,这当然是必要的)是一本名为MIDI for the Technophobe的书。这是一本易读的书,非常有帮助。


Pure Data&最大

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

对于Mac环境,这些是Max,对于PC环境,这些是Pure Data。两者都有大量的在线文档和YouTube教程。视频 Max/MSP Tutorial 1 - using your computer keyboard as midikeyboard (ableton style) 演示了一个用Max构建的程序,它将计算机键盘映射到MIDI键盘的输入(这基本上与您尝试做的完全相反)。您可以使用相同的模式获得预期的结果,但可以反转信号/映射。


AutoHotkey的

AutoHotKey是一款适用于Windows的免费开源实用程序,可让您将设备上的键和按钮重新映射到宏。它原生支持QWERTY键盘,游戏杆和鼠标宏。

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

  1. MIDI IN support in AutoHotkey ,对用例的讨论。作者正在寻找一个程序,可以检测MIDI IN输入并将其转换为按键

  2. MIDI input library ,作者问题的解决方案以及AutoHotKey发布的代码/补丁实际上实现了您的预期结果。

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


    还有别的吗?

    一般来说,其他一些答案已经为您提供了有关MIDI和MIDI编程的更多信息,但正如您的帖子所说,这似乎并不是您想要的。如果可能的话,我想帮助你更多,但如果你能更具体地了解你正在寻找的信息类型,那将会更容易。例如,您是否对如何将MIDI键盘的输入信号转换为QWERTY键盘的信号更感兴趣,或者您的主要兴趣找到开箱即用的解决方案

答案 6 :(得分:27)

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

事实上,他们有关于如何make a USB keyboard的示例代码。

您可以采用以下两种方式:

  1. 拿一把旧钢琴并将开关直接连接到青少年

  2. 添加附加逻辑以连接MIDI端口并进行必要的解码。

答案 7 :(得分:24)

实际上,我刚刚研究过这个问题,尝试将Rock Band鼓输入到我的计算机中(制作一个小型Java自制鼓模拟器)无论如何,我在这里问了一个问题, { {3}} (那里有轮询代码,以及我试图做的事情。)。如果我能找到我的程序,我可以给你代码,它使用第三方API(Time delay problem)。

祝你好运。

答案 8 :(得分:23)

尝试Bome's MIDI translator

它适用于跨平台,可以轻松地将任何MIDI输入转换为键盘,快速设置和配置,此外它还可供个人使用。

有一个教程, Quick Tip: MIDI Translation – MIDI to Keystrokes ,关于如何轻松设置它:

基本上,你可以做的事情有很多种,包括和弦和修饰键。我用我的现场音频设备来控制我的DAW使用我的钢琴并且从未遇到过问题。

答案 9 :(得分:18)

在Java中,您可以使用JMF(Java Media框架)来转换MIDI信号。 键盘设计的基础是易于使用,即用户界面;并经常使用charcter / symbol。

Java Sound Resources: Examples: Digital Signal Processing (DSP) 中的示例代码和API有助于了解如何处理信号。

更多参考资料:

答案 10 :(得分:16)

.NET中具有完全midi支持(BASS)的好库,请转到http://www.un4seen.com

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

无需编写键盘驱动程序。

答案 11 :(得分:15)

凯西有最好的答案。我已添加评论并对其进行了投票。这种软件属于设备驱动程序或嵌入式系统。设备驱动程序要复杂得多,并且无法移植到其他操作系统。有关参考,请参阅Linux上的Winmodems问题。

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

答案 12 :(得分:15)

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

Girder具有“映射”功能,可让您逐个将每个键映射到相应的键击。

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

答案 13 :(得分:15)

有一个名为GlovePIE的程序。您可以使用简单的脚本语言对其进行编程,我相信它支持MIDI。我不确定这是否符合“Java”类别,但仍然是一个很棒的程序。我用它来控制使用PS3控制器的机器人。它非常强大。

答案 14 :(得分:12)

学习速记!

从您的所有讨论中可以清楚地看出来。从技术角度来看,您不想重新发明任何车轮。但是,一旦你建立了连接(这个问题是什么问题)并且正在工作,你仍然需要完成大部分工作:你必须训练你的大脑。你必须发明最聪明,最有效的方法 - 完全脱离计算机技术的流变的设计问题。你或我们任何人都会失败。

幸运的是,这个问题已经解决了几个世纪的成熟问题并得到了磨练......

学习速记!

是的,这会让你回到一些杰克。但是,你自己的时间数百小时的价值,最终是一个不太有利的结果呢?此外,the stenography Wikipedia article说,“它看起来更像钢琴键盘。”

当然,除非您希望产生副作用。我不得不承认,我从来没有想过这种可能性,看到有人从钢琴键盘上掏出一段文字,这真是真的很有趣!

你可以从USB keyboard with touchpad开始(或者pointing stick会更符合人体工程学吗?),使用Plover进行翻译(我确信它可以配置为让非 - 通信键保留其对编程至关重要的功能),或者,按照 Re: Plover keyboard 线程滚动自己的USB速记键盘,或者购买a stenotype

祝你好运!

答案 15 :(得分:11)

看看MAME街机游戏。他们构建了硬件设备,允许从任意数量的不同项目输入。例如,iPac将来自输入设备的信号转换为USB,然后计算机可以使用它来模拟密钥。您可以使用任何方式安排的输入设备的任何组合,这些输入设备看起来很舒服,不需要疯狂的编程逻辑 - 因为用于解释输入的软件已经完成并且经过了充分测试。

我已经看到了用这种方法制造的飞行模拟器驾驶舱输入,定制信息亭和投票系统.....价格合适!

答案 16 :(得分:10)

与程序无关,但我可以就如何管理RSI提供一些建议。

有些计时器可以让您的工作在整天进行,从而引入频繁的微休息。如果你研究了RSI,我相信你已经听说过微休息。它们对于管理和防止再次发生至关重要。免费计划是Workrave

给QWERTY启动并尝试Dvorak。这是一个programmer Dvorak keyboard layout。 Dvorak在主页上有最常用的字符,而QWERTY没有。所以使用Dvorak可以减少由于不必“到达”字母所造成的压力。

如果您还没有使用它,请将“自然”键盘从壁橱中拿出来。键入非常轻微。注册击键的最低要求就是。

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

过量饮酒会扰乱您的身体自我治愈所需的睡眠时间。晚安休息对于驯服RSI至关重要。

使用主动隔离式拉伸进行拉伸。 Wrist, Hand & Finger Stretching Routine - Active Isolated Stretching 中描述了一个很好的例程。

了解如何使用鼠标灵巧。确保鼠标设计为双手使用,并具有易于点击的按钮。

使用数位板作为主要输入设备。 Wacom makes some decent inexpensive tablets

祝你好运!

答案 17 :(得分:10)

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

  1. 一种从键盘捕获MIDI数据的方法。根据界面:MIDI接口(经典)或USB MIDI接口(现代),最可能的接口是计算机,因为它提供了最多的选项。 USB主控微控制器并不像使用计算机那么简单。

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

  3. 将密钥注入操作系统的方法。这将要求低级驱动程序准确。我已经玩过将键盘和鼠标数据注入到Windows 7中的应用程序中的应用程序,它可能不稳定,取决于应用程序当前是否处于焦点状态。这是界面中最难的部分。可能有用的是创建一个同样具有串行接口的HID USB键盘微控制器。

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

    嗯,使用这种类型的界面,您还可以模拟鼠标并使用鼠标轴和按钮的一些钢琴键设置。压力可用于确定鼠标指针速度。所以你也可以消除鼠标。此方法的另一个好处是,您连接的任何类型的输入设备都可以与虚拟串行端口通信以生成键盘和鼠标事件。因此,如果您想添加鼓踏板或操纵杆等其他硬件,则需要调整与串行接口通信的程序。

    上面的另一个观点就像上面发布的一些使用Arduino,但也包括来自Sparkfun的USB Host Shield来处理基于USB的音乐键盘。这允许Arduino在引导加载程序芯片中被编程为键盘或键盘鼠标组合,并允许设备作为基于USB的音乐键盘的USB主机。然后,您可以获得两种类型的保障。虽然,我仍然认为虚拟串口方法更灵活,从长远来看更容易编程。 Arduino设备将比桌面程序或服务更难更改。

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

答案 18 :(得分:8)

您的疼痛症状很可能be psychosomatic

我曾经以为在经过漫长的电脑游戏之夜后,我的手腕已经RSI了好几个月。物理治疗没有帮助。在我读了医生写的一篇文章解释RSI,腕管,背痛和IBS经常是心身,特别是在压力很大的人中,疼痛几乎消失了(这有助于我的手腕放松和血液流向它,因为文章说自主神经血管收缩是疼痛的直接原因)。事实上,我当时遭受了很多压力。

答案 19 :(得分:7)

使用类似.NET DirectSound接口的东西挂钩到MIDI设备应该相当容易。您需要识别目标MIDI设备,然后获取代码以收听传入的消息(有关于通过Google执行此操作的文章)。

由于您将MIDI输入用作键盘,因此基本上只需要检测两条MIDI信息,即音符开和音符关。 MIDI信息是三个数据字节,指定命令,音符和力度。音符关闭只是音符编号(有时候'坏'的MIDI堆栈会以零速度发送音符,你也可以期待它。)

一旦你有消息翻译它们,键盘输出应该是非常简单的.NET。

关于技术性的其他答案中有很多建议;我只是想让你了解实际的MIDI信息。祝你好运!

答案 20 :(得分:7)

通过声卡播放任何外部MIDI键盘作为控制器,您将获得更好,更快乐的结果(无论您喜欢使用哪种操作系统和/或DAW程序)。然后将其路由到您的GB软件(或其他)和音调,生成他们实时提供给您的许多声音。

如果您的声卡不支持MIDI I / O(ins / outs / thrus),那不是问题。您可以考虑研究和投资外置MIDI桌面转换器。许多都配备了进一步将MIDI输出转换为USB 2.0(完全通过现有的声卡)。

例如:使用计算机键盘和铅笔工具通过Z和X更改键选项获得“类似人”的优雅音符结果非常困难。相反,当你自己的手指可以立即用自己的物理八度音域寄存器范围内的MIDI键盘播放时! -

我意识到可能涉及预算限制。但是,这些看似便宜的“卡西欧”5型八度音键盘中的一些在Radio Shack以低于100.00美元(*或更低)的价格出售,这是你需要的所有(另外,他们的一些车载声音补丁和音序器模块听起来和处理其他事情也非常好)。

RadioShack MIDI keyboard options

至于现有声卡的外置MIDI转换器,我已经按照以下方式运行some Google searches,特别考虑到Mac平台:

很多这种外部MIDI转换信息起初对你来说可能很麻烦,所以为了你的注意事项,我把故事分解为“用户友好”。预算:

使用VST时,使用DAW促进虚拟键盘没有任何问题。他们有自己的位置。

但是,你听起来像一个有成就的键盘手。那么,为什么不考虑我刚才提到的外部MIDI转换/键盘选项呢?

祝你好运,我希望这会给你一些可以并且对你有用的想法!

答案 21 :(得分:6)

您可以使用简单的AutoIt脚本来读取MIDI事件,请参阅 MIDI Input

您还需要 MIDI UDF simulate key presses

读取MIDI事件应该很容易,但不同的MIDI控制器(乐器)具有不同的功能。尝试先找出你的MIDI钢琴可以做什么,然后看看你如何最好地将这些功能映射到模拟QWERTY - 键盘按下。

如果你愿意,你可以在屏幕上或托盘中放置一些东西来帮助你看到你在做什么(也就是说, Shift Ctrl Alt 模拟)。

答案 22 :(得分:6)

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

此方法适用于任何操作系统和任何支持标准USB键盘的计算机,因为MIDI键盘会将自己标识为标准的QWERTY键盘。

答案 23 :(得分:5)

您可以查看chorded keyboards。它们的优点是在使用它们之前不需要为它们编写驱动程序,有些类似于钢琴键盘的布局。

答案 24 :(得分:5)

如果你知道用Java编码,你可以这样使用:

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

您需要使用getMessage方法获取MidiMessage的内容,并以您的方式对其进行解释。可以在 MIDI Messages

中找到消息字节的含义

在收到某个键盘键的'note on'或'note off'之后,您可以将它指定给您喜欢的键,方法是将其指定为KeyEvent类的常量,例如C#4 - > KeyEvent.VK_A等。然后,java.awt.Robot的keyPress和keyRelease方法可以使用此密钥代码将键击实际发送到操作系统,从而发送到其他应用程序。

答案 25 :(得分:4)

我确切地知道你的感受。全天做疯狂的键盘编码命令会让我的双手受伤。

钢琴不能完成这项工作(你最好得到Dorvak keyboard)。最好的解决方案是精神心灵感应,或者此时的语音控制。

我发现Arthro-Aid Direct霜很好, Wild Blend 也可以。

我注意到的另一件事是,鼠标也是主要的责任,大多数都是非人体工程学的,点击这么多导致RSICTS。为了解决这个问题,我偶尔会使用自动鼠标答题器,例如Auto Mouse Clicker

我知道你用鼠标作为握把的专利,我很想购买。

PS:在你看医生之前先获得收入保障保险!

不要在周末编程:)

答案 26 :(得分:4)

我同意Brian O'Dell的回答 - 如果这是我的项目,我会用硬件来做。它具有独立于平台和硬件的优势 - 您的盒子取代了对MIDI-USB接口和PC API的需求。

mbed是一个快速原型设计平台,非常容易学习,并且与Arduino IMHO(在线编译器,512 KB闪存,96 MHz,C ++语言)相比具有多个优势。它预先为您预写了USB keyboard interfaceUSB Midi interface

社区非常友好并愿意提供帮助,并且有许多现有项目使用MIDI和USB隐藏仿真 - 搜索Youtube用于“mbed MIDI”或类似。

答案 27 :(得分:4)

为了更快地打字,可能会想到“玩”左手的辅音和右边的元音(反之亦然)。你不需要每个辅音都有一把钥匙,因为你可以将它们组合起来:

B    C    D    G    H    J    K    L    M    N    P    Q    R    S     T     W    X    Y    Z

c    c#   d    d#   e    f    f#   g    c+d ...

你可以留下两个关闭的键(比如 c# + d ,这不会轻易播放)。 你甚至可以把黑键留下来。

元音很简单:

A E I O U Y

c d e f g a

但是,也要考虑使用多次击键:如 c# = aa d# = ee

你可以用辅音做同样的技巧(将st,sp等组合起来)

你可以同时演奏辅音和元音,交替或优先将它们绑在一起(辅音,然后是元音等)

您可能需要再次学习打字,但我相信您可以比普通的打字人员快得多。

使用另一个八度音阶来表示数字和特殊字符,使用一个开关进行移位,使用一个易于播放的空格键组合(如左右两个cs,确保它不代表(a)字符(S))。

还要考虑使用值为0-127的踏板。您也可以将它用作班次或空格......或退格/进入。

我希望这能为你的项目带来一些新的想法和好运。

答案 28 :(得分:4)

如果您使用Linux,则需要参加 Footware

它应该正是您正在寻找的 - 如果您将MIDI音高调整为您喜欢的键盘映射...

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

答案 29 :(得分:3)

您的问题的答案已在此页面上,但我想提供一些额外的输入。

首先,我不相信在钢琴键盘上打字会反而会停止痛苦。在这方面,我建议您在输入时查看类似Nuance Dragon - Naturally Speaking的内容。

其次,如果你坚持要继续这样做,你可能需要选择Nasebnbaar's(虽然我不同意它会更快)和Brian's建议。这可能是你应该联系工程师做正确的事情,但如果你必须自己做,最好在Electrical Engineering - Stack Echange.

上询问方向。

第三,如果你只想了解how MIDI files work,如何read them programmaticallyhow to simulate a keyboard stroke,那么祝你好运;)

最后,如果您最终选择使用第二个选项,我还想获得一份副本:)

答案 30 :(得分:2)

尝试使用基于微控制器的系统,例如Arduino

答案 31 :(得分:1)

这不会太难。

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

但现在来吧。你记得你花了多长时间学习 键盘在第一位,对吗? 你愿意再次通过吗? 你是否愿意用你的健康键盘污染你 遍布它的一堆愚蠢的关键符号?

你需要使用至少26个alpha,10个数字,11个标点符号, 和至少12个功能键及其移位状态。 这就是6​​0键和移位状态。 那会烧掉5个八度音阶。 你将做钢琴“跳”=全部=时间。 说再见触摸打字。

您可以将自己保存在RSI,但是您已经创建了另一个 不同类型的噩梦。

祝你老板在工作中给你买MIDI键盘好运。

如果你学会了真正弹钢琴,你就学会了 如何发挥无压力。在QWERTY键盘上执行此操作。 没有紧张。开始慢。

答案 32 :(得分:1)

有很多答案,我只是一个小主意。我不知道,是否有任何MIDI到键盘程序支持它,但在MIDI中,你可以使用延音表达式踏板。

实际上,我从未见过表情踏板。期。

但每个MIDI键盘都有一个延音输入插槽。延音踏板只是一个开关。如果你不想花钱,你可以使用纹身(!)踏板,但要小心,一些中国纹身踏板的质量很差。购买之前先试试吧。令人惊讶的是,“电子设备”是相同的:(大)单声道插孔连接到开/关开关。如果你有一个“舒适”的开关,一个插孔公插头和一些电线,你甚至可以制作自己的电线。

我建议将它用作班次。在Commodore 16上,操纵杆-2火警按钮相当于班次,我使用了几天。唯一的问题是我的喜悦是如此令人不舒服。如果你是钢琴演奏家,你会发现它很熟悉。

答案 33 :(得分:-1)

如果计算机键盘导致RSI,主要是CTS(腕管综合症),是什么让你觉得长时间弹钢琴不会导致你的CTS?恕我直言,如果您必须用手指键入或按钢琴键,为什么不使用Chorded Keyboard或键控器来输入数据来减少按键的数量?...它与按钢琴键非常相似(和弦和所有)除了你的手臂和手指不必长途旅行。 Chorded Keyboards带有他们的驱动程序和软件,允许您自定义他们的词典!

虽然使用钢琴进行数据输入会很有趣..我想知道一首歌是否会出现,因为数据输入通常有模式?但是,如果您成功将电子钢琴键转换为数据输入的字符集,我可以预期数据输入速度(WPM)将比使用法庭记者使用的键盘键盘和您的RSI慢痛苦将持续存在!我解决你的RSI痛苦的全部想法是减少你必须按下的键数量,以尽量减少你的痛苦!