【音声コード】AACコードのFDK AAC
3958 ワード
最近はAACコードを作る必要があります.次のソースのAACコードライブラリを見て、総合的に考えて、最終的にfdk aacコードライブラリを選びました.主に以下の原因があります.
1.オープンソース、音質が良い(今はオープンソースAACエンコーダの中で一番音質が良いと考えています)2.音質、順番は大体libfdk_です.aac>libfaac>aac>libvo_aacenc 3.LC-AC、HE-AC、HE-AC V 2など様々なコードをサポートしています.
リンクをダウンロード
http://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html
コンパイル
現在はuuntuでプログラムを実行しています.私が使っているのはUbuntu 14.04です.他のlinuxの発行版は似ています.ダウンロードしたファイルを解凍して、Terminalは解凍ディレクトリに入り、「./configure」はデフォルトの設定を実行し、その後「make」、最後に「make install」で結構です.
開発ボード上で運転が必要な場合は、以下を参照してください.
FDK AACライブラリを使って符号化するのは簡単で、主にEnccoder初期化と符号化の二つの大部分である.
Ender初期化:
1.aacEncOpen()を呼び出して、必要な構成のエンコーダの例を割り当てる.関数のプロトタイプ:aacEncOpen(HANDLEKU AACENCODER*phAacEncoder、const UNT encModules、const UICNT maxChanels) 2.aacEncoderを呼び出しますSetParam()は符号化パラメータを設定するために、AOT、サンプリングレート、チャネルモード、ビットレート、伝送タイプのいずれも設定が必要です.関数プロトタイプ:aacEncoder_SetParam(const HANDLE祠AACEODER hAacEnccoder、const AACENC_param、const UNT value) 部分コードの例:
部分コードの例:
エンコード部分:
4.入力オーディオデータはサイクルで符号化します.aacEncEnco Enccode()に入力/出力パラメータを提供します.出力データをファイルまたはオーディオデバイスに書き込みます.5.aacEncCloseを呼び出してエンコーダの例を破棄します.
部分コードの例:
私が書いたプログラム例:
https://download.csdn.net/download/caiwenbin1101517886/10669383
1.オープンソース、音質が良い(今はオープンソースAACエンコーダの中で一番音質が良いと考えています)2.音質、順番は大体libfdk_です.aac>libfaac>aac>libvo_aacenc 3.LC-AC、HE-AC、HE-AC V 2など様々なコードをサポートしています.
リンクをダウンロード
http://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html
コンパイル
現在はuuntuでプログラムを実行しています.私が使っているのはUbuntu 14.04です.他のlinuxの発行版は似ています.ダウンロードしたファイルを解凍して、Terminalは解凍ディレクトリに入り、「./configure」はデフォルトの設定を実行し、その後「make」、最後に「make install」で結構です.
開発ボード上で運転が必要な場合は、以下を参照してください.
cd fdk-aac-0.1.6
export CC=arm-linux-gcc
export CXX=arm-linux-g++
./configure --prefix=/home/cwb/app/fdkaac --host=arm-linux
コード作成FDK AACライブラリを使って符号化するのは簡単で、主にEnccoder初期化と符号化の二つの大部分である.
Ender初期化:
1.aacEncOpen()を呼び出して、必要な構成のエンコーダの例を割り当てる.関数のプロトタイプ:aacEncOpen(HANDLEKU AACENCODER*phAacEncoder、const UNT encModules、const UICNT maxChanels) 2.aacEncoderを呼び出しますSetParam()は符号化パラメータを設定するために、AOT、サンプリングレート、チャネルモード、ビットレート、伝送タイプのいずれも設定が必要です.関数プロトタイプ:aacEncoder_SetParam(const HANDLE祠AACEODER hAacEnccoder、const AACENC_param、const UNT value) 部分コードの例:
if (aacEncoder_SetParam(paac_context->handle, AACENC_AOT, paac_context->aacenc_type) != AACENC_OK) {
printf("Unable to set the AOT
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_SBR_MODE, paac_context->sbr_enable) != AACENC_OK) {
printf("Unable to set the SBR MODE enable
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_SAMPLERATE, paac_context->sampleRate) != AACENC_OK) {
printf("Unable to set the AOT
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_CHANNELMODE, paac_context->enc_ch) != AACENC_OK) {
printf("Unable to set the channel mode
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_CHANNELORDER, paac_context->input_ch_order) != AACENC_OK) {
printf("Unable to set the channel order
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_BITRATEMODE, paac_context->bit_rate_mode) != AACENC_OK) {
printf("Unable to set the bit_rate_mode
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_BITRATE, paac_context->bit_rate) != AACENC_OK) {
printf("Unable to set the bitrate
");
goto error;
}
if (aacEncoder_SetParam(paac_context->handle, AACENC_TRANSMUX, paac_context->aac_format) != AACENC_OK) {
printf("Unable to set the ADTS transmux
");
goto error;
}
3.NULLパラメータでaacEncEncEnccode()を呼び出してエンコーダのインスタンスと既存のパラメータセットを初期化します.関数のプロトタイプ: aac Ence Enccode(const HANDLESHI AACENCODER hAacEnccoder、const AACENC_BufDesc*inBufDesc、const AACENC_BufDesc*out BufDesc、const AANC部分コードの例:
if (aacEncEncode(paac_context->handle, NULL, NULL, NULL, NULL) != AACENC_OK) {
printf("Unable to initialize the encoder
");
goto error;
}
4.aacEncInfoを呼び出して、現在のエンコーダの例に関する情報を取得します.関数のプロトタイプ:aacEncInfo 部分コードの例: if (aacEncInfo(paac_context->handle, &info) != AACENC_OK) {
printf("Unable to get the encoder info
");
goto error;
}
エンコード部分:
4.入力オーディオデータはサイクルで符号化します.aacEncEnco Enccode()に入力/出力パラメータを提供します.出力データをファイルまたはオーディオデバイスに書き込みます.5.aacEncCloseを呼び出してエンコーダの例を破棄します.
部分コードの例:
if ((aacEncEncode(paac_context->handle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) {
printf("Encoding aac failed
");
return -2;
}
if (out_args.numOutBytes == 0)
{
printf("Encoding aac out size is 0
");
return -3;
}
fwrite(m_aacOutbuf, 1, out_args.numOutBytes, outstream);
aacEncClose(&paac_context->handle);
私が書いたプログラム例:
https://download.csdn.net/download/caiwenbin1101517886/10669383