2009-07-25 18 views
8

MIDIファイルを複数のトラックで(時系列に)読み込む最も良い方法は何ですか? (Java)MIDIファイルを読む

注:私はMIDIファイルを再生したくないだけで、メッセージを読むだけです。

カップルのアイデア:

は、1/64分音符より短い何のノートイベントが存在しないと仮定することは安全ですか?または私はすべてのトラックを訪問し、唯一の他のすべてのダニ後に次の目盛りに移動

  • は、1/64分音符を超えないMIDIイベント短いがあるとし、その修正デルタによって現在位置のティック数を移動追跡しなければなりません。
  • ログイン次回早いダニ
+1

1/64分音符を想定するのは安全ではなく、たとえば1/128も存在します。ただし、データが1バイトに格納されていると仮定することは安全です。 (あなたはMidiMessageクラスを使って評価することができます)。 –

+0

@yxkまた、MIDIファイルから適切な楽譜を作成するのが好きです。あなたが私を起動させるために案内してくれましたか? – Kalpesh

+0

アンビルスタジオには、ミディファイルからシートミュージックを印刷する$ 60のオプションがあります。 また、MIDIファイルを読み取るオープンソースのJavaオプションは誰もが知っていますか? –

答えて

0

Javaではにすべてのトラックや進捗状況、あなたがして、MIDIファイルを読むことができます:

try { 
     Sequencer sequencer = MidiSystem.getSequencer(); 
     sequencer.setSequence(MidiSystem.getSequence(yourMidiFile)); 
     sequencer.open(); 
     sequencer.start(); 
     while(true) { 
      if(sequencer.isRunning()) { 
       try { 
        Thread.sleep(1000); // Check every second 
       } catch(InterruptedException ignore) { 
        break; 
       } 
      } else { 
       break; 
      } 
     } 

} catch(Exception e) { 
     System.out.println(e.toString()); 
} finally { 
    // Close resources 
    sequencer.stop(); 
    sequencer.close(); 
} 

このコードが複数ある場合でも(あなたのMIDIファイルをお読みくださいトラック)

+0

私は必ずしもシーケンスを再生する必要はありません、トラック内のイベントメッセージを取得するだけです – yxk

+0

@srandこれは単なる例であると仮定しています.MidiSystem、SequenceおよびTrackクラスを使用して格納されているMidiEventを読み出すことができますファイル。 –

+0

@ジャスパーええ、それは私が現在行っていることですが、MIDIファイルのシリアル/シーケンシャルな読み込みです(年代順ではありません)。 – yxk

3

JFugueは、MIDIファイルを読み取り、メッセージを時系列順に並べ替えることができます。

結果はJFugue MusicStrings(Cシャープ、5オクターブ、全音符= "C#5w"など)として読み込むことも、独自のParserListenerを記述してMidiParserに出力して出力することもできますあなた自身のテキスト。