MP3プレーヤー
とは言ってもまだ完成はしていないが。
いやー、ここまで結構大変だった。
使用したライブラリ(タグ取得、サウンド再生等)を直接使うと、
変更した場合の修正が大きいため、違いを吸収するためのラッパークラス的なものをいくつか作ったのだが、これに結構時間がかかった。
さらに、タグ情報だけでも、ファイルによって「アルバムアーティスト」があったりなかったり、「トラックアーティスト」も同様だったり、これだとリストで表示したときに見難いし、ソートもできない。
また、タイトルやアルバム名、アーティスト名が大文字だったり小文字だったりもしている。
これらを統一表示させるための工夫も必要となり、そのあたりでも時間をくってしまった。
次に時間がかかったのは、ボタンをアイコン表示にしようとしたこと。
アイコンだと、
・通常状態
・クリック時
・不使用時
と画像が3種類必要となる。
画像ソフトで予め3種類用意しようとしたが、途中で
「アイコンくらい、起動時にプログラムで修正してしまえばいいのでは?」
とか思ってしまったもので、あれこれと調べて時間がかかった。
できることはわかって、後回しにすることにしたのだが。。。
それから、設定ファイル。これもあれこれ回って結局Popertiesクラスを使うことで落ち着いた。
わけがわからなかったのがサウンド再生で使ったBasicPlayer。
シークすると、それ以降のプログレスイベントのときに、現在位置がおかしくなるという事象が発生。
まあ、結局はラッパーにしたクラスで問題があったのだが、
これが一概にこちらが悪いともいいきれない。
イベントのコールバックの引数で曲情報が渡さえれてくるのだが、
それを使ったためにおかしくなったのだった。
イベントの最初に送られてくる情報を保存しておき、プログレスイベントではそれを使わないといけないようだ。
だけど、渡してくるんだから、そっちを使うのが人情というものだろうと思ったりもする。
あと困ったのが、ボリュームの問題。
最初、ボリュームが9(0から100まで)でそこそこの大きさになる。
普通に使うレベルを考えると0から12くらいがいいところ。
さらに、そんな感じだとメモリを1つ動かすのも微調整が必要。
うーん、最初は動きが大きく、終盤で小さくなるようなことはできないか?
考えたら、ありました。対数。
対数の計算なんて、すっかり忘れている。
そこで、またあれこれと実験をして、ようやく自然な感じになりました。
ボリューム用のスライダーでは普通に0から100までの値を設定し、
スライダーの変更時には、スライダーの値からライブラリの引数用の値を計算し、設定する。
その計算はラッパークラスで行った。
なんだかんだと、細々したところで結構時間がかかっています。
いやー、ここまで結構大変だった。
使用したライブラリ(タグ取得、サウンド再生等)を直接使うと、
変更した場合の修正が大きいため、違いを吸収するためのラッパークラス的なものをいくつか作ったのだが、これに結構時間がかかった。
さらに、タグ情報だけでも、ファイルによって「アルバムアーティスト」があったりなかったり、「トラックアーティスト」も同様だったり、これだとリストで表示したときに見難いし、ソートもできない。
また、タイトルやアルバム名、アーティスト名が大文字だったり小文字だったりもしている。
これらを統一表示させるための工夫も必要となり、そのあたりでも時間をくってしまった。
次に時間がかかったのは、ボタンをアイコン表示にしようとしたこと。
アイコンだと、
・通常状態
・クリック時
・不使用時
と画像が3種類必要となる。
画像ソフトで予め3種類用意しようとしたが、途中で
「アイコンくらい、起動時にプログラムで修正してしまえばいいのでは?」
とか思ってしまったもので、あれこれと調べて時間がかかった。
できることはわかって、後回しにすることにしたのだが。。。
それから、設定ファイル。これもあれこれ回って結局Popertiesクラスを使うことで落ち着いた。
わけがわからなかったのがサウンド再生で使ったBasicPlayer。
シークすると、それ以降のプログレスイベントのときに、現在位置がおかしくなるという事象が発生。
まあ、結局はラッパーにしたクラスで問題があったのだが、
これが一概にこちらが悪いともいいきれない。
イベントのコールバックの引数で曲情報が渡さえれてくるのだが、
それを使ったためにおかしくなったのだった。
イベントの最初に送られてくる情報を保存しておき、プログレスイベントではそれを使わないといけないようだ。
だけど、渡してくるんだから、そっちを使うのが人情というものだろうと思ったりもする。
あと困ったのが、ボリュームの問題。
最初、ボリュームが9(0から100まで)でそこそこの大きさになる。
普通に使うレベルを考えると0から12くらいがいいところ。
さらに、そんな感じだとメモリを1つ動かすのも微調整が必要。
うーん、最初は動きが大きく、終盤で小さくなるようなことはできないか?
考えたら、ありました。対数。
対数の計算なんて、すっかり忘れている。
そこで、またあれこれと実験をして、ようやく自然な感じになりました。
ボリューム用のスライダーでは普通に0から100までの値を設定し、
スライダーの変更時には、スライダーの値からライブラリの引数用の値を計算し、設定する。
その計算はラッパークラスで行った。
なんだかんだと、細々したところで結構時間がかかっています。
Comments