FC2ブログ

ホーム > MP3ファイルフォーマット Archive

MP3ファイルフォーマット Archive

MP3ファイルの再生 第1部



ウィンドウズのオーディオコーデックは、ACM(Audio Compression Manager)によって管理されており、標準でデコードのみ可能なMPEGLAYER3コーデックが装備されています。本章ではこのACMを介してMP3ファイルのデコードを行い、同時に再生するプログラムについて解説します。


...続きを読む

MP3ファイルの再生 第2部



MP3ファイルの読み込み手順は以下の通りです。

  1. MP3ファイルを開いて、ID3v2ヘッダー/ID3v1フッターの有無を調べます。
  2. フレームヘッダーを探し出し、そのデータからMPEGLAYER3WAVEFORMAT構造体を作成します。同時に一番最初のフレームヘッダーの先頭位置をMP3データの先頭位置として保存し、ファイルサイズからこの先頭位置とフッターがあればフッターサイズを差し引いて、MP3データサイズを算出します。
  3. 作成したMPEGLAYER3WAVEFORMAT構造体から、デコード後のWAVEFORMATEX構造体を取得します。
  4. ACMストリームをオープンします。
  5. MP3データのブロックサイズから変換後のWAVE音源データのブロックサイズを取得します。
  6. MP3の総データサイズから変換後のWAVE音源の総データサイズを取得し、WAVE音源データのブロックサイズの平均値を算出します。(再生中における再生位置変更時に、ファイル上での相対位置を算出するために必要になります。)
  7. 作業用バッファを確保して、ACMストリームヘッダーを作成します。
  8. 先に取得したWAVEFORMATEX構造体を元にWAVE出力デバイスを開きます。
  9. WAVE出力デバイスからのコールバックイベントから呼び出されるオーバーライド関数(StreamIn関数)において、MP3ファイルからMP3データを読み込み、WAVE変換して得られた音源データをダブルバッファに書き込みながら演奏していきます。
  10. ファイル末尾まで読み込むか、演奏停止イベントがあればWAVE出力デバイスを停止してから閉じます。
  11. 次のファイルが読み込まれるか、デストラクタが呼び出されれば、ACMストリームヘッダーを削除してから、ACMストリームをクローズします。



...続きを読む

libid3tagのインストール



MP3ファイルのid3タグを読み込むライブラリーですが、現在ウェブ上で入手できるものに、以下の二つのフリーライブラリーがあるようです。

  1. 「id3lib」.....id3v2.3.0対応、UNICODEはUTF16のみ対応。
  2. 「libid3tag」.id3v2.4.0対応、UNICODEはUTF16/UTF16BE/UTF8に対応。


上記二つのライブラリーを比較検討した結果、今回はid3v2.4.0にも対応した「libid3tag」を選びました。

...続きを読む

ID3タグの読み込み 第1部



今回は、MP3ファイルID3タグを読み込むために、libid3tag-0.15.1bというフリーライブラリを使用してみました。尚libid3tag-0.15.1bの扱いについては、前回のlibid3tagのインストールをご参照ください。


...続きを読む

ID3タグの読み込み 第2部



ID3タグを含んだ音楽ファイルからID3Fileクラスを使って、ID3タグを読み込む手順は以下の通りです。

  1. ID3FileクラスのインスタンスをID3タグを含んだ音楽ファイルのファイル名を指定して作成するか、或いはファイル内の音楽データを演奏しながら同時にID3タグを読み込む場合は、ファイル名を指定せずに作成します。
    libid3tag-0.15.1bにおいて、ファイル内の音楽データを演奏しながら、同時にファイル内のID3タグを読むというようなことは出来ないようです。)

  2. ファイル名を指定せずにID3Fileクラスのインスタンスを作成した場合は、ファイルから直接読み込んだID3タグの生データを、CID3File::Parse関数に入力してID3タグの内容を解析します。

  3. CID3File::Parse関数の戻り値や、CID3File::GetFrameCount関数で取得したフレーム数を元に、CID3File::GetFrame関数を使ってフレームの内容を順に読み出し、リストビュー等のコントロールを用いて結果を表示します。




...続きを読む

ID3タグの読み込み 第3部



「ID3タグの読み込み 第3部」では、MFCを使った用例とサンプルプログラムを紹介します。


...続きを読む

ID3タグの書き込み 第1部



今回は、ID3タグ編集用ライブラリ「libid3tag-0.15.1b」を使用して、ID3タグMP3ファイルに書き込む方法を解説します。尚ID3タグ編集用ライブラリ「libid3tag-0.15.1b」のインストールについては、libid3tagのインストールをご参照ください。


...続きを読む

ID3タグの書き込み 第2部



CIDFileクラスを使って、ID3タグへの編集/書き込みする手順は以下の通りです。

新たにフレームを作成して、ID3タグに追加/挿入する場合。
  1. ID3タグが存在しない場合は、CID3File::TagNew関数を呼び出して、ID3タグを新たに作成します。
  2. 追加するフレームIDを引数に入れてCID3File::InsertFrameNew関数を呼び出し、新規フレームの作成とID3タグにフレームへの追加/挿入をします。
  3. メンバー変数のCStringクラス文字列に必要なデータを設定した後、CID3File::SetFrame関数を呼び出してID3タグの内容を変更します。
  4. CID3File::Update関数を呼び出して、ID3タグの内容をメモリ或いはファイルに書き込みます。
ID3タグの読み込み 第2部」の手順に従って読み込んだ、ID3タグの内容を修正する場合。
  1. 修正するフレームの内容をCID3File::GetFrame関数で、メンバー変数のCStringクラス文字列に読み出します。
  2. メンバー変数のCStringAクラス文字列を編集後、CID3File::SetFrame関数を呼び出してID3タグの内容を変更します。
  3. CID3File::Update関数を呼び出して、ID3タグの内容をメモリ或いはファイルに書き込みます。
ID3タグの読み込み 第2部」の手順に従って読み込んだ、ID3タグのフレームを削除する場合。
  1. 削除するフレーム番号を引数に入れてCID3File::DeleteFrame関数を呼び出し、フレーム番号のフレームを削除します。
  2. CID3File::Update関数を呼び出して、ID3タグの内容をメモリ或いはファイルに書き込みます。


...続きを読む

ID3タグの書き込み 第3部



「ID3タグの書き込み 第3部」では、MFCを使った用例とサンプルプログラムを紹介します。

...続きを読む

LAME ACMのインストール



ウィンドウズXPで標準で入っているMP3エンコード/デコードのためのACMコーデックは、Fraunhofer Institut Integrierte Schaltungen IIS社Fraunhofer IIS MPEG Layer-3 Codecですが、エンコードする場合のビットレートが最高でも56kbps、サンプルレートが24000Hzと低品質で音楽メディアとして、ハイレベルな鑑賞に堪え得るものではありません。
そこで今回はlame-3.98.4.tar.gzをネットからダウンロードして、ACMドライバを作成するまでの過程を解説します。

...続きを読む

MP3ファイルの書き込み 第1部



ACM(Audio Compression Manager)を介してWAVE音源データMP3ストリームにエンコードしてMP3ファイルに書き込む手順は、以下の通りです。

  1. MP3エンコードに必要なLAME ACMをインストールします。
  2. プログラムから、目的のACMドライバーを探し出します。
  3. ACMドライバーを開いて使用可能なエンコードフォーマットの中から、目的の仕様を満たすMPEGLAYER3WAVEFORMAT構造体を一つ選択します。
  4. エンコードに特別な仕様を要求しない場合は、システムが推奨するACMドライバーMPEGLAYER3WAVEFORMAT構造体を取得します。
  5. WAVE音源データ読み込み用のバッファサイズから、MP3ストリームを一時格納するための作業用バッファサイズを取得します。
  6. 作業用バッファを確保して、ACMストリームヘッダーを作成します。
  7. 読み込んだWAVE音源データMP3ストリームにエンコードして、MP3ファイルに書き込みます。
  8. WAVE音源データの読み込みが終了したら、ACMストリームヘッダーを削除してから、ACMストリームをクローズします。
  9. 独自にACMドライバーを選択してオープンしている場合は、ACMドライバーをクローズします。



...続きを読む

MP3ファイルの書き込み 第2部

id3libのインストール



MP3ファイルフォーマットカテゴリーではlibid3tagライブラリを使用してID3タグの読み書きを解説してきた訳ですが、「AACファイルフォーマットの読み込み」を書く段になって、このlibid3tagライブラリの限界が目立ってきたので、思い切って今一度id3libライブラリについても解説していきたいと思います。

今になって見えてきたlibid3tagライブラリの限界

  1. ID3v1タグの読み書きにおいては、ISO8859-1規格に厳密に従うので、シフトJISでの書き込みや読み込みができません。
  2. 書き込んだID3v2タグのバージョンはすべてID3v2.4タグになってしまう。つまりID3v2.2タグID3v2.3タグの書き込みが不可能なため、せっかく書き込んだ内容も、ウィンドウズのエクスプローラーや、ウィンドウズメディアプレーヤーSONYのMP3プレーヤーからはまったく読み込めません。
  3. バージョンID3v2.4で画像を書き込んだファイルを、ウィンドウズメディアプレーヤーで再生すると動作が不安定になり、場合によってはデッドロックを起こす場合があります。

以上の点からもバージョンID3v2.4以外は、id3libライブラリを使用したほうが無難のようです。

...続きを読む

ID3タグの読み込み(id3lib) 第1部



今回は、MP3ファイルID3タグを読み込むために、id3lib-3.8.3というフリーライブラリを使用してみました。尚id3lib-3.8.3の扱いについては、前回のid3libのインストールをご参照ください。


...続きを読む

ID3タグの読み込み(id3lib) 第2部



ID3タグを含んだ音楽ファイルからCID3Tagクラスを使って、ID3タグを読み込む手順は以下の通りです。

  1. CID3TagクラスのインスタンスをID3タグを含んだ音楽ファイルのファイル名を指定して作成するか、或いはファイル内のID3タグをバージョン毎に読み込む場合は、ファイル名を指定せずに作成します。

  2. ファイル名を指定せずにCID3Tagクラスのインスタンスを作成した場合は、ファイルから直接読み込んだID3タグの生データを、CID3Tag::Parse関数に入力してID3タグの内容を解析します。

  3. CID3Tag::Parse関数の戻り値や、CID3Tag::GetFrameCount関数で取得したフレーム数を元に、CID3Tag::GetFrame関数を使ってフレームの内容を順に読み出し、リストビュー等のコントロールを用いて結果を表示します。




...続きを読む

ID3タグの読み込み(id3lib) 第3部



「ID3タグの読み込み(id3lib) 第3部」では、MFCを使った用例とサンプルプログラムを紹介します。


...続きを読む

ID3タグの書き込み(id3lib) 第1部



ID3タグ編集用ライブラリ「id3lib-3.8.3」を使用して、ID3タグMP3ファイルに書き込む方法を解説します。尚ID3タグ編集用ライブラリ「id3lib-3.8.3」のインストールについては、id3libのインストールをご参照ください。


...続きを読む

ID3タグの書き込み(id3lib) 第2部



「ID3タグの書き込み(id3lib) 第2部」では、MFCを使った用例とサンプルプログラムを紹介します。

...続きを読む

すべての記事一覧

ホームへ戻る > MP3ファイルフォーマット Archive

タグクラウド
ブロとも申請フォーム

この人とブロともになる

ブロとも一覧

このページの先頭へ戻る