2013-09-04 9 views
5

MIDIファイルを取得して読み込み、ある種のデータ構造でデータを保存したいと考えています。MIDIをJavaデータ構造に変換する(リスト、ハッシュマップ、???)

Reading MIDI Files

は今、私はその出力を取得し、それを格納するための方法を把握する必要があります。このサイトを使用して、私は魔法のように動作したファイルを、読みやすい方法を見つけました。ハッシュマップは、キーが一意である必要があり、Object型のリストがあまり見えないので理想的ではないようです。私の最善の選択肢が何であるかに関する考え方。私はそれをテキストまたはCSVに出力するかもしれないと思います...思考?

更新:私が既に持っているものについてのもう少し詳細。ここで

は私が(のSystem.out.printlnを通じて)取得しています出力されます:

@0 Channel: 1 Note on, E5 key=76 velocity: 127 
@192 Channel: 1 Note off, E5 key=76 velocity: 64 
@192 Channel: 1 Note on, D#5 key=75 velocity: 127 
@384 Channel: 1 Note off, D#5 key=75 velocity: 64 
@384 Channel: 1 Note on, E5 key=76 velocity: 127 

は今、私はこの情報を格納する最善の方法を見つける必要があります。私はおそらく "なぜ"私もこれをやろうとしていることについて積極的にすべきです。私は、このデータを取得し、それを画面に表示するためにBatik(私は何も知らない)を使用する別の開発者と協力しています。すべての応答のための

おかげで...私はそれらの各今夜をよく見るよ... MIDIファイルの仕様を読む

+1

まずからMIDIファイル構造の

情報。あなたの問題の名詞と動詞は何ですか? –

+0

単にcsvを出力したい場合は、csvを出力してください。なぜあなたはそれをデータ構造に入れてからcsvを出力する必要がありますか? – Bill

+0

ホバークラフト、私はもう少し詳細を表示するために私の質問を編集しました。私の問題の名詞と動詞は、MIDIイベント(ノートオン、ノートオフ、ベロシティ、トラックなど)と "ストア"または "書き込み"になると思います。私はすでに名詞に関して必要な出力を生成しています...動詞を達成するという点で最良の選択肢が何であるかはわかりません... – user2745258

答えて

4

、私はあなたが

public class MIDIFile { 
    enum FileFormat { 
     single_track, 
     syncronous_multiple_tracks, 
     assyncronous_multiple_tracks; 
    } 

    FileFormat file_format; 
    short numberOfTracks; 
    short deltaTimeTicks; 

    //Create Class for tracks, events, put some collection for storing the tracks, 
    //some collection for storing the events inside the tracks, etc 

    //Collection<Integer, MIDITrack> the type of Collection depends on application 

} 

public class MIDITrack { 
    int length; 
    //Collection<MIDIEvent> the type of Collection depends on application 
} 

public class MIDIEvent { 
    int delta_time; 
    int event_type; //Use of enum or final variables is interesting 
    int key; 
    int velocity; 
} 

のようなものの作成を開始することができると思いますあなたが唯一のMIDIメッセージ(そうではないMIDIファイル)を保存したい場合は、メッセージ

public class MIDIEvent { 
    int delta_time; 
    int channel; 
    int event_type; //Use of enum or final variables is interesting 

    //two bytes, interpret according the message type 
    byte byte0; 
    byte byte1; 

    //or more memory consuming 
    byte key; 
    byte pressure; 
    byte controller; 
    short bend; 
} 

のためのクラスを行うことができ、あなたが店に使うコレクションのタイプは、アプリケーション固有になりますリストの要素にアクセスする方法、その他

コレクションにMIDIMessagesを挿入し、最初から最後まで読み込む場合は、LinkedList(Listの実装)を使用できます。 しかし、メッセージとアクセス要素をインデックスで修正する場合は、ArrayList(Listの実装もあります)を使用します。あなたは、データ構造を考える前に、私が思うに、必要なオブジェクトとメソッドを考える必要があるhttp://faydoc.tripod.com/formats/mid.htm

+0

ディエゴ、私は道を見ていない限り、私は思います私はArrayListオプションを使うつもりです。私はこれを手に入れて働くときにコードを掲示します。答えに余計な努力をしてくれてありがとう...非常に徹底的で役立つ。 – user2745258

関連する問題