導航:首頁 > APP軟體 > 安卓音頻解碼器包

安卓音頻解碼器包

發布時間:2023-03-03 09:23:18

㈠ 怎樣用AACLib V1.0在Android上音頻編碼解碼

這幾天在 android上的音頻項目,順便把用到的aac編解碼庫封裝了一下,有需要的可以從上面下載。當然是沒有本事自己寫編解碼器的,還是用FFmpeg + FDK_aac來做。下面介紹一下其java介面的使用。java庫見libaac.jar文件,把libaac.jar加到 libs目錄下,把libaac.so加到 libs/armeabi目錄即可使用。

AAC編碼:
(1) 創建一個Encoder對象作為成員變數
aac.Encoder encoder;

(2) 初始化它

encoder = new aac.Encoder();
if(! encoder.open(11025, 1))
{
Log.d("mylog", "failed to open encoder !\n");
encoder = null;
}

這里要指定輸入音頻源(PCM格式)的sampe_rate和channel個數,如果為CHANNEL_OUT_MONO,則channel=1,否則為2。 sample_rate一般設置為11025,因為手機性能有限,設置太高的話也處理不過來,而且處理人聲的話11025也是足夠了。


(3) 編碼

把接收到PCM數據交給encoder來處理即可,要求輸入源為ENCODING_PCM_16BIT,即每個sample是16BIT的。這個encoder對象內有2個緩沖區:inbuf, outbuf。顯然,在編碼時,inbuf就是用於存儲接收到的PCM數據,outbuf就是存編碼後得到的數據。

int out_size = encoder.encode(in_size);
其返回值out_size,表示在outbuf里的有效數據長度。此時可以把outbuf里的aac數據通過網路發送或其他用途。

其中,用戶需要知道encoder每次處理多長的數據,即一個frame的大小。對於單聲道MONO來說,每次應該輸入2048byte的數據。對於雙聲道STEREO來說,應該輸入4096byte的數據。下面這一行可以根據聲道數來計算輸入的frame的大小:

int in_size = aac.Encoder.frameSize(1);

AAC解碼:
(1) 創建一個Decoder對象作為成員變數

aac.Decoder decoder;

(2) 初始化

decoder = new aac.Decoder();
if( ! decoder.open())
{
Log.d("mylog", "failed to open decoder !\n");
decoder = null;
}

(3) 解碼
Decoder對象也有inbuf和outbuf,把待解碼的aac frame放到inbuf里

int pcm_size = decoder.decode(aac_size);

解得到數據在outbuf里,其有效長度為上述函數的返回值pcm_size,此時可以把outbuf里的PCM數據取出來播放或其他用途。

閱讀全文

與安卓音頻解碼器包相關的資料

熱點內容
戰地五的圖標文件在哪裡 瀏覽:553
閃迪卡更改文件系統 瀏覽:599
參數數據是什麼證據 瀏覽:433
神木論壇app最新版本 瀏覽:949
住建局175號文件具體內容 瀏覽:943
手機管家清理大文件怎麼恢復 瀏覽:730
華為t8830應用程序已滿怎麼刪除教程 瀏覽:815
轉儲的資料庫文件怎麼導入 瀏覽:527
怎麼用編程畫小花 瀏覽:65
php文件如何下載文件 瀏覽:614
javacapsule 瀏覽:20
extjs按鈕垂直居中 瀏覽:163
ibjsx 瀏覽:647
直銷可編程直流電源哪裡買 瀏覽:952
蘋果6qq錄音文件聽不了 瀏覽:6
網路線怎麼拔 瀏覽:328
webclip文件有什麼危害 瀏覽:700
創維32e360e怎麼看網路電視 瀏覽:824
js網站載入動畫 瀏覽:411
shelljava 瀏覽:666

友情鏈接