導航:首頁 > 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數據取出來播放或其他用途。

閱讀全文

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

熱點內容
數據的編輯什麼地震 瀏覽:971
手機如何在app登錄工行公戶 瀏覽:456
濟南編程教什麼 瀏覽:446
游戲王arcv安卓版 瀏覽:653
怎麼就不對網路耍 瀏覽:377
swift訪問網路連接 瀏覽:24
網盤里的文件怎麼保存到蘋果手機上 瀏覽:664
怎麼聯系網安部門網站 瀏覽:855
u盤裡面的文件夾刪掉了能恢復嗎 瀏覽:108
mac命令行打開文件 瀏覽:356
大數據挖掘需要什麼研究方向 瀏覽:241
微信群右上角變成加號 瀏覽:162
js下拉重新載入重新請求 瀏覽:352
core文件位置 瀏覽:166
虛擬鍵改文件名 瀏覽:58
u盤一些文件消失了占著內存 瀏覽:537
macos文件恢復 瀏覽:89
彈幕姬點歌使用教程 瀏覽:593
ps水印文件格式 瀏覽:555
製作一個文件發送軟體 瀏覽:493

友情鏈接