Android使用AudioRecord判斷是否有音頻輸入
Android黨都應該玩過一個叫吹裙子的游戲,這個游戲就是原理就是通過監(jiān)聽用戶吹出的氣的力度來決定如何把MM的裙子弄飛起來的,所以關(guān)鍵在于如何判斷用戶吹氣的力度問題。現(xiàn)在公司剛好有這個需求要評估就是需要一直監(jiān)聽用戶的語音輸入,當在兩秒內(nèi)沒有語音輸入時候就暫停某項事情,有語音輸入的時候就要繼續(xù)做某件事。其實這兩件事情的本質(zhì)原理是一樣的,就是通過這AudioRecord來處理用戶輸入的原始音頻數(shù)據(jù),從而計算出當前用戶輸入的音量大小來判斷用戶是否有語音輸入。下面貼上一段代碼用戶可以自行研究。
public static int calculateVolume(byte[] var0, int var1) {
int[] var3 = null;
int var4 = var0.length;
int var2;
if(var1 == 8) {
var3 = new int[var4];
for(var2 = 0; var2 < var4; ++var2) {
var3[var2] = var0[var2];
}
} else if(var1 == 16) {
var3 = new int[var4 / 2];
for(var2 = 0; var2 < var4 / 2; ++var2) {
byte var5 = var0[var2 * 2];
byte var6 = var0[var2 * 2 + 1];
int var13;
if(var5 < 0) {
var13 = var5 + 256;
} else {
var13 = var5;
}
short var7 = (short)(var13 + 0);
if(var6 < 0) {
var13 = var6 + 256;
} else {
var13 = var6;
}
var3[var2] = (short)(var7 + (var13 << 8));
}
}
int[] var8 = var3;
if(var3 != null && var3.length != 0) {
float var10 = 0.0F;
for(int var11 = 0; var11 < var8.length; ++var11) {
var10 += (float)(var8[var11] * var8[var11]);
}
var10 /= (float)var8.length;
float var12 = 0.0F;
for(var4 = 0; var4 < var8.length; ++var4) {
var12 += (float)var8[var4];
}
var12 /= (float)var8.length;
var4 = (int)(Math.pow(2.0D, (double)(var1 - 1)) - 1.0D);
double var14 = Math.sqrt((double)(var10 - var12 * var12));
int var9;
if((var9 = (int)(10.0D * Math.log10(var14 * 10.0D * Math.sqrt(2.0D) / (double)var4 + 1.0D))) < 0) {
var9 = 0;
}
if(var9 > 10) {
var9 = 10;
}
return var9;
} else {
return 0;
}
}
上述方法的形參中的一個字節(jié)數(shù)組便是當前捕捉到用戶輸入的原始音頻數(shù)據(jù),第二個形參則是音頻數(shù)據(jù)格式位PCM,16位每個樣本,比如如果音頻數(shù)據(jù)格式設為AudioFormat.ENCODING_PCM_16BIT,則參數(shù)傳16。最后實現(xiàn)的效果就是如下:
01-12 18:54:17.222 E/recordtest(24249): no voice input
…………….
01-12 18:54:19.027 E/recordtest(24249): no voice input
01-12 18:54:19.067 E/recordtest(24249): no voice input
01-12 18:54:19.105 E/recordtest(24249): no voice input
01-12 18:54:19.145 E/recordtest(24249): no voice input
01-12 18:54:19.188 E/recordtest(24249): no voice input
01-12 18:54:19.227 E/recordtest(24249): no voice input
01-12 18:54:19.228 E/recordtest(24249): no voice input in 2 sec
01-12 18:54:19.269 E/recordtest(24249): no voice input
01-12 18:54:19.306 E/recordtest(24249): no voice input
01-12 18:54:19.345 E/recordtest(24249): no voice input
01-12 18:54:19.387 E/recordtest(24249): no voice input
01-12 18:54:19.427 E/recordtest(24249): no voice input
01-12 18:54:19.466 E/recordtest(24249): has voice input
01-12 18:54:19.505 E/recordtest(24249): has voice input
01-12 18:54:19.546 E/recordtest(24249): has voice input
01-12 18:54:19.586 E/recordtest(24249): has voice input
01-12 18:54:19.646 E/recordtest(24249): has voice input
01-12 18:54:19.686 E/recordtest(24249): has voice input
01-12 18:54:19.726 E/recordtest(24249): has voice input
01-12 18:54:19.766 E/recordtest(24249): has voice input
以上所述是小編給大家介紹的Android使用AudioRecord判斷是否有音頻輸入,多條目的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
在RecyclerView中實現(xiàn)button的跳轉(zhuǎn)功能
本次實驗就是在RecyclerView中添加一個button控件并實現(xiàn)監(jiān)聽,使鼠標點擊時可以跳轉(zhuǎn)到另外一個設計好的界面,對RecyclerView實現(xiàn)button跳轉(zhuǎn)功能感興趣的朋友一起看看吧2021-10-10
android6.0權(quán)限動態(tài)申請框架permissiondispatcher的方法
下面小編就為大家分享一篇android6.0權(quán)限動態(tài)申請框架permissiondispatcher的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android中Glide實現(xiàn)超簡單的圖片下載功能
本篇文章主要介紹了Android中Glide實現(xiàn)超簡單的圖片下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
在Android環(huán)境下WebView中攔截所有請求并替換URL示例詳解
這篇文章主要介紹了在Android環(huán)境下WebView中攔截所有請求并替換URL示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
使用TransitionDrawable實現(xiàn)多張圖片淡入淡出效果
這篇文章主要為大家詳細介紹了使用TransitionDrawable實現(xiàn)多張圖片淡入淡出效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08

