Android 實時採集聲音的頻率和大小

2021-08-29 03:52:03 字數 1269 閱讀 3574

筆者本不是專業人士,通過查了幾篇資料和請教軟體部門的同學搭的demo ,如有不正確之處,請及時指出

1.原理

聲音大小省略,網上可以很好搜到

使用audiorecord類採集聲音資訊,通過傅利葉轉換,獲取聲音的頻率

2.audiorecord類說明

/**

*@param audiosource 採集聲音源 mediarecorder.audiosource.mic 為採集麥克風

*@param samplerateinhz 採集聲音的頻率,因裝置而定,44100hz 支援所有的裝置,部分設 備上也支援 22050 16000 11025

*@param channelconfig 採集聲音的聲道 audioformat.channel_configuration_mono為單聲道

*@param audioformat 返回資訊的格式 這裡是 audioformat.encoding_pcm_16bit

*@param buffersizeinbytes 快取區大小 有要求的 ,可以用 audiorecord.getminbuffersize 獲取

*/public

audiorecord

(int audiosource,

int samplerateinhz,

int channelconfig,

int audioformat,

int buffersizeinbytes)

/** *@param samplerateinhz 採集聲音的頻率

*@param channelconfig 採集聲音的聲道

*@param audioformat 返回資訊的格式

* */

static

public

intgetminbuffersize

(int samplerateinhz,

int channelconfig,

int audioformat)

3.傅利葉變換簡單說明

快速傅利葉變換輸入的一組陣列,輸出等長的一組陣列

陣列由時域變換成了頻域,陣列的中最大的值代表能量最大,下座標乘以頻幅就等於該點頻率,通常以能量最大的頻率代表聲音的頻率.

頻幅指乙個單位所代表的頻率大小,例如下座標為2 ,該點的頻率=2*頻幅.頻幅=取樣頻率/取樣點

取樣點指採集資訊的長度,可自己定,但最好為2的n次冪,不然結果會為零.

專案位址

Android中實時獲取聲音頻率

實現思路 1.通過audiorecord類讀取mic傳入的資料 2.對讀取的資料進行快速傅利葉變換 3.計算出進過計算後的複數的模即為需要的頻率 第一步很好實現,new 乙個audiorecord即可實現讀取mic的輸入,簡略版 如下 audiorecord audiorecord new audi...

android 聲音的呼叫

通過static mediaplayer create context,uri 這個方法,可以獲得乙個新建立的mediaplayer物件。n setonpreparedlistener mediaplayer.onpreparedlistener listener 當prepare 被呼叫時觸發。下...

linux下ALSA API採集聲音遇到的坑

alsa 的api網上一大把,昨天抄了個抓取程式放在自己的程式中,一讀資料就崩潰,折騰了好久 alsa 音效卡資料抓取函式原型 snd pcm sframes t snd pcm readi snd pcm t pcm,const void buffer,snd pcm uframes t size...