Android使用AudioRecord判斷是否有音頻輸入
Android黨都應(yīng)該玩過(guò)一個(gè)叫吹裙子的游戲,這個(gè)游戲就是原理就是通過(guò)監(jiān)聽(tīng)用戶吹出的氣的力度來(lái)決定如何把MM的裙子弄飛起來(lái)的,所以關(guān)鍵在于如何判斷用戶吹氣的力度問(wèn)題?,F(xiàn)在公司剛好有這個(gè)需求要評(píng)估就是需要一直監(jiān)聽(tīng)用戶的語(yǔ)音輸入,當(dāng)在兩秒內(nèi)沒(méi)有語(yǔ)音輸入時(shí)候就暫停某項(xiàng)事情,有語(yǔ)音輸入的時(shí)候就要繼續(xù)做某件事。其實(shí)這兩件事情的本質(zhì)原理是一樣的,就是通過(guò)這AudioRecord來(lái)處理用戶輸入的原始音頻數(shù)據(jù),從而計(jì)算出當(dāng)前用戶輸入的音量大小來(lái)判斷用戶是否有語(yǔ)音輸入。下面貼上一段代碼用戶可以自行研究。
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; } }
上述方法的形參中的一個(gè)字節(jié)數(shù)組便是當(dāng)前捕捉到用戶輸入的原始音頻數(shù)據(jù),第二個(gè)形參則是音頻數(shù)據(jù)格式位PCM,16位每個(gè)樣本,比如如果音頻數(shù)據(jù)格式設(shè)為AudioFormat.ENCODING_PCM_16BIT,則參數(shù)傳16。最后實(shí)現(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判斷是否有音頻輸入,多條目的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android用AudioRecord進(jìn)行錄音
- Android利用AudioRecord類實(shí)現(xiàn)音頻錄制程序
- Android使用AudioRecord實(shí)現(xiàn)暫停錄音功能實(shí)例代碼
- Android錄音--AudioRecord、MediaRecorder的使用
- Android音頻處理之通過(guò)AudioRecord去保存PCM文件進(jìn)行錄制,播放,停止,刪除功能
- Android提高之AudioRecord實(shí)現(xiàn)助聽(tīng)器的方法
- android AudioRecorder簡(jiǎn)單心得分享
- Android?WebRTC?對(duì)?AudioRecord?的使用技術(shù)分享
相關(guān)文章
Android學(xué)習(xí)系列一用按鈕實(shí)現(xiàn)顯示時(shí)間
這篇文章主要介紹了Android學(xué)習(xí)系列一用按鈕實(shí)現(xiàn)顯示時(shí)間的相關(guān)資料,需要的朋友可以參考下2016-05-05Android中的Selector的用法詳解及實(shí)例
這篇文章主要介紹了Android中的Selector的用法詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05在RecyclerView中實(shí)現(xiàn)button的跳轉(zhuǎn)功能
本次實(shí)驗(yàn)就是在RecyclerView中添加一個(gè)button控件并實(shí)現(xiàn)監(jiān)聽(tīng),使鼠標(biāo)點(diǎn)擊時(shí)可以跳轉(zhuǎn)到另外一個(gè)設(shè)計(jì)好的界面,對(duì)RecyclerView實(shí)現(xiàn)button跳轉(zhuǎn)功能感興趣的朋友一起看看吧2021-10-10android6.0權(quán)限動(dòng)態(tài)申請(qǐng)框架permissiondispatcher的方法
下面小編就為大家分享一篇android6.0權(quán)限動(dòng)態(tài)申請(qǐng)框架permissiondispatcher的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android中Glide實(shí)現(xiàn)超簡(jiǎn)單的圖片下載功能
本篇文章主要介紹了Android中Glide實(shí)現(xiàn)超簡(jiǎn)單的圖片下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03在Android環(huán)境下WebView中攔截所有請(qǐng)求并替換URL示例詳解
這篇文章主要介紹了在Android環(huán)境下WebView中攔截所有請(qǐng)求并替換URL示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07使用TransitionDrawable實(shí)現(xiàn)多張圖片淡入淡出效果
這篇文章主要為大家詳細(xì)介紹了使用TransitionDrawable實(shí)現(xiàn)多張圖片淡入淡出效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08