faac庫編碼PCM資料

2021-07-03 16:31:35 字數 3114 閱讀 6062

faac是乙個成熟的aac編碼庫。其提供的主要介面函式如下:

faacencopen

faacenchandle faacapi faacencopen 

(unsigned

long samplerate,

unsigned

int numchannels,

unsigned

long *inputsamples,

unsigned

long *maxoutputbytes

);

* samplerate *:取樣率

* numchannels *:聲道數

* inputsamples * :編碼時每次需要輸入的位元組數

* maxoutputbytes * : 編碼時輸出的最大位元組數

該函式主要是建立乙個編碼器,並且返回需要輸入的位元組及編碼返回的最大位元組數

faacencclose

void faacapi faacencclose( faccenchandle hencoder);
與上述介面相對應,關閉編碼器。

faacencgetcurrentconfiguration

faacencconfigurationptr faacapi faacencgetcurrentconfiguration( faccenchandle hencoder);
該函式獲取當前編碼器的配置

faacencgetcurrentconfiguration

faacencconfigurationptr faacapi faacencsetcurrentconfiguration

( faccenchandle hencoder,

faacencconfigurationptr config

);

該函式設定當前編碼器的配置

​faacencencode

int faacapi faacencencode

( faacenchandle hencoder,

int32_t *inputbuffer,

unsigned

int samplesinput,

unsigned

char *outputbuffer,

unsigned

int buffersize

);

* hencoder *:編碼器,通過faacencopen函式建立的

* inputbuffer *:輸入資料

* sampleinput *:輸入資料大小,如果為0,則編碼器會把換成的資料都給輸出

* outputbuffer *:存放輸出資料

* buffersize *:存放輸出資料的快取區大小,至少是和maxoutputbytes一樣的大小

該函式進行編碼

faacencconfigurationptr 結構

typedef

struct faacencconfiguration

faacencconfiguration, *faacencconfigurationptr;

簡單的介紹其中的幾個引數

mpegversion :mpeg版本, mpeg2/mpeg4

aacobjecttype:main/low/ltp

allowmidside:mid/side coding

uselfe:低頻增強

usetns:瞬時雜訊定形(temporal noise shaping,tns)濾波器

bitrate :位元速率

bandwidth:占用的頻寬

outputformat:輸出格式,0 =raw, 1 = adts

inputformat:輸入格式,faac_input_null/faac_input_16bit/faac_input_24bit/faac_input_32bit/faac_input_float

**如下
/* aac_encode.c */

#include

#include

#include

#include

#include

int main (int argc, char **argv)

else

if (!rfile)

if (argv[2]) else

if (!wfile)

pcm_input = (int16_t *)malloc(inputsample * sizeof(int16_t));

aac_output = (uint8_t *)malloc(maxoutputbytes * sizeof(uint8_t));

/* encode */

while (1) else

if (ret < 0)

readcount += readlen * 2;

writecount += ret;

if (!readlen && !ret)

}free(pcm_input);

free(aac_output);

end:

if (wfile) fclose(wfile);

if (rfile) fclose(rfile);

faacencclose(encoder);

return

0;}

/* makefile */

all: aac

aac: aac_encode.c makefile

gcc -o3

-wall

-werror

-wno

-unused aac_encode.c -lfaac

-o aac_enc

clean:

rm -rf aac_enc

最後編譯,執行即可

make

./aac_enc /tmp/北京北京8k16bits單聲道.pcm /tmp/output.aac

注意:以上**在macos 10.10.4 上編譯並執行通過

編譯faac音訊編碼庫

faac是mpeg 4和mpeg 2的aac編碼器,我們將使用它作為音訊的軟編碼庫。faac官網 sudo wgettar zxvf faac 1.29.9.2.tar.gz1.執行cd faac 1.29.9.2開啟資料夾 2.執行sudo vim generate.sh建立編輯指令碼檔案,並編輯...

利用faac進行編碼

利用faac直接對pcm進行aac編碼 下面是我在faac fronted main.c中抽出來 對pcm進行aac編碼的例子 希望對大家有用。片源資訊 output.pcm 44100 2 16 include include include include include include def...

AAC音訊編碼庫FAAC和解碼庫FAAD移植

編譯faac 1.28時遇到錯誤 mpeg4ip.h 126 error new declaration char strcasestr const char const char 解決方法 common mp4v2 mpeg4ip.h 從123行開始修改此檔案mpeg4ip.h,到129行結束。修...