使用AudioRecord實現聲音採集

2021-08-13 17:25:39 字數 2004 閱讀 8287

前言:在android開發中,實現錄音的功能一般有三種方式:1.呼叫系統的錄音器  2.使用mediarecord類實現錄音功能  3.使用audiorecord類。在這裡我就不講前兩種方式的實現了,大家可以在網上查詢相關的內容。這篇文章主要講的是使用audiorecord實現聲音採集。

如果你不需要對採集到的資料進行處理的話,就可以選擇使用前面兩種方式。但是如果你需要將採集到的資料轉化為pcm格式,aac格式,***格式等,就需要使用audiorecord類進行採集了。

在使用這個類之前我們先要了解幾個概念:

(1) 取樣率

取樣就是把模擬訊號轉化為數碼訊號的過程。

我們可以把取樣率看作是上圖中,每條紅線的間隔,間隔越密集的時候,取樣率就越高,音訊的音質就越高。

在android手機裝置中,44100khz是可以相容全部手機的取樣率。

(2)量化精度(位寬)

在上圖中,每個紅點表示為量化精度,常見的資料型別大小是,4bit,8bit,16bit,32bit等。

(3)聲道數

(4)buffersizeinbytes

它表示audiorecord內部的音訊緩衝區的大小。該緩衝區的值不能低於一幀的「音訊幀」的大小。

一幀音訊幀的大小計算公式是:  int  size = 取樣率  *  位寬  * 取樣時間  * 通道數

android系統提供了乙個方法獲取buffersizeinbytes的值。即audio.getminbuffersize()。

簡單使用:

1. 建立需要的引數。 如取樣率,聲道數等

2. 獲取緩衝區大小

3. 例項化audiorecord

4. 開始錄製startrecording(),並開啟乙個執行緒用於不斷寫入檔案

5.停止,並釋放資源

接下來咱們上**:

1.建立需要的引數。 如取樣率,聲道數等

private audiorecord maudiorecord;

private int msamplerate = 44100;//取樣率

private int mchannelcount = audioformat.channel_in_mono;//雙聲道

private int maudiosource = mediarecorder.audiosource.mic;//麥克風

private int audioformat = audioformat.encoding_pcm_16bit;//量化精度

private int mminbuffersize;

2.獲取緩衝區大小

//獲取緩衝區的大小

mminbuffersize = audiorecord.getminbuffersize(msamplerate, mchannelcount, audioformat);

3.例項化audiorecord
//audiorecord物件例項化

maudiorecord = new audiorecord(maudiosource, msamplerate, mchannelcount, audioformat, mminbuffersize);

4.開始錄製startrecording(),並開啟乙個執行緒用於不斷寫入檔案

private void recording() catch (ioexception e)

}try

} catch (ioexception e)

}}).start();

}5.停止,並釋放資源

isrecording = false;

maudiorecord.stop();

maudiorecord.release();

maudiorecord = null;

最後:需要申請許可權,申請許可權,申請許可權。重要的事情說三遍。

站在巨人的肩膀上  

參考:

AudioRecord 使用小結與注意事項

使用專門的執行緒讀取資料,容易出現buffer overflow。使用 setrecordpositionupdatelistener時,要注意兩個問題 一 1.啟動錄音後,要先read buffer,才會通知啟用 listener。audiorecord startrecording audior...

利用錄音AudioRecord實現吹一吹效果

不錯的創意,記一下,原帖原理其實就是話筒的監聽,需要在androidmanifest.xml中要加入兩個許可權 另外模擬器無法測試,只能用真機才有效果 另外 低於api 14的sdk可能無效,我測試小公尺android2.3.5似乎無效,三星9300 android4.0有效!以下是copy的 留在...

利用錄音AudioRecord實現吹一吹效果

不錯的創意,記一下,url 原帖 url 原理其實就是話筒的監聽,需要在androidmanifest.xml中要加入兩個許可權 另外模擬器無法測試,只能用真機才有效果 另外 低於api 14的sdk可能無效,我測試小公尺android2.3.5似乎無效,三星9300 android4.0有效!以下...