2012年06月25日

MP4ファイル音声の書き込み 第1部



faacエンコーダーを介してWAVE音源データAACストリームにエンコードして、MP4ファイルに書き込むプログラムについて解説します。



MP4ファイルAAC音声メタデータを書き込むためには、faac 1.26のインストールで入手したライブラリの中のmp4v2プロジェクトが必要となります。VisualC++NET2008以上のバージョンがあればそのままでも使えますが、今までVisualC++NET2003で解説してきたので、敢えてVisualC++NET2003で新たにプロジェクトを作成します。

まずはVisualC++NET2003を起動し、メニューから「ファイル」/「新規」/「プロジェクト」を選択して、「新規プロジェクト」ダイヤログを表示させます。テンプレートは「Win32 Project」、プロジェクト名は「libmp4v2-vc7」、「ブラウズ」ボタンを押してプロジェクトフォルダーを作成するフォルダーを「faac」と同じフォルダーに設定し、「OK」ボタンを押します。



「アプリケーションウィザード」の「アプリケーション設定」タブにて、アプリケーション形式は「Static Library」を選択し、追加オプションの「Precompiled Header」のチェックを外し、追加サポートの「MFC」のチェックも外してから「完了」ボタンを押します。



「libmp4v2-vc7」プロジェクトが作成され、内容がソリューションエクスプローラに表示されます。



ソリューションエクスプローラで「libmp4v2-vc7」プロジェクトを右クリックして、ポップアップメニューから「追加」→「既存ファイルの追加」を選択し、「faacフォルダー」→「commonフォルダー」→「mp4v2フォルダー」にあるすべてのファイル(CPPファイルとヘッダーファイル)をプロジェクトに追加します。



ソリューションエクスプローラで「libmp4v2-vc7」プロジェクトを右クリックして、ポップアップメニューから「プロパティ」を選択し、「構成プロパティ」→「C++」→「コード生成」タグで、「Runtime Library」の欄を「Multi-threaded Debug DLL (/MDd)」に変更します。



修正事項

メタデータ読み込みの際に、メモリーリークになる不具合の修正

「mp4property.cpp」の342行目をコメントアウトし、337行目のすぐ後に「MP4Free(m_values[index]);」を追加します。

void MP4StringProperty::Read(MP4File* pFile, u_int32_t index)
{
if (m_implicit) {
return;
}
MP4Free(m_values[index]); ←新たに追加する行
if (m_useCountedFormat) {
m_values[index] = pFile->ReadCountedString(
(m_useUnicode ? 2 : 1), m_useExpandedCount);
} else if (m_fixedLength) {
// MP4Free(m_values[index]); ←コメントアウトする行
m_values[index] = (char*)MP4Calloc(m_fixedLength + 1);
pFile->ReadBytes((u_int8_t*)m_values[index], m_fixedLength);
} else {
m_values[index] = pFile->ReadString();
}
}


最後にビルドしてエラーがなければ成功です。





posted by ひろし at 14:12| Comment(0) | AACファイルフォーマット | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。