3日連続リリース(笑)。Ron’s Piano1.2.3a2を一応アップしました。外見は変わってないですが、MIDI周りは全然別物。今までは、録音=MIDIエンコードという作りだったんですが、録音の際はNotePlayerに渡すパラメータ群だけ記録して、停止ボタンを押すとエンコードにとりかかるという作りにしました。キーダウンに対するレスポンスは約12倍(笑)。キーダウンを処理している部分のステップ数が4分の1ぐらいになってます。
これは高速化の手法として使えるなと思ったんですが、あるクラスのプロパティを変更するときに、条件分岐が伴う場合、Window1などの中でやるよりも、そのクラスにメソッドを作ってしまった方が速いんですねぇ。例えば、Ron’s Pianoの鍵盤が押し下げられた状態になるのを、今まではWindow1というメインのウインドウのメソッドでやってたんですが、これをCanvasをスーパークラスとするCanvKeyクラスのメソッドでやらせるだけで、処理速度が2倍以上速くなります。自分のプロパティを変更する方がメモリへのアクセスが速いのかなぁ? ポインタとか分からないから、理由は分からないですけど。
これ以上削ると、機能が維持できないところまでコードを削っちゃったので(実際、さっきまでMIDIをちゃんと出力できなかった…)、もっと高速化するにはCでPluginを書くしか方法が無さそう……。
で、今はキーナビゲータのコードを書き直してます。「解析しています」っていうメッセージが必要のないレベルまで高速化したいな……。このウインドウへのオーバーヘッドもあるのかも知れませんが、ここが遅いんですよ。現状では、キーナビゲータを表示した状態でMIDI録音すると、多少(1~5ms)タイミングがずれるかも。分解能480で5以下のクロックですけど、クォンタイズしなくちゃならないですね、このくらい誤差が出ると。
ちょっと昨日からの時間割を。
11/5 23:00~11/6 3:00 RbJMLのチャットに参加。
11/6 3:00~10:00 コーディングと朝食
11/6 10:00~12:00 仮眠
11/6 13:00~21:00 仕事
11/6 22:30~11/7 0:30 仮眠
11/7 1:00~現在 コーディング + これ書いてる
し、死ぬ(笑)。このくらいRbって面白いんですわ、ホントに。これで17,500円(だっけか?)は安過ぎ。