マイコン工作実験日記

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

MPEG4ファイル形式について調べる

2009-12-04 00:41:12 | MP3プレーヤ
AACのデコーダを見つけたのはいいのですが、デコーダだけではプレーヤに必要な機能要件を満たすことができません。それは、曲名等のメタ・データを抽出する機能はデコーダには含まれていないからです。MP3の場合にMP3デコーダとは別にID3タグの解析をする必要があったのと、ちょうど同じ理屈です。Helixプロジェクトにはプレーヤも含まれているので、メタ・データに関する処理もプレーヤを調べれば見つかるのでしょうが、せっかくなので自分で調べて作ってみようと思います。

AACという名前を聞いたことはあっても、iTuneとかに関してもまったくの無知であるわたしにとっては、全てが新たに学ぶことばかりです。

  • まず、iTuneでCDから曲データを取り込むと、m4aという拡張子が付くことを知る。オジサン丸出し。どうやら、MPEG4だがVideoを含まないAudioだけのファイルであることを示す拡張子であるらしい。AACという形式で圧縮されたオーディオデータが、MPEG4形式のファイルに格納されているということになる。
  • AACのデータをMP4に格納する際のフレーム形式が、いくつか存在するらしい。Helixのデコーダは、ADTS, ADIF, rawの3種類に対応している。Andresさんのコードを読むと、m4aの拡張子の場合にはrawとして扱っているようだ。
  • つまりは、MPEG4のファイル形式に基づいて、ファイルの中に含まれるメタ・データを抽出するとともに、実際の曲データの開始位置を見つける必要があるようだ。ところが、AndresさんのコードにはMPEG4ファイルを解析している部分が見当たらない。
  • MPEG4ファイル形式の概要については、このサイトの説明が実際のイメージがつかめて解りやすかった。基礎資料として紹介されているISO/IEC 14496-12が基本となるISOのメディア形式を定めており、MP4ファイルはこの形式に基づいているようだ。と、いうわけでこの標準もダウンロード。


つまりは、Andresさんのコードそのままじゃ、iTuneのm4aファイルを再生することはできないようで、自分で音声データ部分の頭出しをやってやる作業は必要なようです。また、Andresさんのコードではサンプリング・レートやサンプル・ビット長を44.1K/16bitで決め打ちしているようですが、こういう情報も本来であればm4aファイルを解析して得らるはずのようです。資料もざっと眺めてみましたが、曲名などのメタデータの格納形式については上記のISO/IEC資料には含まれていませんでした。実際にiTuneで作成したm4aを調べてみた方が良さそうです。

そんなわけで、自分でm4aのファイルを解析する簡単なプログラムを作ってみる必要があるという結論に達しました。