2011-02-12 15 views
2

アンドロイドデバイスでMICに吹き込むときの振幅を取得する方法。アンドロイドデバイスのMICに吹き込むときの振幅を取得する方法

MediaRecorder recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 1000); 

private class RecorderTask extends TimerTask { 
private MediaRecorder recorder; 

public RecorderTask(MediaRecorder recorder) { 
    this.recorder = recorder; 
} 

public void run() { 
    Log.v("", "amplitude is" + recorder.getMaxAmplitude()); 
} 
} 

私はエラーを取得しています:

ERROR/AndroidRuntime(20927): Caused by: java.lang.RuntimeException: setAudioSource failed. 
ERROR/AndroidRuntime(20927): at android.media.MediaRecorder.setAudioSource(Native Method) 

答えて

0

あなたはレコーダーを初期化する必要があるだけでなく、いくつかの方法を設定します。これを行う方法については、MediaRecorderのドキュメントを参照してください。私はこの方法を使ってきました。

6
public boolean isBlowing() 
    { 
     boolean recorder=true; 

     int minSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
     AudioRecord ar = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,minSize); 


     short[] buffer = new short[minSize]; 

     ar.startRecording(); 
     while(recorder) 
     { 

      ar.read(buffer, 0, minSize); 
      for (short s : buffer) 
      { 
       if (Math.abs(s) > 27000) //DETECT VOLUME (IF I BLOW IN THE MIC) 
       { 
        blow_value=Math.abs(s); 
        System.out.println("Blow Value="+blow_value); 
        ar.stop(); 
        recorder=false; 

        return true; 

       } 

      } 
     } 
     return false; 

    } 
1
あなたのマニフェストファイルのパーミッションを設定する必要があり

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
関連する問題