ドコモ用着うたフルを作る(2)


着うたフルのミュージックフォルダへ3gpオーディオファイルを格納する最も簡単な(でも多少強引な)方法はこちらに書いた。
このオーディオファイルには様々な情報を埋め込むことが可能で、更に画像やテキストファイルなども格納できる。
格納には、それが格納されているという事を示す特定の文字列(atom)と格納文字数長、それに続く文字列で構成されている。
これらは可変長であり、atomそのものが無くてもデータとして間違いではない。
つまり、格納すべきデータのない項目(atom) はそれ自体が不要となる。
N902iXで表示される情報は以下の通り1.ファイル名2.ファイル種別3.ファイル制限4.再生制限5.まるごと着信音設定(fulm) 6.オススメ着信音設定(fmsp) 7.保存可能ジャケット画像(fmji) 8.保存可能画像9.保存可能歌詞(fmli) 10.タイトル(fmti) 11.アーティスト(fmar) 12.アルバム名(fmal) 13.年14.ジャンル(fmge) 15.コメント(fmcm) 16.トラック番号(trak) 17.作曲者(fmco) 18.作詞者(fmly) 19.権利者20.販売元(fmsa) 21.権利情報(fmri) 22.レーベル23.サイト接続(fmur) 24.オーディオ25.ビットレート26.再生時間27.取得元28.保存日時29.本体(miniSD)への移動このように多くの情報の埋め込みが可能だが、一部の情報はダウンロードやメモリへの格納の仕方によって決まるものもある。
例えば再生制限やコピー(移動)の可否などはダウンロード時の設定によって変えられる部分だ。
またこの項目すべてを格納しなければならないわけではなく、項目(atom)自体がないものは「不明」と表示される。

これはバイナリデータの先頭部分である。
赤く色が付いている部分はデータのバイト数を表している。
例えばA5番地の13は、その後の文字列であるfmti(タイトルを示すatom)の文字バイト数を表している。
atomの基本的な構成は、[バイト数][atom]00 00 00 00 2A 0E[Title文字列]00 00 00 となる。
ここで言うバイト数はatomも含んでいるので、例えば
13 66 6d 74 69 00 00 00 00 2a 0e 45 49 54 4c 45 00 00 00
__ f m t i __ __ __ __ * __ T I T L E __ __ __
(_は、ASCII文字列以外を示す) 上記のような構成となる。
9D番地の8Cはこれら各種atomを含んだバイト数を表し、17番地は更に前方のデータを含んだバイト数を示している。
同様に
14 66 6d 61 72 00 00 00 00 2a 0e 41 52 54 49 53 54 00 00 00
__ f m a r __ __ __ __ __ * A R T I S T __ __ __
fmal アルバムfmsa 販売元fmcm コメントfmli 歌詞fmji タイトル画像その他のデータとして以下がある。

09 7f 66 75 6c 6d 00 00 00 12 66 6d 73 70 00 00 00 00 00 01 00 00 00 00 00
__ __ f u l m __ __ __ __ f m s p __ __ __ __ __ __ __ __ __ __ __
この例では(可変長なので必ずしもこのアドレスが絶対ではない)E9番地を01にすると着信音設定が「不可」になり、00にすると着信音設定が「可能」になる。
なおQuickTimeProで作成した3gpファイルにはfulm,fmspのato
自体が存在しないので、dcmaの6バイト後から挿入する必要がある。
atomなどを挿入すると前述のバイト数が狂うので、当然そこも修正する必要がある。
これらの作業を手で行うのはとても面倒だ。
Perlでプログラムを書いてしまえばなんと言うことなく出来るのだが、それでは説明にならない。
なので、ここはサンプル音源ファイルを元に手作業で(!)変更を試みる事にする。
なお面倒なので変更は最小限にする。
まずはQuickTimeProで3gpファイルを作成する。

これがQTproで作成したファイルだ。
まずはファイル先頭部分をミュージックファイル化する為に変更を行う。

これが最低限の変更であり、こちらに書いたとおりだ。
ただし書式的には誤っている。
誤ってはいるが最初限度の変更でミュージックファイルとしたということだ。
ここから最小限の変更と言うことで、タイトルとアーティストのフィールドを入れてみることにする。

03番地はその後のatomとデータが変わったので、レングスを書き直す。
17番地はタイトル等々のデータ数が増えたので変更する。
同様に9D番地も、その後のatomやフィールドが増えているので値を書き換える。
atomの前の数値は先述したように、フィールドのデータ数に応じて値を設定する。
fmarの後のfulm,fmspは着信設定をするために必要なので追加した。
注意点としては、データレングスを示す値が誤っていると必ずエラーになるので間違いの無いように計算すること。
fmtiやfmarを編集して文字数が変わった場合、そのatomのレングスを変えるのは当然だが、これに伴ってfmifの所とmoovの所の値も変わるので注意しなければいけない。
実を言うとオススメ着信設定はfmspの後にその情報を書くのだがここまで来ると手動での変更は面倒すぎるし、そこまで正確に追求していくのが疲れた(秒数指定が良く分からない)のでやっていない。
その他のフィールドに関しても説明しようかと思ったが、基本構造さえ理解できれば後の操作は考えていただきたい。
事は単純なのだが検証した上で説明するのは結構面倒なのである。
結局の所atomフィールドが分かればだいたい分かるのではないかと思う。
このatomの編集や追加に有用なソフトと情報がこちらにあるので参考に願いたい。
前回のミュージックフォルダへのデータ格納方法を公開した後、タイトルを入れるにはどうすればいいかとかバイナリをいじるには何を使ったらいいかなどの質問が来た。
ケータイのアクティブユーザが中高生だと言うこともあり、興味は人一倍あるのだろうしそれは結構なことである。
だが自分で調べる努力も惜しまないでいただきたい。
教えるのは簡単なことだが、それでは応用が利かない。
結局ずっと誰かに聞き続けることになるのは自らにとって少しもプラスにならない。
きついことを書いたが、何せ「○○を教えてください」一行だけのメールが来たりするとさすがにイヤになるのだ。
着うたフルを着信設定することにどれほどのメリットがあるのかは不明だ。
オススメ設定ならば使い道もあろうが、でもサビだけとかだったらiモーションでも良いのではないかなと思う。
ちなみに私は単なる興味だけで解析したものであり、実は携帯電話で音楽を聴く趣味はない。
データの解析をやってみようと思っているあなた、atomはfm○○という書式が多いことが分かるだろう。
レングスを変えないようにして、fmaa〜fmzz(!)までやってみたら面白いことが分かるかも知れない。
もしもエラーでDL出来なくなった場合、なぜそうなるのかを良く考えることが成功につながる。
また画像や歌詞の埋め込みは外部ファイルを使うことになるので、それなりに面倒だ。
外部ファイルといっても外部ファイルを参照するのではなくデータに埋め込むわけだが、まさか画像データをバイナリエディタでは書けないだろう。
そうそう、タイトルに漢字などを入れたいと思う方もおられるだろうが、漢字コードなんて限られているのだから各自実験していただきたい。
すごく不親切な説明で申し訳ないのだが、ドコモ自体が仕様を公開していない類でもあるし、著作権法に著しく違反するサイトが存在するのもまた事実なので私としても複雑なのである。
なお説明が不十分な点を実際のファイルで見ていただこうというわけで、以下にデータを用意しておく。
なおこのデータが著作権に反するようであれば即刻公開を中止する。
iモーションで着信可能なデータ
最も簡単にミュージックフォルダに格納する為の変更を加えたもの
タイトルとアーティストのデータを入れたもの