最近MIDIファイルの読み込みと再生を実装していたのだが,ウェザタイと同じように,60fpsごとにそれまでに出さなければならなかった音を出すという形にするとかなり重い。これに描画とMIDI inの処理を入れると相当なスペックを要求するソフトになってしまう。普通のMIDIプレイヤーってどうやってるんだろう。
で,MIDIファイル読み込みはだいたいできたので,とりあえずいろんなMIDIファイルを入力してみたが,どうしても解析に失敗するMIDIファイルがある。調べてみるとどうもメタイベントのあと,メタイベントの前のランニングステータスを引き継ぐ前提で作られているらしい。つまり1.MIDIイベント-2.メタイベント-3.MIDIイベントで,3の部分で1のランニングステータスを引き継いでいる。MIDIファイルの規格書を見てみても「メタイベントはランニングステータスをキャンセルするしランニングステータスは適用されない」としか書いてないのでどっちだかいまいち分からない。まあそういうシーケンサがあるんだから対応しろってことだろうけど。
物理の時もそうだったけど,勉強しながら開発するから進みが遅い。もう少し形ができてきたら,音楽に詳しいはっぱさんやまっちーさんに協力を依頼するかな。