欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android使用AudioRecord判斷是否有音頻輸入

 更新時(shí)間:2017年01月13日 09:40:40   作者:andywuchuanlong  
這篇文章主要介紹了Android使用AudioRecord判斷是否有音頻輸入的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧

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)站的支持!

相關(guān)文章

最新評(píng)論