2014-04-07 56 views
0

我試圖檢測何時存在太多聽覺噪聲。我是Android新手,我不知道如何檢測外部噪音水平。如何使用刻錄機檢測Android中的環境噪聲

我試過的一個嘗試是使用recorder方法:getAudioSourcegetMaxAmplitude方法顯示噪聲值。

public void startRecording() throws IOException { 

       numeSunet=Environment.getExternalStorageDirectory().getPath()+"/"+System.currentTimeMillis()+".3gp"; 

       recorder = new MediaRecorder(); 
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      recorder.setOutputFile(Environment.getExternalStorageDirectory().getPath()+"/"+System.currentTimeMillis()+".3gp"); 
    recorder.prepare(); 
    recorder.start(); 
     int x = recorder.getMaxAmplitude(); 

      snt.setText(""+x); 

     }public void stopRecording() { 
     recorder.stop(); 
      recorder.release(); 

     } 

在我的情況下,Y始終爲0,x是始終8 如果有人知道如何檢測的Android音頻噪聲的水平我將不勝感激。

回答

0

從這個link

  1. 使用mRecorder.getMaxAmplitude();

  2. 對於沒有保存聲音的分析,所有你需要的是使用mRecorder.setOutputFile(「/ dev/null」);

Here's一個例子,我希望這有助於

public class SoundMeter { 

    private MediaRecorder mRecorder = null; 

    public void start() { 
      if (mRecorder == null) { 
        mRecorder = new MediaRecorder(); 
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
        mRecorder.setOutputFile("/dev/null"); 
        mRecorder.prepare(); 
        mRecorder.start(); 
      } 
    } 

    public void stop() { 
      if (mRecorder != null) { 
        mRecorder.stop();  
        mRecorder.release(); 
        mRecorder = null; 
      } 
    } 

    public double getAmplitude() { 
      if (mRecorder != null) 
        return mRecorder.getMaxAmplitude(); 
      else 
        return 0; 

    } 
} 

編輯:

讀入API for MediaRecorder顯示了這個...

公衆詮釋getMaxAmplitude()

在API級別1

返回自上次 調用此方法進行採樣的最大絕對幅度。僅在setAudioSource()之後調用此方法。

返回自上次調用以來測得的最大絕對振幅,第一次調用時返回 或0如果在設置音頻源之前調用 ,則拋出IllegalStateException。

+0

mRecorder.getMaxAmplitude()始終是0.如果檢測到噪音,應該有什麼值? – user3006193

+0

閱讀我的最新編輯...並請閱讀API ... – Tukajo

+0

您是否曾經致電setAudioSource .... – Tukajo