iTunesでCDから取り込んだ m4aファイルの情報をダンプする簡易プログラムをLinux上で作成してみました。プレーヤ上で使わないであろう部分に関してはbox構造を解析することなくスキップすることにして、試行錯誤しながら興味ある部分だけを追いかけてみました。
曲のメタ・データに関してはilst box内にあるようですが、ISO/IEC 14496-12ではこのbox typeは定義されていないので、この部分はダンプを調べながら自己解釈して表示したものになっています。標準の別の部分で定義されているのかもしれませんし、そもそもudta が
最後のmdatのboxが実際のトラックの楽曲データを格納しているboxです。この部分がAACになっているハズなので、16進数で頭の方をダンプしてみました。この部分が正しいAACデータであることが確認できればいいので、いろいろ探し廻ったところ、この記事のこの図に辿り着きました。赤字の部分がAACデータとのことなので、最初の2バイトが
曲のメタ・データに関してはilst box内にあるようですが、ISO/IEC 14496-12ではこのbox typeは定義されていないので、この部分はダンプを調べながら自己解釈して表示したものになっています。標準の別の部分で定義されているのかもしれませんし、そもそもudta が
User Dataですので、Apple独自だったりするんでしょうか?曲名や演奏者、アルバム名は取得方法がわかって一安心です。どうやら日本語の場合には、UTF8でエンコードされているようです。
% ./mpeg4dump 14CAT.m4a 00000000(00000020) ftyp M4A M4A mp42 isom 00000020(000094e9) moov 00000028(0000006c) mvhd version = 0 Timescale: 44100, Duration: 8502272 --> 192 sec 00000094(000089a9) trak 0000009c(0000005c) tkhd 000000f8(00008945) mdia 00000100(00000020) mdhd 00000120(00000022) hdlr 00000142(000088fb) minf 0000014a(00000010) smhd 0000015a(00000024) dinf 0000017e(000088bf) stbl 00000186(00000067) stsd 00000196(00000057) mp4a Channel: 2, Samples: 16, Sampling rate: 44100 000001ed(00000018) stts 00000205(00000028) stsc 0000022d(000081d0) stsz 000083fd(00000640) stco 00008a3d(00000acc) udta 00008a45(00000ac4) meta 00008a51(00000022) hdlr 00008a73(00000451) ilst 00008a7b(00000021) .nam 00008a83(00000019) data 00008a8b: CAT'S EYE 00008a9c(0000001e) .ART 00008aa4(00000016) data 00008aac: 杏里 00008aba(00000024) .alb 00008ac2(0000001c) data 00008aca: ザ・杏里 00008ade(0000001b) .gen 00008ae6(00000013) data 00008aee: Pop 00008af9(00000020) trkn 00008b01(00000018) data 00008b09: 14 00008b19(0000001e) disk 00008b21(00000016) data 00008b29: 1 00008b37(0000001c) .day 00008b3f(00000014) data 00008b47: 1986 00008b53(00000019) cpil 00008b5b(00000011) data 00008b6c(00000019) pgap 00008b74(00000011) data 00008b85(0000001a) tmpo 00008b8d(00000012) data 00008b9f(00000037) .too 00008ba7(0000002f) data 00008baf: iTunes 9.0.1.8, QuickTime 7.6.4 00008bd6(000000bc) ---- 00008bde(0000001c) mean com.apple.iTunes 00008bfa(00000014) name iTunSMPB 00008c0e(00000084) data 00008c16: 00000000 00000840 0000026C 000000000081B154 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00008c92(00000077) ---- 00008c9a(0000001c) mean com.apple.iTunes 00008cb6(0000001b) name Encoding Params 00008cd1(00000038) data 00008cd9: 1986359923 00008d09(000000a2) ---- 00008d11(0000001c) mean com.apple.iTunes 00008d2d(00000014) name iTunNORM 00008d41(0000006a) data 00008d49: 00000468 00000494 000039C5 00003EBE 00011F87 00011F87 00005D9F 00005D31 00027492 0001C0FA 00008dab(0000007a) ---- 00008db3(0000001c) mean com.apple.iTunes 00008dcf(0000001b) name iTunes_CDDB_IDs 00008db3(0000001c) mean com.apple.iTunes 00008dcf(0000001b) name iTunes_CDDB_IDs 00008dea(0000003b) data 00008df2: 15+07F3A9686FAC013975351AE84B4D91FF+2161923 00008e25(0000009f) ---- 00008e2d(0000001c) mean com.apple.iTunes 00008e49(00000035) name UFIDhttp://www.cddb.com/id3/taginfo1.html 00008e7e(00000046) data 00008e86: 3CD3N19R31408325U178A4F3CFEDFC86FFD0F5B21E332C865A08P1 00008ec4(00000645) free 00009509(000001dd) free 000096e6(005f962b) mdat 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 68 1c 21 00 03 40 %
最後のmdatのboxが実際のトラックの楽曲データを格納しているboxです。この部分がAACになっているハズなので、16進数で頭の方をダンプしてみました。この部分が正しいAACデータであることが確認できればいいので、いろいろ探し廻ったところ、この記事のこの図に辿り着きました。赤字の部分がAACデータとのことなので、最初の2バイトが
21 00となっており、それっぽい感じではあります。この部分からAACデコーダに喰わせれば、曲の再生ができるんじゃないかと思います。