使用钢琴键盘作为计算机键盘


727

我遇到了RSI问题,并尝试了30种不同的计算机键盘,这些都使我感到痛苦。弹钢琴不会使我痛苦。我已经弹钢琴大约20年了,没有任何痛苦的问题。我想知道是否可以从MIDI键盘捕获MIDI并输出键盘笔触。我对MIDI一无所知,但我希望获得有关如何将该信号转换为击键的指导。


如果可以使用合成器键盘作为键盘,为什么还要捕获midi?
shevski 2011年

@I__:您需要支持什么操作系统?这可能很重要。
TJ Crowder

5
@shevski:我没有尝试做任何事情,@ I__是询问问题的人。他/她并不希望转换声音,而是通过电子键盘通过乐器数字接口发送的数字键盘事件信号。这些与计算机键盘事件非常相似:“音符开”与键按下很好地对应,“音符关”到键盘上等等,您甚至可以使用力度数据来执行不同的操作,具体取决于和弦的演奏程度。我喜欢这个主意。
TJ Crowder

34
如果您可以使用它,则可以使用任何类型的Midi设备进行编码。可能需要一些练习,但是使用乐队作为开发团队应该很有趣。
Toon Krijthe 2011年

1
@I__:最受支持的答案是指向Java声音API的MIDI支持,这应该使您能够接收MIDI数据,并详细描述了将其转换为一系列击键的理论。在第二个最upvoted回答关于一个非常可行的会谈,你可以接着使用一个Arduino,包括连接到该计算机...... (续)
TJ克罗德

Answers:



430

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

MIDI是“事件”(或“消息”)流,其中最基本的两个是“音符打开”和“音符关闭”,它们带有音符编号(0 = C在中间C下方五个八度,直到127 =在中间C上方的G上方的G五个八度音阶(半音)。这些事件在力度敏感(“触觉敏感”)的键盘上带有“力度”数字,力度(您猜对了)在0到127之间。

在速度,和弦与踏板之间,我认为您可以为钢琴键盘提供一个很好的“键入”界面。特别是和弦可能是一种非常强大的技术-正如我在评论中所提到的,这就是为什么普通档速记员可以使用定型打字机来跟上人们连续几个小时的谈话,而即使是顶级打字员也不会这样做。不能通过普通的打字机式键盘持续任何时间。与机器速记一样,您需要“和弦”以及和弦序列的“字典”。(您能告诉我以前在机器速记的软件方面工作吗?)

为此,基本部分是:

  • 接收MIDI输入。不要尝试自己做,要使用库。编辑:显然,Java Sound API 支持MIDI,包括从MIDI控制器接收事件。凉。此页面也可能有用。
  • 将该数据转换为您想要发送的击键,例如通过我上面提到的字典。
  • 将击键输出到计算机。

为了与软件最广泛地兼容,您必须将其编写为键盘设备驱动程序。这是操作系统的插件,可作为键盘事件的源,与基础硬件(在您的情况下为钢琴键盘)对话。对于Windows和Linux,您可能要为此使用C。

但是,由于您只是在生成击键(而不是试图拦截它们,这是我几年前试图做的),因此您可以使用操作系统具有的任何功能来发送人工击键。Windows有一个用于执行此操作的接口(可能是几个,我想到的是一个接口,SendInput但是我知道有一些类似的“新闻”接口),而且我敢肯定其他操作系统也会这样做。对于您的目的而言,这可能就足够了–这就是我要开始的地方,因为设备驱动程序路线将很尴尬,并且您可能必须为此使用与Java不同的语言。(我是Java的忠实拥护者,但是操作系统通常使用C和类似的东西来使用它与设备驱动程序进行通信的接口。)


更新:有关击键和弦的“字典”的更多信息:

基本上,字典是我们使用最长前缀匹配进行搜索的特里(谢谢,@ Adam)。细节:

在机器速记中,速记员通过同时按下定型机上的多个键进行书写,然后释放所有键。他们称这为键盘的“笔触”。就像在钢琴上弹奏和弦一样。频繁(但不总是)的笔触对应于口语的音节。像音节一样,有时一个笔画(和弦)本身具有全部含义,而有时只有与后续的笔画结合才具有含义。(想想“好”与“好”,然后再说“再见”)。尽管他们会受到所学学校的严重影响,但每个速记员都会有自己的“字典”,以了解他们使用的笔法是什么意思,他们会在工作过程中不断完善自己的字典。词典中将包含速记部分(简称“ steno”)为一笔长或多笔长的条目。通常,会有几个条目具有相同的起始笔画,但它们的长度和后续笔画却有所不同。例如(在这里,我将不使用真正的Steno,仅使用占位符),可能存在以下条目:

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

(这些字母并不意味着是音符,只是抽象标记。)

请注意,这会A开始多个条目,并且还要注意,C笔画的翻译方式取决于您以前是否看到AB,或重新开始。

还要注意(尽管在上面的非常小的示例中未显示),但是可能有多种方式来“播放”相同的单词或短语,而不仅仅是一种。速记员这样做是为了使其更容易从前一个单词流到下一个单词,具体取决于手的位置。那里有一个明显的音乐类比,您可以使用它来使您的打字流程更像是播放音乐,以防止这对您的钢琴演奏产生负面影响,并最大程度地提高实际使用RSI的可能性。

将Steno转换为标准文本时,我们再次使用“最长前缀匹配”搜索:翻译算法从有史以来的第一个笔画开始,然后查找从该笔画开始的条目。如果只有一个条目,并且有一个笔画长,那么我们可以可靠地说“这就是要使用的条目”,输出相应的文本,然后从下一个笔画重新开始。但更可能的是,该笔划开始了多个不同长度的条目。因此,我们查看下一个笔划,看看是否有按顺序从这两个笔划开始的条目。依此类推,直到我们得到比赛为止。

因此,使用上面的字典,假设我们看到了以下序列:

ACBBCABCABD

这是我们的翻译方式:

  1. A是三个长度不同的条目的开始;看下一个行程:C
  2. A/C仅匹配一个条目;输出“空调”并从下一个行程重新开始:B
  3. B开始两个条目;看下一个行程:B
  4. B/B什么也没开始 进行最长的前一场比赛(B)并输出该结果(“ bee”)
  5. 输出B=“ bee”后,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)并使用它来输出“字母”。这使我们D仍然处于缓冲区中。
  13. D开始两个条目,所以我们通常看下一个笔画-但是我们已经处理了所有笔画,因此请单独考虑。孤立地,它翻译为“狗”,因此输出。

以上方面要注意:

  • 您有一个已读但尚未翻译的笔画缓冲区。
  • 您始终希望将最多笔画与单个条目进行匹配。A/B应该翻译为“字母”,而不是“字母”和“蜜蜂”。
  • (上面未显示)您可能会遇到无法翻译的笔画序列,因为它们与字典中的任何内容都不匹配。(Steno人们使用名词“ untranslate”-例如,在我们的词典中,笔画E将是“ untranslate”。)
  • (上面未显示)基于更广泛的上下文,一些速记理论允许同一组笔画包含多个含义。斯特诺人称这些为“冲突”。您可能想在项目中禁止它们,实际上,当速记手册曾经由速记员手动翻译时,冲突就很好了,因为他们只知道句子中的正确位置是正确的选择,但是随着这种情况的增加在机器翻译方面,无浆纸印刷技术的无冲突理论是专门为避免必须经历最终的翻译文本和“修复”冲突而提出的。
  • 实时翻译(这是您要做的)意味着,如果您收到部分匹配,您将需要在等待下一个和弦时按住它-但可能只限于超时,此时您将尽可能翻译缓冲区中的内容。(或者也许您不想超时;这是您的电话。)
  • 最好是写一个“忽略先前的笔画”的笔画
  • 最好使笔触显示“完全清除缓冲区而不输出任何内容”

6
@I__:有些程序尝试直接与键盘设备对话,因此不能很好地使用类似“ sendkeys”的界面。希望现在这种情况现在比几年前上次处理这种情况时少了,因此,正如我所说,我将从机制之类的“ sendkeys”开始,只在需要时担心其他问题。(最好做一个快速的程序测试程序,[单独发送密钥,而不是从MIDI接收密钥]-包括特殊的密钥序列-然后在要走得太远之前用您要控制的软件进行测试。)
TJ Crowder

7
对于那些从未听说过的人,您描述的字典基本上是特里(发音为“ try”)
亚当

14
@I__:现在写这个有趣。您还想要什么?我想我已经解决了您需要做的许多重要方面。我没有做过,也没有指向任何有经验的人,因为我还有其他事情要做,而且还不了解预先构建的解决方案。但就构建解决方案而言,我认为我已为您指明了正确的方向。
TJ Crowder

2
请注意,您可以将所有和弦卡在线性阵列中,并在每次收到Midi事件时进行遍历,而仍然不会遇到任何明显的减速。使用特里的味道有点过早的优化。
FeepingCreature 2012年

5
@FeepingCreature:当我与速记员和法庭记者一起这样做时,他们的词典可以很容易地跑到成千上万的条目(我记得一个打破百万大关的人)。使用优化策略并没有太早,我们正在处理12 MHz 386。在I___的情况下,如果他接受Arduino的想法(这是一个很酷的想法),那么他在现代时代也将使用功率不足的硬件,尽管当然比我们拥有的要快得多。我认为他的字典可能会大大缩小,但是……
TJ Crowder

184

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

有大量的信息,可以为Arduino提供帮助。这是为新手打造的硬件黑客平台。现在,只有Google推出Arduino,它才会变得更大

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


我喜欢为此使用Arduino的想法。内存可能是个问题。看起来最大的预先设计的板具有256k Flash(其中8k由引导加载程序使用)。过去,我们在DOS下将机器速记的实时翻译/显示/编辑挤入了1M(例如,通常的640k加EMS或扩展的内存),但是我们正在编写紧凑的C代码,汇编语言和字典(这可以很容易地实现)本身大于25万)。这里没有显示或同时编辑,所以很好,但是字典必须很小...
TJ Crowder

哦没什么 我经常与法院记者打交道,他们的字典即使以我们使用的非常紧凑的形式存储,也有数兆字节的大小。我个人看到的最大容量为4.5MB,并且再次以高度压缩的形式存储。结合以下事实,即速记键盘上的键比钢琴键盘上的键要少...不过,Arduino具有USB端口,因此字典可以在USB闪存适配器上,甚至可以在(外部供电)上使用。 )SSD或HDD。
TJ Crowder

2
@您可能要考虑使用十几个内存而不是arduino(pjrc.com/teensy)来显着增加内存,并且可以直接模拟键盘。它已经与许多arduino库兼容,而不兼容的库只需要重新分配引脚即可。-交替,ATMEGA也使得拥有16 MB的内置闪光灯和大约$ 30(at90usbkey)费用演示板
马克·

8
为计算机设计有用的钢琴界面并不是一件容易的事。恕我直言,OP应该首先在他/她当前的环境中对其进行原型制作,然后,如果它满足他/她的需求,则担心可移植性。当然,除非便携式替代产品没有明显的难度。
Emilio M Bumachar 2011年

111

在我看来,您正在寻找有关如何自己构建此问题的建议,而更多地是在询问已经有哪些资源来实现您想要的目标。根据您的操作系统,有很多方法可以完成此操作,而不必从头开始编写自己的程序:

MIDI描边

自由。对于Mac OS X 10.3及更高版本。此功能专门具有“能够将任何MIDI键盘用作完整的计算机键盘替代品”。

Bome的MIDI转换器

免费/明信片软件(有点奇怪)。对于Windows 2000及更高版本,以及Mac OSX。最初,它似乎更适合于AutoHotkey类型的用法,但从进一步的角度来看,我认为它可以很好地满足您的要求。

Max和aka.keyboard

自由。对于Mac OSX。并非完全是一种“即用型”的解决方案,但是如果您对基本的设备配置感到满意,那么它应该还不错。


49

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

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

VB 5 / 6-Tipp 0155中提供了一种模拟键盘笔触的方法:Tastaturereignisse simulieren(Visual Basic 6.0,也是.NET版本)

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

在此处输入图片说明

然后,只需为钢琴演奏者使用一个良好的工作矩阵 蒂莫·勃姆(Timo Boehme)www.goldengel.ch

在钢琴上,当您是一名出色的演奏家时,键盘上可以有10个手指,如果矩阵可用,您会比我认为的任何计算机键盘用户都快得多。:-)

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


41

我在大学期间学习了钢琴演奏,然后进入了交互设计,编程和使用Vim的过程,因此我实际上花了很多时间来制作类似此类的原型。

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

在Mac上,您可以使用MidiStroke。我相信Windows上的一种方法涉及MidiOxAutoHotKey工具。在另一个时间,我有一个使用Java插件的Max / MSP版本。我相信Patrice Colet为Pure Data制作了一个外部窗口,该窗口也可以正常工作,但是我似乎找不到它了。另外,MaxMSP的外部可以在Windows上执行此操作。最后,非免费但很棒的Osculator可以执行您想要的操作-请参见功能页面。

当我开始使用它时,我从不坚持使用它,因为我无法停止使用版面设计工具。不过,将显示器放在电子键盘上真是太酷了!祝好运。


37

关于MIDI

您说自己“对MIDI一无所知”。一旦掌握了MIDI技术,它就相当简单了,但是一开始它可能会造成混淆。一本名为MIDI for Technophobe的书,对我理解MIDI的基础(如果您要对MIDI交互进行编程肯定是必要的)有极大帮助。这是一本容易阅读的书,非常有帮助。


纯数据和最大

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

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


自动热键

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

但是,我能够找到支持您要查找的特定映射的实现。这两个线程说明了该过程:

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

  2. MIDI输入库,解决作者问题的方法以及发布到AutoHotKey的代码/补丁,实际上可以实现您的预​​期结果。

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


还要别的吗?

通常,其他一些答案为您提供了有关MIDI和MIDI编程的更多信息,但正如您的帖子所述,这似乎并不是您所要的。如果可以的话,我想为您提供更多帮助,但是,如果您可以更详细地了解要查找的信息类型,将会更加容易。例如,您对如何将MIDI键盘的输入信号转换为QWERTY键盘的信号更感兴趣,还是对解决特定问题的现成解决方案感兴趣?您在寻找什么尚未解决?


27

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

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

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

  1. 买一架旧钢琴并直接将开关连接到未成年人

  2. 添加其他逻辑以连接到MIDI端口和必要的解码。


这是最有前途的答案,因为完成设备后,它将在任何计算机和任何操作系统上均可工作。投入使用,或者只是高兴地升级计算机而不必担心键盘。我将使用两个Teensy设备,并将它们与I / O引脚连接在一起。由于Teensy已经支持USB MIDI pjrc.com/teensy/td_midi.html,因此您的代码只需要处理在键盘Teensy和Midi Teensy之间移动信号的问题。
Michael Dillon

24

实际上,我前一阵子做了这个,试图将Rock Band鼓输入捕获到我的计算机中(制作了一个Java自制鼓仿真器)。无论如何,我在这里问了一个有关时间延迟的问题(那里有轮询代码) ,以及我尝试做的事情。)。如果可以找到我的程序,可以给你代码,它使用第三方API(JInput)。

无论哪种方式,祝你好运。




15

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


15

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

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

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


12

只是学习速记!

从您的所有讨论中可以清楚地看出。从技术角度来看,您不想重新发明任何轮子。但是,一旦建立了连接(这个问题在问什么)并且正常工作,您仍然需要进行大部分工作:您必须训练自己的大脑。您必须发明最聪明,最有效的方法来完成设计工作,而这完全是出于计算机技术专家的考虑。您或我们中的任何一个都将无法实现。

幸运的是,这个问题已经解决并经过了数百年的成熟磨练。

学习速记!

是的,这会使您背上一些插孔。但是,您自己花费的数百小时可算是值得的结果呢?此外,速记维基百科上的文章说,“它看起来更像是钢琴键盘”。

除非,当然,除非您想进行边秀效果。我不得不承认,我从来没有想过这种可能性,看到有人从钢琴键盘上敲出一段文字真的很有趣!

您可以从带有触摸板USB键盘开始(或者指点杆更符合人体工程学?),使用Plover对其进行翻译(我相信可以将其配置为让非字母键保留其功能,因为它们对于编程),或者按照线程Re:Plover键盘滚动自己的USB速记键盘,或者购买定型器

祝好运!


速记键盘上的{和}在哪里?您将如何键入不是单词的名称,例如pthread
bobobobo

Wikipedia链接有误,应为en.wikipedia.org/wiki/Stenography
joelhoro 2014年

11

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

我已经看过用这种方法构建的飞行模拟器座舱输入,自定义信息亭和投票系统....而且价格合适!


10

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

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

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

  3. 一种将密钥注入操作系统的方法。这将需要底层驱动程序来确保准确性。我玩过将Windows和Windows 7中的键盘和鼠标数据注入到应用程序中的应用程序,它可能很不稳定,并取决于当前是否关注某个应用程序。这是界面中最难的部分。可行的是创建一个也具有串行接口的HID USB键盘微控制器。

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

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

上面的另一种用法类似于上面发布的一些使用Arduino的用法,但是还包括Sparkfun的USB Host Shield,用于处理基于USB的音乐键盘。这允许将Arduino编程为引导加载程序芯片中的键盘或键盘鼠标组合,并允许该设备充当基于USB的音乐键盘的USB主机。然后,您将同时获得这两种类型的信息。虽然,我仍然认为虚拟串行端口方法更灵活,从长远来看更容易编程。与台式机程序或服务相比,Arduino设备更难更改。

还有另一种可能性:和弦单手键盘已经存在。我看过其中的视频,但您必须确定这些视频是否伤害了您的手。


7

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

由于您将MIDI用作键盘,因此基本上只需要检测两条MIDI消息,即音符打开和音符关闭。MIDI消息是三个数据字节,用于指定命令,音符和力度。音符只是音符编号(有时“不良” MIDI堆栈会以零速度发送音符,这也是您所期望的)。

消息翻译完成后,.NET的键盘输出应该非常简单。

在其他答案中,有很多关于技术方面的建议;我只是想让您了解实际的MIDI消息。祝好运!


附带说明一下,“ MIDI设备的通用串行总线设备类定义”文档对MIDI消息进行了非常整洁的概述:usb.org/developers/devclass_docs/midi10.pdf
Simon Inns,

7

通过声卡将任何外接MIDI键盘用作控制器,您将获得更好,更快乐的结果(无论您要使用哪种操作系统和/或DAW程序)。然后将其路由到您的GB软件(或其他任何软件)中,并且音调会实时生成它们以这种方式为您提供的多种声音。

如果您的声卡不支持MIDI I / O(输入/输出/通过),那不是问题。您可以考虑研究和投资于外部MIDI台式转换器。许多设备可以将MIDI输出进一步转换为USB 2.0(完全绕过现有的声卡)。

例如:使用计算机键盘和铅笔工具通过Z和X更改键选项来获得“类似人”的宽限音结果非常困难。相反,当您自己的手指可以立即使用MIDI键盘从其自身的物理八度寄存器范围进行弹奏时!

我意识到可能会涉及预算限制。但是,其中一些看似便宜的“ Casio”类型5八度键盘在Radio Shack出售的价格低于100.00美元(*或更少),是您所需要的(此外,它们的一些板载声音补丁和音序器模块的声音和处理能力也是如此)对于其他事物也非常好)。

RadioShack MIDI键盘选项

至于现有声卡的外部MIDI转换器,我专门针对Mac平台,对您进行了以下Google搜索

起初,许多此类外部MIDI转换信息可能对您来说很麻烦,因此出于您的考虑和预算考虑,我将其更细分为“用户友好”:

使用DAW时,将虚拟键盘作为VST进行推广并没有错。他们有自己的位置。

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

祝您好运,我希望这能给您一些可以并且会为您服务的想法!


6

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

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


您知道是否也可以为特定的按键分配和弦吗?例如,如果我演奏C大调和弦,我可以将其翻译为“跳狐狸”
吗?

抱歉,回答不这么快,我已经放假4天了;)否,很遗憾,每个键只能分配一个QWERTY码,因此,它几乎可以用作标准键盘。
Martin Odhelius

顺便说一句,如果您购买一个,请记住要购买PRO-One,因为我不认为非PRO版本具有QWERTY分配功能。
马丁·奥德海瑞斯

我认为不可能将和弦分配给ASCII代码,每个代码仅分配一个键,但是今晚下班回家时,我会在自己的Axiom上进行检查。
马丁·奥德海瑞斯

我只是注意到,只能将qwerty代码分配给控制按钮(功能键,鼓垫,数字键等),而不能分配给键盘上的实际钢琴键。我自己拥有此键盘,并确定可以为任意键分配ASCII码,但是现在当我尝试使用它时,我注意到这是错误的!我对此感到非常抱歉,是否可以某种方式还原奖励?
马丁·奥德休斯

6

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

您还需要MIDI UDF模拟按键

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

如果你愿意,你可以对屏幕或托盘的东西来帮助你看到你在做什么(即对ShiftCtrlAlt模拟)。



5

如果您知道使用Java进行编码,则可以使用以下方式:

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

您将需要获取MidiMessage的内容及其getMessage方法,并以自己的方式对其进行解释。信息字节的含义可以在MIDI信息中找到。

在收到某个键盘键的“ note on”或“ note off”之后,您可以通过为它分配KeyEvent类的常量(例如C#4-> KeyEvent.VK_A等)将其映射到所需的键。 。然后,java.awt.Robot的keyPress和keyRelease方法可以使用此键代码将击键实际发送到OS,从而发送到其他应用程序。


4

我同意Brian O'Dell的回答-如果这是我的项目,那么我将在硬件中完成。它具有平台和硬件独立的优势-您的设备取代了对MIDI-USB接口和PC API的需求。

mbed是一个快速原型开发平台,非常易于学习,并且比Arduino IMHO(在线编译器,512 KB闪存,96 MHz,C ++语言)具有多个优势。它具有为您预先编写的USB键盘接口USB Midi接口

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


4

如果您使用Linux,请关注Footware

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

我从来没有想到这可能对我以外的任何人都有用; o)


2
在我之前担任管理员的工作中,我在办公桌下
放置


1

这不会太难。

我假设您使用的是Windows,不过不确定。我已经用普通的C ++编写了MIDI音序器http://pianocheetah.com,它可以让您使用钢琴键盘运行命令。没有任何理由您不能做同样的事情将按键推入键盘输入流。

但是,现在就来。您还记得一开始学习键盘花了多长时间,对吗?您愿意再经历一次吗?您是否愿意用一堆愚蠢的按键符号来污染您的祝福键盘?

您将需要至少使用26个字母,10个数字,11个标点和至少12个功能键及其转换状态。因此,这是60个键加上已转换的状态。这将耗尽整个八度的键。您将要进行钢琴“跳跃” = all =时间。告别触摸输入。

您可以从RSI中解脱出来,但是您还为自己创建了另一种类型的噩梦。

祝您好运,老板可以在工作时为您购买MIDI键盘。

如果您学会了真正弹钢琴,那么您就学会了弹奏无压力。在QWERTY键盘上执行此操作。不用紧张 开始慢。


感谢您的客气话,但我已经竭尽全力,不打算将其开源。对不起。但是您要做的就是使用midiInOpen(); 提供一个回调来处理MIDI输入;忽略除notedown事件之外的所有内容,将midi注释映射到某个键盘键,然后将其插入键盘输入流(我忘记了api的API,但我很确定至少有一个)。
Stephen Hazel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.