昨日は長い1日だった...他にも雑事があったので、コードを書いた時間が長大だったわけではないけど。
4日目にして初めて気付いた事実がある。JetPlayerがOnJetEventListener.onJeyEvent()に乗せて送信するイベントはcommon controlだけだった(!) ノートオンやノートオフが一切送信されてこない。そもそも引数の数が足りない(ということで気付いた)。これではこのプロジェクトそのものが実現不可能だ。
普段ならこれで諦めているところだけど、昨日はどうやら妙なスイッチが入っていたらしく、それならばもうJetPlayerの制限を超える独自のMIDIプレーヤを作ってしまえ、と考えたのだった。portmidi-sharpで作ったMidiPlayerを移植すれば難しくないだろうと。
そこで早速移植作業を開始したのだけど、ほどなくSMFライブラリも移植しないといけないことに気付いた。そしてこれがハマりどころだった。SMFライブラリの移植はけっこう大変だった。C#のunsignedなbyteを前提に書かれたコードは、Javaに持って行くにあたって全面的に修正を余儀なくされた。
昨日の作業のほとんどはこれに持って行かれたのだけど、ファイルを食わせて解析中にエラーが出ることはない、というところまでは持って行けた。これが動作するかどうかは分からない。あとMidiPlayer自体も、CLIのスレッドのAPIとは全然違うJavaのスレッドAPIに書き換えた部分がちゃんとうまく動くかどうかも全く分からない。
昨日といい今日といい、そこそこ再利用性のあるコードを書いているような気がする。内容はぐちゃぐちゃだけど。
とりあえず、それまでは/sdcardにコピーしてあったjetファイルを直接読み込んでいたのを、midファイルを3日目のsmf2jetでdalvik上で変換して読み込ませるようにした。ファイル操作のAPIも分からなくていろいろハマったのだけど、とりあえずgetContext()してごにょごにょやる方法があることを把握した。これでSMFを渡すだけで再生できるようになった。
あとはMidiPlayerがうまく動いて、イベントディスパッチがうまくいって、描画が出来て、ファイルが選択できるようになれば(今は固定のファイルを読んでいる)、proof of conceptとしては十分だろうか。今日中にうまくできると良いのだけど...
Leave a comment