2016-06-20 12 views
0

私は、ピアノのMIDI入力(これはその一部)で演奏されているコードを認識するはずの学校プロジェクトのための小さなプログラムを作成しようとしています。MIDIピアノ入力のキーを押して離すことを区別する

私はこれまで、MIDIキーボードの各プレスと各リリースで、クラスShortMessageのオブジェクトを取得しています。

私の質問:キーが押されたか、リリースされたかをどうやって調べるのですか?いずれの場合も、プレスで とリリースは、静的変数NOTE_OFFは値128、変数NOTE_ON値を含まない144

私はキーが押されたり解放された場合、これは私に言うことになっている方法を得ることはありません。何か案が?根本的なことがありませんか?

ありがとうございます。

+1

* "いずれの場合(押して離しても)、静的変数NOTE_OFFには値128が入ります。 –

+1

[mcve]を含めてください。 –

+1

ちょうどFWIW、***非常に長い*****************************************************************************私は、彼らは0のベロシティで "ノートオン"イベントを送った。非常に混乱していた。 –

答えて

1

NOTE_ONおよびNOTE_OFFは単なる定数である。メッセージの実際のコマンド値(getCommand())をそれらと比較します。

ベロシティ(getData2())が0のノートオンメッセージは、ノートオフメッセージとして解釈する必要があります。

0

JFugueライブラリをアプリケーションに使用することをおすすめします。それはChord.fromNotes(Note[] notes)と呼ばれています...特に方法ノートの配列を指定してコードを返します - -

// You'll need some try/catches around this block. This is traditional Java Midi code. 
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); 
MidiDevice device = MidiSystem.getMidiDevice(infos[0]); // You'll have to get the right device for your MIDI controller. 

// Here comes the JFugue code 
MusicTransmitterToParserListener m = new MusicTransmitterToParserListener(device); 
m.addParserListener(new ChordParserListener()); 

// Choose either this option: 
m.startListening(); 
...do stuff... 
m.stopListening(); 

// Or choose this option: 
m.listenForMillis(5000); // Listen for 5000 milliseconds (5 seconds) 


public ChordParserListener extends ParserListenerAdapter { 
    List<Note> notes = new ArrayList<Note>; 

    @Override public void onNotePressed(Note note) { 
     notes.add(note); 
     // Go through your list and see if you have a chord 
    } 
    @Override public void onNoteReleased(Note note) { 
     // Remove the note from the list, might not be as easy as notes.remove(note) 
    } 
} 

JFugueはまた、あなたが役に立つかもしれませんChordクラスを持っていることは、あなたがしている課題を奪うしない限り、解決することを望んでいる。

関連する問題