はじめに
久しぶりにSMFプレイヤーの更新。
といっても前回の段階でSMFの再生の最低限の機能は実装されているので、今回は表示関連を中心にしました。
機能アップの種類
言語設定の追加
まずは、言語の設定。
生まれて初めて、言語の設定を行えるような機能追加をしました。ほら、これからは日本以外にも視野を広げる時代ですからね。
実装としましては、言語の設定は、辞書式にしました。
辞書ファイルはカレントディレクトリにある*.langファイルを自動で検索。また、リソースファイルの*.langを指定して選択できるようにしました。
辞書ファイルの中身は、xmlにしました。といっても、JavaのPropertiesクラスを利用して実装しただけですが。xmlにすると何が嬉しいかというと、辞書ファイルのエンコードを指定できるという点です。Javaは通常Unicodeなので、設定ファイルもUnicodeで書かないといけないですが、XMLでShift_JISと設定すれば、Unicode対応していないテキストエディタでも書き換えたりできます。
あと、ソフトの再起動しなくても、言語が変更されるところがこだわりポイントです。ほら、よく言語の設定をすると、ソフトの再起動が要求されるのとかあるじゃないですか。Timidity++とか。
キーボード機能の追加
次は、以前予告?していたキーボード。
キーボード。といってもチャンネル番号やら、使用している楽器などは表示していません。上からチャンネル1~16と。ポートAしか表示してません。
実装の話になりますが、キーボードの1つ1つが、キーボードクラスになっています。o(≧ω≦;)oしかも、その1つ1つがスレッドを持って描写しているという設計。ほら、キーボード1つのみ利用したいとかそういう場合に再利用できるし。鍵盤の大きさも、横の鍵盤数も自由に設計できるようになってます。出来る限り柔軟に柔軟に。ヾ(。・ω・。)
そういえば、描写の際に白鍵盤を先に描写してから、黒鍵盤を描写しないといけなくて、ちょっと面倒だった。描写用のクラスは、以前作成したゲーム描写用の下地のクラスを利用しているので結構高速動作。鍵盤の画像コピーも自前処理してます。もっと高速にするには、やっぱり白鍵盤3種類作って、押した時と離した時のみ描写しないといけないかな。
なお、このキーボードは全体を1回1回、目標fps10で描写しなおしてます^^;鍵盤は以外にfpsゆっくりでも気にならないものですね。
おわりに
以前のブログへ SMFプレイヤーをつくろう!リベンジ「出力ポート、MIDIと周波数の関係」
コメント
[…] 以前のブログへ SMFプレイヤーをつくろう!リベンジ「完成した」 続く… SMFプレイヤーをつくろう!リベンジ「言語の設定とキーボードの表示」 […]
[…] 以前のブログへ SMFプレイヤーをつくろう!リベンジ「完成した」 続く… SMFプレイヤーをつくろう!リベンジ「言語の設定とキーボードの表示」 […]