マイコン工作実験日記

Microcontroller を用いての工作、実験記録

MPEG4ファイル形式について調べる - その2

2009-12-09 01:05:51 | MP3プレーヤ
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デコーダに喰わせれば、曲の再生ができるんじゃないかと思います。