2016-12-20 4 views
1

私は、ユーザーが電話をかけて音声ファイルを「中断」すると、オーディオファイルが再生されないようにする簡単なことを書こうとしています。私はSoundMeter class that this person wroteを使ってマイクのmaxAmplitudeを取得しています。スレッショルドを800に設定し、マイクロホンの振幅が常に50msごとに戻ることをテストしたいと考えています。Androidのif文が常に実行されていない

何らかの理由で、「割り込み」が表示され、オーディオが停止したときに、何らかの理由でヒットしたり、ミスしたりします。私は、バックグラウンドノイズはありませんが、私は着実に40-50で振幅を見ることができるよ、これを見ながら振幅が800

handler = new Handler(); 
    final Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      mic_amplitude.setText(""+mSoundMeter.getAmplitude()); 
      if(mSoundMeter.getAmplitude() > threshold) { 
       Log.d("INTERRUPT", "INTERRUPT"); 
       interrupt.setText("Interrupt"); 
       mBackgroundAudio.pause(mp); 
       audioButton.setText("Resume Audio"); 
      } else { 
       interrupt.setText(""); 
      } 
      handler.postDelayed(this, 50); 
     } 
    }; 
    handler.postDelayed(r, 50); 

上で全体の時間を示すべき割り込みを希望します静かに話すときのピークは1200〜1500です。私は割り込みが800以上の時間に表示されるようにしたいと思いますが、現在は断続的にしか表示されません。

+0

私は50が小さすぎると思いますが、私は知りません – zombie

答えて

0

わかりました。私は私の振幅は、割り込みと一緒にアンプを記録することによってテストし、私は0になっていたのを見た。私は新しい振幅(私が示していたアンプ以外)でテストしていたので、他のすべての変数を使用しました。ここ

は私の結果です:

handler = new Handler(); 
    final Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      mAmplitude = mSoundMeter.getAmplitude(); 
      mic_amplitude.setText(""+mAmplitude); 
      if(mAmplitude > threshold) { 
       Log.d("INTERRUPT", "INTERRUPT " + mAmplitude); 
       interrupt.setText("Interrupt"); 
       mBackgroundAudio.pause(mp); 
       audioButton.setText("Resume Audio"); 
      } else { 
       interrupt.setText(""); 
      } 
      handler.postDelayed(this, 100); 
     } 
    }; 
    handler.postDelayed(r, 100); 
関連する問題