iTunesでCDから取り込んだ m4aファイルの情報をダンプする簡易プログラムをLinux上で作成してみました。プレーヤ上で使わないであろう部分に関してはbox構造を解析することなくスキップすることにして、試行錯誤しながら興味ある部分だけを追いかけてみました。
曲のメタ・データに関しては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デコーダに喰わせれば、曲の再生ができるんじゃないかと思います。