【音声コード】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」で結構です.
開発ボード上で運転が必要な場合は、以下を参照してください.
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