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


727

私はRSIの問題を抱えており、30種類のコンピューターのキーボードを試してみましたが、すべてが私に苦痛を与えました。ピアノを弾いても痛みはありません。私は約20年間ピアノを演奏しましたが、痛みはありませんでした。MIDIキーボードからMIDIをキャプチャしてキーボードストロークを出力する方法があるかどうか知りたいのですが。MIDIについてはまったく知りませんが、この信号をキーストロークに変換する方法についてのガイダンスをお願いします。


シンセサイザーキーボードをキーボードとして使用できるのに、なぜmidiをキャプチャするのですか?
シェフスキー、2011年

@I__:どのオペレーティングシステムをサポートする必要がありますか?それはおそらく問題になります。
TJクラウダー

5
@shevski:私は何もしようとはしていません、@ I__は質問をする人です。彼/彼女はを変換するのではなく、電子楽器のキーボードから楽器のデジタルインターフェースを介して送信されるデジタルキーボードのイベント信号を探しています。これらはコンピューターのキーボードイベントによく似ています。「ノートオン」はキーダウンに、「ノートオフ」はキーアップに、などとうまく対応します。コードをどれだけ「大声で」弾いたかに応じて、ベロシティデータを使用してさまざまなアクションを実行することもできます。アイデアが大好きです。
TJクラウダー、

34
これが機能するようになれば、あらゆる種類のMIDIデバイスを使用してコーディングできます。おそらく多少の練習が必要ですが、オーケストラを開発チームとして使用するのは楽しいでしょう。
Toon Krijthe

1
@I__:最も支持されている回答は、JavaサウンドAPIのMIDIサポートを示します。これにより、MIDIデータを受信できるようになり、それを一連のキーストロークに変換することに関する理論が詳細に説明されます。二番目にupvoted回答あなたは含めて...、コンピュータへのArduinoを使用していることを接続することができ非常に実行可能な方法についての協議(続き)
TJクラウダー

回答:


16

完全なMIDIサポート(BASS)を備えた.NETの優れたライブラリは、http://www.un4seen.comにアクセスしてください。

もう1つは、キーボードのMIDIノートをキーなどに変換するために、AutoItX、つまりActiveX / COMとDLLのインターフェイスであるautoItです。情報とダウンロード、移動 http://www.autoitscript.com/site/autoit/にアクセスください

キーボードドライバを書く必要はありません。


430

私は何年もMIDIプログラミングを行っていませんが、基本的な考え方は非常に健全です(駄洒落ではありません)。

MIDIは「イベント」(または「メッセージ」)のストリームであり、最も基本的なものは「ノートオン」と「ノートオフ」の2つであり、ノート番号を持ちます(0 = C中央のCから5オクターブ下、127 = G中央のCの上のGの5オクターブ、半音)。これらのイベントは、速度に敏感な(「タッチセンシティブ」)キーボードの「速度」番号を持ち、0から127の間の力(あなたが推測した)を持っています。

ベロシティ、コード、ペダルの間で、ピアノキーボードの非常に優れた「タイピング」インターフェイスを思いつくと思います。特に和音は非常に強力なテクニックかもしれません—コメントで述べたように、ランクとファイルの速記者が速記型のマシンを使用できるのはそのためです一流のタイピストでさえ、何時間も続けて人々が話し続けているをです。通常のタイプライタースタイルのキーボードを使用して、いつでも使用できる。機械速記と同様に、和音と和音のシーケンスの意味の「辞書」が必要です。(私は機械速記のソフトウェア側で働いていたと言えますか?)

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

  • MIDI入力を受信して​​います。これを自分でやろうとせず、ライブラリを使用してください。編集:どうやら、Java Sound API 、MIDIコントローラからのイベントの受信を含め、MIDIサポートしています。涼しい。このページも役に立つかもしれません。
  • そのデータを送信したいキーストロークに変換します。たとえば、上記の辞書を使用します。
  • キーストロークをコンピューターに出力します。

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

ただし、キーストロークを生成しているだけなので(何年も前に試みていたキーストロークを傍受しようとはしていません)、人工的なキーストロークを送信するためにオペレーティングシステムが持つ機能をすべて使用できる場合があります。Windowsはそれを行うためのインターフェイスを持っています(おそらくいくつかは、私が考えているものですがSendInput、同様のことを行う「ジャーナル」インターフェイスがあることは知っています)。他のオペレーティングシステムでも同様に機能するはずです。これで十分でしょう。デバイスドライバーのルートが扱いにくくなり、Javaとは異なる言語を使用する必要があるためです。(私はJavaの大ファンですが、オペレーティングシステムがデバイスドライバーと通信するために使用するインターフェイスは、Cなどを介してより簡単に使用される傾向があります。)


更新:コード入力からキーストロークへの「辞書」の詳細:

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

機械速記法では、速記者は、速記タイプの機械で同時に複数のキーを押してから、それらをすべて離して書き込みます。彼らはこれをキーボードの「ストローク」と呼んでいます。ピアノで和音を弾くようなものです。ストロークは頻繁に(常にではない)話し言葉の音節に対応します。音節と同様に、1つのストローク(和音)が単独で意味を持つ場合もあれば、後続のストロークと組み合わせるだけの意味を持つ場合もあります。(「良い」と「良い」の後に「さようなら」を考える)。学習した学校の影響を大きく受けますが、速記者はそれぞれ、どのストロークを使って何を意味しているのかという独自の「辞書」を持ちます。辞書には、速記部分(「steno」、略して)が1ストロークまたは複数ストロークのエントリがあります。多くの場合、同じ開始ストロークを持ついくつかのエントリがあり、それらは長さと後続のストロークによって区別されます。たとえば(ここでは実際のステノは使用せず、プレースホルダーのみを使用します)、次のエントリがある可能性があります。

A =アルファ
A / B =アルファベット
A / B / C =アルファベット
A / C =エアコン
B =ミツバチ
B / C =の理由
C =海
D =犬
D / D =ディーディー

(これらの文字は音符ではなく、単なる抽象的なマーカーです。)

A複数のエントリを開始し、また、どのように翻訳していることに注意Cストロークすると、以前に見てきたかどうかに依存してABまたはあなたが新鮮を開始しています。

また、(上記の非常に小さなサンプルには示されていませんが)同じ単語またはフレーズを1つではなく「再生」する方法が複数ある場合があることに注意してください。速記者は、手の位置に応じて、前の単語から次の単語に流れやすくするためにそれを行います。そこには明らかに音楽のアナロジーがあり、これを使用してタイピングの流れを音楽の演奏に近づけることで、これがピアノの演奏に悪影響を与えないようにし、これがRSIに実際に役立つ可能性を最大にすることができます。

ステノを標準テキストに翻訳するときも、「最長プレフィックス一致」検索を使用します。翻訳アルゴリズムは、これまでに書かれた最初のストロークから始まり、そのストロークで始まるエントリを探します。エントリが1つしかなく、それが1ストロークの長さである場合、「それが使用するエントリです」と確実に言って、対応するテキストを出力し、次のストロークから始めます。しかし、より可能性が高いのは、そのストロークがさまざまな長さの複数のエントリを開始することです。したがって、次のストロークを調べて、これら2つのストロークで順番に始まるエントリがあるかどうかを確認します。マッチができるまで続きます。

上記の辞書で、このシーケンスを見たとしましょう:

ACBBCABCABD

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

  1. Aさまざまな長さの3つのエントリの開始です。次のストロークを見てください:C
  2. A/C1つのエントリのみに一致します。「エアコン」を出力し、次のストロークで新たに開始します。B
  3. B2つのエントリを開始します。次のストロークを見てください:B
  4. B/B何も開始しません。最長の以前のマッチ(B)をとり、それを出力します( "bee")
  5. output B= "bee" Bであるため、バッファーにはまだストロークがあります。2つのエントリが始まるので、次のストロークを見てください。C
  6. B/C1つのエントリに一致します。「から」を出力し、次のストロークで新たに開始します。A
  7. A3つのエントリを開始します。次のストロークを見てください:B
  8. A/B2つのエントリを開始します。次のストロークを見てください:C
  9. A/B/C1つのエントリのみに一致します。「アルファベット順」を出力し、次のストロークで新たに開始します。A
  10. A3つのエントリを開始します。次のストロークを見てください:B
  11. A/B2つのエントリを開始します。次のストロークを見てください:D
  12. A/B/D何も一致しないため、以前の最長一致(A/B)を使用し、それを使用して「アルファベット」を出力します。それはDまだバッファに残っています。
  13. Dは2つのエントリを開始するため、通常は次のストロークを調べますが、すべてのストロークを処理したので、それを個別に検討します。単独では「犬」と解釈されるため、出力します。

注意すべき上記の側面:

  • 読んだがまだ翻訳していないストロークのバッファがある。
  • できる限り多くのストロークを単一のエントリと常に一致させたい。A/B「alpha」や「bee」ではなく、「alphabet」に翻訳する必要があります。
  • (上記には表示されていません)ストロークのシーケンスが辞書にあるものと一致しないため、翻訳できない場合があります。(Stenoの人々は名詞「untranslate」を使用します-たとえば、私たちの辞書では、ストロークEは「untranslate」になります。)
  • (上記には示されていません)ステノの理論の中には、より広いコンテキストに基づいて、同じストロークセットが複数のものを意味することを許可しているものがあります。ステノの人々はこれらを「紛争」と呼んでいます。あなたはおそらくプロジェクトでそれらを許可したくないでしょう、そして実際にstenoがstenographerによって手動で翻訳されていたとき、彼らは文のどこで正しい選択が何であったかだけで知っていたので、衝突は問題ありませんでしたが、増加しました機械翻訳では、ステノの競合のない理論が特に生じ、翻訳されたテキストを調べて競合を「修正」する必要がなくなりました。
  • リアルタイムで翻訳すること(つまり、そうすること)は、部分一致を受け取った場合、次のコードを待つ間、それを保持する必要があることを意味します。バッファにあるものをできる限り翻訳します。(あるいは、タイムアウトを望まないかもしれません。それはあなたの呼び出しです。)
  • おそらく、「前のストロークを無視する」というストロークが最も良い
  • おそらく「何も出力せずにバッファを完全にクリアする」というストロークを付けるのが最善です。

6
@I__:一部のプログラムはキーボードデバイスと直接通信しようとするため、「sendkeys」のようなインターフェースではうまく機能しません。うまくいけば、これが私がこれに最後に対処した数年前よりも今では一般的ではなくなっているといいので、私が言うように、メカニズムのような「送信キー」から始めて、必要な場合にのみ他のものを心配します。(おそらく、(MIDIから受信するのではなく、それ自体で)送信キーをテストする簡単なプログラムを実行することをお勧めします-特別なキーシーケンスを含みます-そして、あなたが制御したいソフトウェアでそれをテストしてから、あまりに遠くまで進みます。)
TJクラウダー

7
この聞いたことがない人のために、あなたが記述辞書は基本的にトライ(発音「試し」)
アダム

14
@I__:それを言うために書くこと興味深い。もう何が欲しいですか?私はあなたがする必要があることの重要な側面の多くに対処したと思います。私はしていない行って、私が行うために他のものを持っており、事前に構築されたソリューションを知っているために発生しませんので、それを、また持っている人を指摘しました。しかし、ソリューションの構築に関しては、私はあなたを正しい方向に向けたと思います。
TJクラウダー2011

2
すべてのコードを線形配列でジャムし、midiイベントを受信するたびにトラバーサルを実行しても、顕著な減速が発生しないことに注意してください。トライを使用すると、時期尚早な最適化の匂いがします。
FeepingCreature 2012年

5
@FeepingCreature:私が速記者や法廷記者とこれを行っていたとき、彼らの辞書は数十万のエントリにすぐに出くわすことができました(私は100万のマークを破ったものを覚えています)。最適化戦略を使用することについては、それほど時期尚早ではなく、12 MHz 386を扱っていました。I___の場合、もし彼がArduinoのアイデア(これは本当にクールなアイデアです)を採用している場合、彼も現代のかなりパワー不足のハードウェアを扱うことになりますが、もちろん私たちのものよりも途方もなく高速です。彼の辞書は劇的に小さくなる傾向があると思いますが、...
TJクラウダー

184

USB(またはPS / 2?)キーボードをエミュレートするハードウェアで何かを行うことを検討してください。特定のOSや特定のOS APIに依存しなくなります。ハードウェアソリューションは時の試練に耐えます。他のすべての人がWindows 11を実行しているときに、Windows 7で古いAPIを使用して困ることはありません。 Arduinoはとても簡単に習得できます。

たくさんの情報があり、Arduinoのために役立ちます。初心者向けに構築されたハードウェアハッキングプラットフォームです。グーグルがArduinoを推進している今、それはさらに大きくなるでしょう

編集:仮想USBキーボードソフトウェア およびハードウェア


私はこれにArduinoを使用するアイデアが大好きです。ただし、メモリが問題になる可能性があります。設計済みの最大のボードには256kのフラッシュが搭載されているようです(そのうち8kはブートローダーで使用されます)。かつては、DOSでのマシンショートハンドのリアルタイム翻訳/表示/編集を1Mに詰め込んでいました(たとえば、通常の640kとEMSまたは拡張メモリのいずれか)。自身で250k以上)がディスク上にあった。ここには表示も同時編集もないので、それは良いことですが、辞書は小さくなければなりません...
TJ Crowder

ああ、それは何でもない。私は、私たちが使用した非常にコンパクトな形式で保存されていても、数メガバイトのサイズの辞書を持っている法廷記者を日常的に扱っていました。私が個人的に見た最大のものは4.5MBでした-そして再び、それは非常に圧縮された形式で保存されました。それとピアノのキーボードよりもステノキーボードのキーの数が少ないという事実を組み合わせてください...それでも、ArduinoにはUSBポートがあるので、辞書はUSBフラッシュアダプターまたは(外部電源の)SSDまたはHDD。
TJクラウダー、

2
@ arduino(pjrc.com/teensy)の代わりにティーンエイジを検討して、メモリを大幅に増やし、キーボードを直接エミュレートできます。すでに多くのArduinoライブラリと互換性があり、互換性のないライブラリはピンの再割り当てが必要です。-代わりに、atmegaは16 MBの内蔵フラッシュを備え、約30ドルのコストのデモボードも作成します(at90usbkey)
Marc

8
コンピュータに便利なピアノのインターフェースを設計することは簡単なことではありません。IMHO、OPはまず自分の現在の環境でプロトタイプを作成する必要があります。次に、OPが自分のニーズを満たす場合は、移植性を心配する必要があります。もちろん、ポータブルな代替手段がそれほど難しくない限りは。
エミリオMブマチャー

111

自分でこれを構築する方法についてのアドバイスを求めているのではなく、必要なことを達成するためにすでにどのリソースがすでに存在しているかを尋ねているように思えます。OSによっては、独自のプログラムを最初から作成しなくても、これを実現する多くの方法があります。

MIDIストローク

自由。Mac OS X 10.3以降の場合。これには特に、「MIDIキーボードを本格的なコンピュータキーボードの代替品として使用する機能」が付いています。

ボメのMIDIトランスレータ

無料/ポストカードウェア(少し奇妙です)。以下のためのWindows 2000およびアップ、およびMac OS X。最初はAutoHotkeyタイプの使用により適合しているように見えますが、さらに見ると、あなたが望むことをうまく実行できると思います。

Maxおよびaka.keyboard

自由。以下のためのMac OS X。「すぐに使える」ソリューションというわけではありませんが、基本的なデバイス構成に慣れていれば、悪くないはずです。


49

MIDI DotNetの .NETのソースコードサンプルを使用してハードウェアにアクセスできます。

MIDIノートデータストリームを作成するためのソースコードとして完全に機能するサンプルはVB 5 / 6-Tipp 0521にあります: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での方法にはMidiOxツールとAutoHotKeyツールが関係している思います。別のときに、Max / MSPの Javaプラグインを使用するバージョンがありました。私は信じていパトリスコレは同様に働いていた純粋データの外部窓を作ったが、私はもうそれを見つけるように見えることはできません。また、Windowsでこれを行うことができるMaxMSPの外部があります。最後に、フリーではないが素晴らしいOsculatorはあなたがやりたいことを実行できます-機能ページを参照してください。

私はそれを機能させたとき、レイアウトでツールを止めることができなかったので、私はそれにこだわることはありませんでした。でも、私の電子キーボードにモニターを置いているだけでクールでした!幸運を。


37

MIDIについて

あなたは「MIDIについて何も知らない」と述べました。MIDIテクノロジーは、理解すればかなり簡単ですが、最初は混乱する可能性があります。MIDIの基礎(MIDIインタラクションをプログラムしたい場合は確かに必要です)を理解する上で非常に役立つリソースの1つは、Technophobe用MIDIと呼ばれる本です。それは読みやすい本であり、非常に役立ちます。


純粋なデータと最大

インタラクティブマルチメディアの開発経験で、どのデバイスからの信号/入力の接続とマッピングを容易にする2つの非常によく似たプログラムがあります。

これらは、Mac環境ではMax、PC環境ではPure Dataです。どちらにも大量のオンラインドキュメントとYouTubeチュートリアルがあります。ビデオMax / MSPチュートリアル1-コンピューターのキーボードをmidikeyboard(アブルトンスタイル)として使用すると、コンピューターのキーボードをMIDIキーボードの入力にマップするMaxに組み込まれたプログラムを示します(これは基本的に、実行しようとしていることと正反対です)。同じパターンを使用して目的の結果を得ることができますが、信号/マッピングを逆にします。


AutoHotKey

AutoHotKeyは、デバイスのキーとボタンをマクロに再マッピングできる、Windows用の無料のオープンソースユーティリティです。QWERTYキーボード、ジョイスティック、マウスマクロをネイティブでサポートしています。

しかし、私はあなたが探している特定のマッピングをサポートする実装を見つけることができました。これらの2つのスレッドはプロセスを説明します。

  1. AutoHotkeyでの MIDI INサポート、使用例の説明。著者は、 MIDI IN入力を検出し、それをキープレスに変換できるプログラムを探していました。

  2. MIDI入力ライブラリ、作成者の問題の解決策、および実際に目的の結果を実装するAutoHotKeyへのポストされたコード/パッチ。

基本的に、AutoHotKeyは、このユーザーのカスタムパッチと共に、MIDIキーボードからQWERTYキーボードの入力信号へのマッピングを作成するために必要なものを提供します。マッピングをインストール、構成、定義するだけで済みます。


他に何か?

他の回答のいくつかは、一般に、MIDIとMIDIプログラミングに関するはるかに広範な情報を提供していますが、あなたの投稿によると、それはあなたが探しているものとはかなり思えません。できればもっとお役に立てればと思いますが、探している情報の種類を具体的に教えていただけると助かります。たとえば、MIDIキーボードの入力信号をQWERTYキーボードの信号に変換する方法にもっと興味がありますか。それとも、特定の問題に対する標準の解決策見つけることに主な関心がありますか。まだ対処されていないことを何を探していますか?


27

Teenysマイクロコントローラーを使用すると、独自のUSBキーボードをすぐにハッキングできます。

実際、彼らはUSBキーボードの作り方のサンプルコードを持っています

この2つの方法にアプローチできます。

  1. 古いピアノを手に入れて、ティーンエイジャーに直接スイッチを接続してください

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


これは最も有望な答えです。デバイスを完成させれば、どのコンピューターやOSでも動作するからです。仕事に取り込んだり、キーボードを気にせずにコンピュータをアップグレードできることに満足してください。私は2つのTeensyデバイスを使用し、それらをI / Oピンで接続します。TeensyはすでにUSB MIDI pjrc.com/teensy/td_midi.htmlをサポートしているので、コードはキーボードのteensyとmidi teensy間の信号の移動を処理する必要があります。
マイケルディロン

24

実際、私はこれに少し前に取り組んで、ロックバンドのドラム入力をコンピューターに取り込もうとしました(少しJava自家製のドラムエミュレーターを作成しています)とにかく、それについてここで質問しました、時間遅延の問題(そこにポーリングコードがあります) 、私がやろうとしていたことと一緒に。)。そして、自分のプログラムを見つけてコードを提供できる場合は、サードパーティAPI(JInput)を使用しています。

いずれにせよ頑張ってください。


23

BomeのMIDIトランスレータをお試しください。

クロスプラットフォームで動作し、MIDI入力をキーストロークに簡単に変換でき、セットアップと構成が迅速であり、個人での使用は無料です。

チュートリアルがあります、クイックヒント:MIDI変換– MIDIからキーストローク簡単な設定方法の。

基本的に、コードや修飾キーなど、実行できることには無限の可能性があります。ピアノを使ってDAWを制御するライブオーディオリグとして使用していますが、問題が発生したことはありません。


18

Javaでは、JMF(Java Mediaフレームワーク)を使用してMIDI信号を変換できます。キーボード設計の基本、つまりユーザーインターフェイスは使いやすいです。頻繁に使用する文字/記号を手元に置いておきます。

JavaサウンドリソースのサンプルコードとAPI :例:デジタル信号処理(DSP)は、信号の処理方法を理解するのに役立ちます。

さらにいくつかの参照:


15

GlovePIEというプログラムがあります。簡単なスクリプト言語でプログラミングできますが、MIDIをサポートしていると思います。これが「Java」カテゴリに当てはまるかどうかはわかりませんが、それでも素晴らしいプログラムです。PS3コントローラーを使用してロボットを制御するために使用しました。それは非常に強力です。


15

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

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

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


12

速記を学ぶだけ!

あなたの側のすべての議論から明らかです。技術的な観点から、ホイールを再発明する必要はありません。しかし、接続が確立されて(この質問が何を求めているか)作動し始めても、作業の大部分はまだ先に進んでいます。脳を訓練する必要があります。また、そのための賢くて効率的な方法を考案する必要あります。設計上の問題は、コンピュータ技術者の慣習から生まれたものです。あなたまたは私たちのいずれかが不足します。

幸い、何世紀にもわたって成熟してきましたが、問題は解決され、磨かれてきました...

速記を学ぶ!

はい、これでジャックが戻ります。しかし、何百時間ものあなたの時間の価値は何ですか、そして結局、あまり好ましくない結果ですか?さらに、速記ウィキペディアの記事には、「ピアノのキーボードのように見える」と書かれています。

もちろん、余興効果を出したいのでなければ。私は認めざるを得ません、私はこの可能性について決して考えませんでした、誰かがピアノの鍵盤からテキストをバストアウトするのを見るのは本当に面白いでしょう!

あなたは、で始まる可能性がタッチパッドとUSBキーボード(またはポインティングスティックより人間工学的でしょうか?)、使用チドリをそれを翻訳するために、彼らはのために不可欠であるとして、(私は必ずそれが非文字キーは、その機能を保持できるように構成することができますよプログラミング)、または、スレッドRe:Ploverキーボードに従って、独自のUSB速記キーボードを転がすか、またはstenotypeを購入ます。

幸運を!


速記キーボードの{および}はどこにありますか?次のように、単語ではない名前をどのように入力しpthreadますか?
bobobobo 2013

ウィキペディアのリンクは間違っており、en.wikipedia.org
wiki / Stenographyである

11

MAMEアーケードゲームをご覧ください。彼らは、さまざまなアイテムからの入力を可能にするハードウェアデバイスを構築しています。IPACは、例えば、USBへの入力デバイスからの変換信号は、コンピュータは、次に、エミュレートキーに使用することができます。入力を解釈するためのソフトウェアは既に完了しており、十分にテストされているため、クレイジーなプログラミングロジックが不要で快適に思えるように配置された入力デバイスの任意の組み合わせを使用できます。

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


10

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

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

  2. MIDIデータをキーストロークに変換するスキーム。一人のユーザーが指摘したように、鍵の数はピアノの鍵の数に依存しないので、コードは進むべき道です。

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

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

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

上記の別の見方は、Arduinoを使用するための上記の投稿のようなものですが、USBベースの音楽キーボードを処理するためにSparkfunのUSBホストシールドも含まれています。これにより、Arduinoをブートローダーチップのキーボードまたはキーボードマウスコンボとしてプログラムでき、デバイスはUSBベースの音楽キーボードのUSBホストとして機能できます。次に、両方のタイプについて説明します。ただし、仮想シリアルポート方式の方が柔軟性があり、長期的にはプログラミングが容易になると思います。Arduinoデバイスは、デスクトッププログラムやサービスよりも変更が困難です。

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


7

.NET DirectSoundインターフェイスのようなものを使用して、MIDIデバイスに接続するのはかなり簡単です。ターゲットMIDIデバイスを識別し、着信メッセージをリッスンするコードを取得する必要があります(Google経由でこれを行う方法に関する記事があります)。

MIDIをキーボードとして使用しているので、基本的に、検出する必要があるMIDIメッセージは2つしかありません。つまり、ノートオンとノートオフです。MIDIメッセージは、コマンド、ノート、ベロシティを指定する3つのデータバイトです。ノートオフはノート番号のみです(「悪い」MIDIスタックはゼロベロシティでノートを送信することもあります)。

メッセージを翻訳したら、キーボード出力は.NETからかなりシンプルになるはずです。

他の回答には専門性に関する多くのアドバイスがあります。私はあなたに実際のMIDIメッセージのアイデアを与えたかっただけです。幸運を!


:注意点として文書「MIDIデバイスのユニバーサルシリアルバスデバイスクラス定義は、」MIDIメッセージの非常に整頓概要与えusb.org/developers/devclass_docs/midi10.pdf
サイモン・旅館

7

サウンドカードを介して外部MIDIキーボードをコントローラーとして再生すると、(使用するオペレーティングシステムやDAWプログラムに関係なく)より良い、より良い結果が得られます。次に、それをGBソフトウェア(または何でも)にルーティングし、トーンがリアルタイムでその方法で提供した多くのサウンドを生成します。

サウンドカードがMIDI I / O(ins / outs / thrus)をサポートしていない場合は、問題ありません。外部MIDIテーブルトップコンバーターの調査と投資を検討できます。多くは、MIDI出力をUSB 2.0にさらに変換するために装備されています(既存のサウンドカードを完全にバイパスします)。

たとえば、コンピュータキーボードと鉛筆ツールを使用して、ZキーとXキーのキーを変更するオプションを使用して、「人間のような」グレースノートの結果を取得するのはかなり困難です。代わりに、自分の指でMIDIキーボードを使用して、自分の物理的なオクターブレジスター範囲から演奏することができます—すぐに!

予算の制約が関係しているのではないかと思います。しかし、Radio Shackで100.00米ドル(*以下)で販売されている、これらの安っぽく見える「カシオ」タイプ5オクターブキーボードのいくつかは、必要なものすべてです(さらに、オンボードサウンドパッチとシーケンサーモジュールのサウンドとハンドルの一部)他のものについても驚くほど良いです)。

RadioShack MIDIキーボードオプション

既存のサウンドカード用の外部MIDIコンバーターについては、特にMacプラットフォームを念頭に置いて、次のようにいくつかのGoogle検索を実行しました。

この外部MIDI変換情報の多くは、最初は扱いにくいかもしれません。そのため、考慮事項と予算を考慮して、「ユーザーフレンドリー」なものとして分類しました。

DAWを使用する場合、仮想キーボードをVSTとして容易にすることには何の問題もありません。彼らは彼らの場所を持っています。

しかし、あなたは熟練したキーボード奏者のように聞こえます。それでは、先ほど触れた外部MIDI変換/キーボードオプションを検討してみませんか?

幸運と私はこれがあなたのために働くことができ、あなたのために働くいくつかのアイデアを与えたことを願っています!


6

自分でプログラミングしたくないが、問題を解決したいだけの場合は、USB-MIDIキーボードを購入するだけで、MIDI出力ではなくQWERTYキーボード出力信号を送信するためのキーを再割り当てできます。M-Audio Axiom Proの

MIDIキーボードは標準のQWERTYキーボードとして識別されるため、この方法は、標準のUSBキーボードをサポートするすべてのOSおよびすべてのコンピュータで機能します。


特定のキーストロークにもコードを割り当てることが可能かどうか知っていますか?たとえば、C MAJOR和音を演奏する場合、「the fox jumped」に翻訳できますか
l --''''''--------- '' '' '' '' '' ' 「

あまり早く答えられなかったので申し訳ありません、私は4日間休暇を過ごしました;)いいえ、残念ながら、キーごとに1つのQWERTYコードしか割り当てることができないので、標準キーボードとしてほとんど機能します。
Martin Odhelius、2012年

ところで、購入する場合は、PRO-oneを購入することを忘れないでください。非PROバージョンにはQWERTY割り当て機能がないと思います。
Martin Odhelius、2012年

コードごとに1つのキーだけでコードをASCIIコードに割り当てることはできないと思いますが、仕事から家に帰ったら、今夜自分のAxiomでこれを確認します。
Martin Odhelius、2012年

qwertyコードは、コントロールボタン(ファンクションキー、ドラムパッド、テンキーなど)にのみ割り当てることができ、キーボードの実際のピアノキーには割り当てられないことに気づきました。私はこのキーボードを自分で所有していて、ASCIIコードを任意のキーに割り当てることができると確信していましたが、実際に試してみると、それが間違っていることに気づきました。大変申し訳ありませんが、何らかの方法で報酬を元に戻すことはできますか?
Martin Odhelius、2012年

6

シンプルなAutoItスクリプトを使用して、MIDIイベントを読み取ることができます。MIDI 入力を参照してください。

また、MIDI UDFが必要で、キープレスシミュレートします

MIDIイベントの読み取りは簡単ですが、MIDIコントローラー(楽器)によって機能が異なります。まずMIDIピアノで何ができるかを調べてから、これらの機能をシミュレートされたQWERTYキーボードプレスにどのように最適にマッピングできるかを確認してください。

必要であれば、あなたはあなたが(のために、である何をしているかを見るのを助けるために、画面上やトレイに何かを持つことができShiftCtrlおよびAltシミュレーション)。


5

あなたはコード付きキーボードを見るかもしれません。それらには、使用する前にドライバーを作成する必要がないという利点があり、ピアノキーボードのレイアウトに似ているものもあります。


5

Javaでのコーディングを知っている場合は、次の方法を使用できます。

まず、実装するjavax.sound.midi.Receiverとしsend(..)「Note on」イベントを必要なキーストロークにマッピングメソッドを使用ます。

MidiMessageのコンテンツをそのgetMessageメソッドで取得し、自分のやり方で解釈する必要があります。メッセージバイトの意味はMIDIメッセージにありますます。

特定のキーボードキーの「ノートオン」または「ノートオフ」を受け取った後、C#4-> KeyEvent.VK_Aなどのように、KeyEventクラスの定数を割り当てることにより、それを好きなキーにマップできます。 。次に、このキーコードをjava.awt.RobotのkeyPressおよびkeyReleaseメソッドで使用して、キーストロークを実際にOSに、したがって他のアプリケーションに送信できます。


4

私はブライアンオデルの回答に同意します。これが私のプロジェクトである場合、ハードウェアで実行します。それはプラットフォームとハードウェアに依存しないという利点があります-あなたのボックスはMIDI-USBインターフェースとPC APIの必要性を置き換えます。

mbedは、習得が非常に簡単な高速プロトタイピングプラットフォームであり、Arduino IMHO(オンラインコンパイラ、512 KBフラッシュ、96 MHz、C ++言語)よりも優れています。それは持っているUSBキーボードインタフェースとAを USB MIDIインターフェイスを、あなたのために事前に書かれています。

コミュニティは非常に友好的であり、喜んで助けてくれます。MIDIとUSBの両方の隠しエミュレーションを使用する既存のプロジェクトはたくさんあります。YouTubeで「mbed MIDI」などを検索してください。


4

Linuxを使用している場合はFootwareをお試しください

それはまさにあなたが探しているものでなければなりません-もしあなたがあなたの好みのキーマッピングにMIDIピッチを調整するなら...

これが私以外の誰かに役立つとは思いませんでした; o)


2
vimの中で家庭の行を残して最小限に抑えるために-管理者としての私の前の仕事で私は私の机の下の足コントローラを持っていた
FlashKorten


1

これはそれほど難しくありません。

私はあなたがWindowsを使用していると仮定していますが、それについてはわかりません。私はMIDIシーケンサーhttp://pianocheetah.comを昔ながらのC ++で作成しました。これにより、ピアノのキーボードを使用してコマンドを実行できます。キーをキーボード入力ストリームにプッシュするために同じことを実行できなかった理由はありません。

しかし、今来てください。そもそもキーボードを習得するのにどれくらいの時間がかかったか覚えていますか?もう一度やり直しますか?そして、あなたは祝福されたキーボードをあちこちにある愚かな見た目の主要なシンボルの束で汚染しても構わないでしょうか?

少なくとも26の英字、10の数字、11の句読点、および少なくとも12のファンクションキーとそれらのシフトされた状態を使用する必要があります。つまり、60個のキーとシフトされた状態になります。これで5オクターブのキーが完全に燃焼します。あなたはピアノの「ホップ」=すべて=の時間をします。タッチタイピングに別れを告げます。

RSIから身を守ることができますませんが、あなたは自分のために別のタイプの悪夢を作り出しました。

そして、上司に職場でMIDIキーボードを買ってもらえれば幸いです。

本当にピアノを弾くことを学んだなら、ストレスのない演奏法を学んだことでしょう。QWERTYキーボードでそれを行います。緊張はありません。ゆっくり始めて。


親切な言葉をありがとう、しかし私はこのことについて私のお尻を解決し、それをオープンソースにするつもりはありません-すみません。しかし、やるべきことはmidiInOpen()を使用することです。MIDI入力を処理するためのコールバックを提供します。ノートダウンイベントを除くすべてを無視し、MIDIノートをキーボードのキーにマップして、キーボードの入力ストリームに挿入します(そのためのAPIを忘れていますが、少なくとも1つはあるはずです)。
スティーブンヘーゼル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.