AudioRecord 使用小結與注意事項

2021-06-20 19:55:50 字數 1809 閱讀 3940

使用專門的執行緒讀取資料,容易出現buffer overflow。

使用 setrecordpositionupdatelistener時,要注意兩個問題: 一:

1.啟動錄音後,要先read buffer,才會通知啟用 listener。

audiorecord

.startrecording

();audiorecord

.read

(buffer,0

,buffer

.length

);

2.錄音 通知週期 及 錄音資料讀取 buffer 的設定

audiorecord

.setpositionnotificationperiod

(frameperiod

);

//也可以自己指定乙個buffer大小,但是不能小於min buffer

buffersize = audiorecord.getminbuffersize(samplerate,

channelconfig, audioformat);

int

frameperiod

=frameperiod

=buffersize /(

2*bsamples

*nchannels /8

);

//讀取錄音資料 的buffer 應該為

buffersize/2,否則會出現stop後,資料延時與混亂(資料未正確寫入檔案)

buffer

=new

byte

[frameperiod

*bsamples /8

*nchannels

];//

buffer = new byte[

buffersize/2

]

二:避免錄音阻塞主線程,利用反射,更改audiorecord 物件中的 

minitializationlooper(looper 物件) 屬性,為我們指定的子執行緒的 looper,然後再設定

setrecordpositionupdatelistener(這個方法中會用到

minitializationlooper 物件)

audiorecorder1

=audiorecorder1

.getinstanse

();handlerthread

handlerthread

=new

handlerthread

("handlerthread"

);handlerthread

.start

();...

//利用反射,更改屬性,為指定子執行緒的looper

field2.set(field.get(audiorecorder1), handlerthread.getlooper());

//設定監聽

audiorecorder1.prepare();

//prepare 方法的實現

public void prepare()

catch

(nosuchfieldexceptione)

catch

(illegalargumentexceptione)

catch

(illegalacces***ceptione)

**:

使用AudioRecord實現聲音採集

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

利用錄音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有效!以下...