編輯:關於Android編程
Android黨都應該玩過一個叫吹裙子的游戲,這個游戲就是原理就是通過監聽用戶吹出的氣的力度來決定如何把MM的裙子弄飛起來的,所以關鍵在於如何判斷用戶吹氣的力度問題。現在公司剛好有這個需求要評估就是需要一直監聽用戶的語音輸入,當在兩秒內沒有語音輸入時候就暫停某項事情,有語音輸入的時候就要繼續做某件事。其實這兩件事情的本質原理是一樣的,就是通過這AudioRecord來處理用戶輸入的原始音頻數據,從而計算出當前用戶輸入的音量大小來判斷用戶是否有語音輸入。下面貼上一段代碼用戶可以自行研究。
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; } }
上述方法的形參中的一個字節數組便是當前捕捉到用戶輸入的原始音頻數據,第二個形參則是音頻數據格式位PCM,16位每個樣本,比如如果音頻數據格式設為AudioFormat.ENCODING_PCM_16BIT,則參數傳16。最後實現的效果就是如下:
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判斷是否有音頻輸入,多條目的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
上一篇文章中我們講解了webview中問題集錦,講解了webview的性能優化、webview種入Cookie信息、activity退出的時候清除webview信息報錯、
首先是“餓了麼”導航Tab欄懸浮的效果圖。大家可以看到上圖中的“分類”、“排序”、“篩選”會懸浮在app的頂部,狀態隨著ScrollView(也可能不是ScrollVie
最近項目裡面需要支付功能,boos一致決定用微信支付,所以在網上查了很多資料,說的不全,完了就找以前的同事指教。算是成功集成上去了。在這裡做個總結記錄。1、在APP上集成
相信很多用戶都知道微信基本是怎麼加好友的了,但是部分用戶在加微信好友的時候發現,添加微信好友失敗!?不少微信網友在使用微信添加好友過程中失敗了,這是怎麼回事