昔から、趣味で MP3 のプレイヤーを作っている。
まぁ、自分で実装しないでも、沢山のクールなプレイヤーがあるけど、自分としては、全画面で、OpenGL を使って、車載 PC 用のソフトとしたいので、コツコツ実装している。
※ある程度「型」になったら、発表する事が出来ると思う。
何故自分で作ろうかと思った、その背景には、組み込み機器向けにも転用するとか、専用ハードでアプリをコントロールしたいとか、理由は色々。
一番の動機は「面白そう」だからー(笑)
-----
最近は、データベース関連の実装を進めているけど、その前に、MP3 TAG 情報関係をスマートに扱う必要があるのだが、これが結構厄介な問題を含んでいると判った。
MP3 タグを扱うには、オープンソースでは、「libid3」がメジャーと思うが、規模が大きく、機能も豊富で、他のライブラリーに依存しているのが、扱いにくい。
※純粋に MP3 タグの部分だけパース出来れば・・・
ネットを見渡すと他には「libid3tag」なるソースコードもある。
http://sourceforge.net/projects/mad/files/
「libid3tag」は、ソースコードは取得出来るものの、既に開発は止まっているようで、最低限の機能しか無いが、C で書かれていて、逆に最低限の機能しか無い事が、コンパクトな機器などにも向いているように思う。
自分は、「libid3tag」導入が簡単と思った為、こちらを組み込んだが・・・
色々問題を抱えてしまった・・・
まず、良くある話だが、「MP3 TAG を埋め込む側のソフトウェアー」問題が複数ある。
これは、MP3 のタグ情報を埋め込む際、そのソフトウェアーのバグによって、規定とは違った方法で情報が埋め込まれてしまっている事が沢山ある。
規定外のタグ情報は、無視すれば良いと思うかもしれないが、そんな曲データが沢山あると、無視も出来ない事になる。
※iTunes のように、非常に多くのユーザーがいるアプリケーションでも例外では無い。
-----
最近この対応を行った点としてー、MP3 の TAG に「APIC」と言う画像を添付する規定があるが、特定の iTunes で作成した MP3 をパースした際、画像を取得できない場合がある事が判明したー。
良く調べてみると、画像に関するテキスト情報フィールドで、それが無い場合には、当然「0x0」を埋め込む必要があるのだが、それが抜けている為、次のフィールドデータを浸食してしまい、結果、画像情報ヘッダーの一部が無くなってしまい、画像を特定できなくなってしまう。
別のプレイヤーで試したが(もちろんiTunesでも)、この規定外の MP3 ファイルでも、ちゃんと添付画像を表示できる。
そこで、この腐った MP3 を何とかする方法を考えて、対応したが、これからもこんな事が色々あるのだろうなと思う・・・(泣)
まぁ、最低限パースの際にクラッシュしなければ合格なんですけどね・・・