[Keyboard] ピアノのキーボードをコンピュータのキーボードとして使用する


Answers

私は何年にもわたってMIDIプログラミングを行っていませんが、あなたの基本的な考え方はとても健全です。

MIDIは、ノートナンバー(0 = CはミドルCの下の5オクターブ、127は "0")を持つ "ノートオン"と "ノートオフ"の2つの "イベント"(または "メッセージ" Gは中間のCの上のGの上に半オレンジで5オクターブ上にある)。 これらのイベントは、ベロシティセンシティブ(「タッチセンシティブ」)で、0から127の間の(それを推測した)力で、キーボード上に「ベロシティ」ナンバーを持ちます。

ベロシティ、コーディング、ペダルの間では、ピアノのキーボードのための「タイピング」インターフェイスを思いつくことができると思います。 特に、コーディングは非常に強力なテクニックになる可能性があります。コメントで言及したように、ランク・アンド・ファイル・stenographersグラファーは、厳しいタイピング奏者でさえも、通常のタイプライタースタイルのキーボードを使用して任意の長さの時間が可能です。 マシン・ステノグラフィーの場合と同様に、コードの意味と和音のシーケンスの「辞書」が必要です。 (私は機械の狭窄のソフトウェア側で働いていたと言えますか?)

これを行うためには、基本的な部分は次のとおりです。

  • MIDI入力を受け取ります。 あなた自身でこれをやろうとせず、図書館を利用してください。 編集 :明らかに、JavaサウンドAPI 、MIDIコントローラからイベントを受信するなど、MIDIをサポートしています 。 クール。 このページは役に立つかもしれません。
  • そのデータを、あなたが送信したいキーストロークに変換します。
  • キーストロークをコンピュータに出力します。

ソフトウェアと最も広く互換性を持たせるには、これをキーボードデバイスドライバとして記述する必要があります。 これはオペレーティングシステムのプラグインで、キーボードイベントのソースとして使用され、基盤となるハードウェア(あなたのケースでは、ピアノのキーボード)と通信します。 WindowsとLinuxの場合は、おそらくCを使用したいと思うでしょう。

しかし、ちょうどキーストロークを生成しているので(私は何年も前にやろうとしていたものをインターセプトしようとしていません)、オペレーティングシステムが人工的なキーストロークを送信する機能を使用することができます。 Windowsはこれを行うためのインターフェースを持っています(おそらくいくつか、私が考えているのはSendInputが、同様のことをするいくつかの "ジャーナル"インターフェースがあることを知っています)、他のオペレーティングシステムも同様です。 それはあなたの目的には十分かもしれません。デバイスドライバのルートが厄介なので、Javaよりも別の言語を使用しなければならないので、それは私が始めるところです。 (私はJavaの大ファンだが、オペレーティング・システムがデバイス・ドライバーと話すために使用するインターフェースは、Cやそれに類するものによって消費される傾向がある)

アップデート :キーストロークの和音の「辞書」の詳細:

基本的に、この辞書は最長プレフィックスマッチングで検索するtrie (ありがとう、@Adam)です。 詳細:

機械の狭記では、このステノタイプのマシン上の複数のキーを同時に押してから、それらすべてを解放することによって、そのステノグラファーは書き込みます。 彼らはこれをキーボードの「ストローク」と呼びます。 それはピアノの和音のようなものです。 ストロークは頻繁に(常にではないが)、話し言葉の音節に対応する。 音節のように、時には1つのストローク(コード)がすべてそれ自身で意味を持ち、それ以外のときはそれに続くストロークと組み合わせた意味があります。 (「良い」と「良い」、続いて「さようなら」と考える) 彼らは彼らが学んだ学校の影響を大きく受けるだろうが、各中規模の技術者は、彼らが自分の仕事の中で何度も何を意味するのかを辞書に書いている。 ディクショナリには、中止部分(「steno」、略して)が1ストローク、または複数ストロークのエントリがあります。 しばしば、同じ開始ストロークを有するいくつかのエントリーが、それらの長さおよび後続のストロークによって区別される。 たとえば(ここでは実際のステレオは使用せず、プレースホルダだけを使用します)、次のエントリがあります。

A     = alpha
A/B   = alphabet
A/B/C = alphabetic
A/C   = air conditioning
B     = bee
B/C   = because
C     = sea
D     = dog
D/D   = Dee Dee

(これらの文字は音符ではなく、抽象的なマーカーであることを意味します)。

Aは複数のエントリを開始し、またCストロークをどのように翻訳するかは、以前にAB 、または新しく開始したかどうかによって異なります。

また、上の小さなサンプルには表示されていませんが、同じ単語やフレーズを再生する方法は複数あります。 ストノグラファーは、手の位置に応じて先行する単語から次の単語への流れを容易にするためにそれを行います。 そこには音楽との類似点があります。これを使用して、入力音をピアノ演奏に悪影響を及ぼさないようにし、RSIで実際に役立つ可能性を最大限に高めるために、演奏を楽しくすることができます。

stenoを標準テキストに翻訳するときは、「最長プレフィックス一致」検索を使用します。翻訳アルゴリズムは、最初に書き込まれたストロークから開始し、そのストロークで始まるエントリを検索します。 エントリーが1つしかなく、長さが1ストロングの場合、「使用するエントリー」と確実に言い、対応するテキストを出力し、次のストロークで新しく始めることができます。 しかし、そのストロークは様々な長さの複数のエントリを開始する可能性が高い。 そこで、次のストロークを見て、その2ストロークで始まるエントリがあるかどうかを確認します。 私たちが試合をするまで続きます。

したがって、上記の辞書では、このシーケンスを見てみましょう:

A C B B C A B C A B D

これを翻訳する方法は次のとおりです。

  1. Aは様々な長さの3つのエントリの開始点です。 次のストロークを見てください: C
  2. A/Cは1つのエントリと一致します。 「空調」を出力し、次のストロークで新しく始める: B
  3. Bは2つのエントリを開始する。 次のストロークを見てください: B
  4. B/Bは何も開始しません。 最長の前回の試合( B )を行い、それを出力する(「蜂」)
  5. B = "bee"を出力しても、バッファにはBストロークが残っています。 それは2つのエントリーを開始するので、次のストロークを見てください: C
  6. B/C 1つのエントリと一致します。 次のストロークで新しく開始します: A
  7. Aは3つのエントリを開始します。 次のストロークを見てください: B
  8. A/Bは2つのエントリを開始します。 次のストロークを見てください: C
  9. A/B/Cは1つのエントリにのみ一致します。 "アルファベット"を出力し、次のストロークで新しく開始する: A
  10. Aは3つのエントリを開始します。 次のストロークを見てください: B
  11. A/Bは2つのエントリを開始します。 次のストロークを見てください: D
  12. A/B/Dは何もマッチしませんので、最も長い前のマッチ( A/B )を取って「アルファベット」を出力してください。 それでバッファーにDまだ残っています。
  13. Dは2つのエントリーを開始するので、通常は次のストロークを見ますが、すべてのストロークを処理したので、それを孤立して考慮します。 孤立して、それは "犬"と解釈されて出力されます。

注意すべき上記の側面:

  • 読み込んだがまだ翻訳していないストロークのバッファがあります。
  • できるだけ多くのストロークを1つのエントリと照合したいと思っています。 A/Bはアルファベットではなく、アルファベットでなければなりません。
  • (上には示されていません)辞書には何もないので、翻訳できないストロークのシーケンスがあるかもしれません。 (Stenoの人々は名詞を "翻訳しません" - 例えば、私たちの辞書では、ストロークEは "非翻訳"になります。)
  • (上には示されていない)ステノのいくつかの理論は、より広い文脈に基づいて、同じストロークのセットが複数のものを意味することを可能にする。 ステノの人々はこれらの「葛藤」と呼んでいます。 あなたはおそらくあなたのプロジェクトでそれらを許可しないことを望んでいるでしょう。実際、ステノグラフによって手動で翻訳されたステノは、正しい選択肢がどこにあったのか分かりませんが、ステレオの矛盾のない理論は、結果として生じる翻訳されたテキストを通過し、矛盾を「修正する」ことを避けるために特に生じた。
  • リアルタイムで(あなたがやっている)翻訳するということは、部分的なマッチを受け取った場合、次のコードを待っている間にそれを保持することを意味します - しかしおそらくタイムアウトまでしかないでしょう。できるだけバッファ内にあるものを翻訳してください。 (あるいはタイムアウトしたくないかもしれません;それはあなたの呼び出しです。)
  • "前のストロークを無視する"というストロークを持つのが最も良いでしょう
  • "何も出力せずにバッファを完全にクリアする"と言うストロークを持つのが最良でしょう。
Question

私はRSI問題を抱えており、30種類のコンピュータキーボードを試してみると、痛みを感じます。 ピアノを弾いても痛みはありません。 私は痛みの問題なしに約20年間ピアノを弾いてきました。 MIDIキーボードからMIDIを取り込んでキーボードストロークを出力する方法があるかどうかを知りたいです。 私はMIDIに関して何も知りませんが、この信号をキーストロークに変換する方法についてのガイダンスが必要です。




あなたは、Teenysのマイクロコントローラを使ってかなり素早く自分のUSBキーボードをハックすることができます。

実際、彼らはUSBキーボード作る方法の例のコードを持っています

あなたはこの2つの方法にアプローチすることができます:

  1. 古いピアノを手に入れて十代の若者たちに直接繋げる

  2. 追加のロジックを追加してMIDIポートに接続し、必要なデコードを行います。




ケーシーは最高の答えを持っています。 私はそれにコメントを追加し、それをupvoted。 この種のソフトウェアは、デバイスドライバまたは組み込みシステムのいずれかに属します。 デバイスドライバははるかに複雑で、他のOSに移植することはできません。 参考までに、Linux上のWinmodemsの問題を参照してください。

組み込みシステムにコードを組み込むことで、USBポートを備えたMIDIデバイスやUSBキーボードを受け入れるすべてのコンピュータに移植可能になります。




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.




これを解決するには、いくつかのことが必要です:

  1. キーボードからMIDIデータをキャプチャする方法。 インターフェース:MIDIインターフェース(クラシック)またはUSB MIDIインターフェース(現代)に応じて最も可能性の高いインターフェースは、ほとんどのオプションを提供するようにコンピューターにあります。 USBホストマイクロコントローラは、コンピュータを使用するだけでは簡単ではありません。

  2. MIDIデータをキーストロークに変換する方式。 一人のユーザーが指摘したように、鍵の数はピアノ鍵の数に依存しないため、和音が行く方法です。

  3. オペレーティングシステムにキーを注入する方法。 これには、低レベルのドライバが正確である必要があります。 私はWindows 7のアプリケーションにキーボードやマウスのデータを挿入するアプリケーションで遊んできました。これは薄れている可能性があり、アプリケーションが現在フォーカスしているかどうかによって異なります。 これはインターフェイスの最も難しい部分です。 シリアルインターフェースを備えたHID USBキーボードマイクロコントローラを作成することもできます。

シリアルインターフェイスは仮想シリアルポートを作成します。 MIDIデータを読み込んでキーストロークを生成するソフトウェアは、シリアルポートにシリアルメッセージを送信することができます。 マイクロコントローラはキーストロークを送信し、標準のキーボード入力のように見えます。 これにより、MIDIポートとUSB MIDIキーボードの両方のインターフェースが可能になります。

うーん、このタイプのインターフェイスでは、マウスをシミュレートし、マウスの軸とボタンのためにいくつかのピアノキー設定を使用することもできます。 圧力は、マウスポインタの速度を決定するために使用することができる。 だから、マウスを排除することもできます。 このアプローチのもう1つの利点は、接続した任意のタイプの入力デバイスが、仮想シリアルポートに接続してキーボードとマウスイベントを生成できることです。 そのため、ドラムペダルやジョイスティックなどの他のハードウェアを追加したい場合は、シリアルインターフェイスと通信するプログラムを調整する必要があります。

上記のもう1つはArduinoを使用するために上に掲載されたもののようですが、SparkfunのUSB Host ShieldもUSBベースの音楽キーボードを扱うことができます。 これにより、Arduinoをブートローダチップのキーボードまたはキーボードのマウスコンボとしてプログラムすることができ、デバイスがUSBベースの音楽キーボード用のUSBホストを操作できるようになります。 次に、あなたは両方のタイプのためにカバーされます。 しかし、私はまだ、仮想シリアルポート方式はより柔軟で、長期的にはプログラムするのが簡単だと考えています。 Arduinoデバイスは、デスクトッププログラムやサービスよりも変更するのが難しくなります。

もう一つの可能​​性があります。コード化された片手のキーボードがすでに存在します。 私はそれらのビデオを見たことがありますが、それらがあなたの手を傷つけるかどうかを判断する必要があります。




あなた自身が自分で構築する方法についてのアドバイスは少なく、必要なものを達成するために既にどのリソースがそこにあるのかを尋ねるような気がします。 お使いのOSによっては、独自のプログラムを最初から作成することなく、これを達成する方法はたくさんあります。

MIDIストローク

無料。 Mac OS X 10.3以上の場合 これには、「 MIDIキーボードをフルキーボードキーボードの代わりに使用する機能」が付属しています。

ボームのMIDIトランスレータ

無料/ポストカードウェア(ちょっと奇妙です)。 Windows 2000以降、およびMac OS Xの場合 当初、 AutoHotkeyタイプの使用に向いているようですが、それ以上見てみると、あなたがうまくいきたいことができると思います。

Maxとaka.keyboard

無料。 Mac OS Xの場合 「すぐに使える」ソリューションではありませんが、基本的なデバイス構成に慣れていれば、それほど悪くはありません。




私は大学でピアノの演奏を学んだ後、インタラクションのデザイン、プログラミング、そしてVim使い方を学んだので、実際にこのような試作に多くの時間を費やしました。

Linuxで、マルチメディアアーティストのためのグラフィカルプログラミング言語「 Pure Data 」とAlex Andreの x11keyを使用すれば、この作業をかなり簡単に行うことができます。

Macでは、 MidiStrokeを使用できます。 Windows上のメソッドには、 MidiOxAutoHotKeyツールが関係してMidiOxAutoHotKeyます。 別の時に、 Max/MSP用のJavaプラグインを使用するバージョンがありました。 私はPatrice ColetがPure Data用に外部のウィンドウを作ったと思っていますが、もはやそれを見つけることはできません。 また、Windows上でこれを行うことができるMaxMSPための外部があります。 最後に、自由ではないが最高のOsculatorは、あなたが望むことを行うことができます - 機能ページを参照してください。

私はそれが働いたとき、私はレイアウトで工具を止めることができなかったので、私はそれに固執したことはありません。 ただ、私のモニターを私の電気キーボードにつけても涼しかったです! がんばろう。




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.




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. がんばろう!




MAMEアーケードゲームを見てみましょう。 彼らは、任意の数の異なる項目からの入力を可能にするハードウェア装置を構築している。 例えば、 iPac 、入力デバイスからの信号をUSBに変換し、コンピュータがそのキーをエミュレートすることができます。 あなたは、入力を解釈するソフトウェアがすでに実行され十分にテストされているので、狂ったプログラミングロジックが不要で快適な方法で配置された入力デバイスの任意の組み合わせを使用できます。

私はフライトシミュレータのコックピット入力、カスタムキオスク、およびこの方法で構築された投票システムを見てきました.....そして価格は正しいです!




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 :)




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 Dvorak ). 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:)




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)




多くのキーボードには、MIDI信号をコンピュータに送信するためのシリアルポート( RS-232 )コネクタがあります。 私はGirderというプログラムを使って、シリアルポート通信をキーボードストロークに変換します。

Girderには、各キーを対応するキーストロークに1つずつマップできる「マッピング」機能があります。

これはあなたが探している簡単な解決策かもしれません!




ボームのMIDIトランスレータを試してみてください。

クロスプラットフォームで動作し、 MIDI入力をキーストックに簡単に変換し、セットアップと構成を迅速に行えます。また、個人的な使用のために無料です。

チュートリアルのクイックヒント:MIDIトランスレーション - MIDIからキーストロークまで 、簡単にセットアップする方法があります:

基本的には、コーディングやモディファイアキーなど、できることの無限の可能性があります。 ピアノを使ってDAWをコントロールするために私のライブオーディオリグに使用しています。