2011-07-06 7 views
0

기본적으로 마이크에서 아무 것도 얻을 수 없는지 테스트하는 앱을 작성하고 있습니다.Android MediaRecorder getMaxAmplitude는 LG Optimus에서 항상 0을 반환합니다.

여러 Android 기기에서 완벽하게 작동하지만 LG Optimus에서는 작동하지 않습니다. LG에서 MediaRecorder.getMaxAmplitude을 호출 할 때마다 0을 반환합니다.

녹음 내용을들을 수 있기 때문에 장치가 성공적으로 녹음됩니다.

답변

8

getMaxAmplitude는 마지막으로 호출 한 이후 최대 진폭을 반환합니다.

처음 호출 할 때 두 번째로 자체를 초기화 (0을 반환)하므로 다른 값을 반환해야합니다. 설명서에 따르면

getMaxAmplitude()를이 방법으로 최근의 콜 이후 채취 최대 절대 진폭을 반환한다. setAudioSource() 후에 만 ​​호출하십시오. 당신이 바로 그것을 사용하는 경우 내가 가지고, 당신은 같은 문제가 처음

을 요구하거나

는 최대 절대 마지막 호출 이후 측정 된 진폭, 또는 0을 돌려줍니다. 내 코드는 GalaxyTab 7 (Froyo)에서 작동하지만 10.1 (Honeycomb)에서는 작동하지 않습니다.

편집 : 내 문제를 해결했습니다 (도움이되기를 바랍니다). 처음으로 getMaxAmplitude를 호출 할 때, 초기화하기 위해 start()를 먼저 호출해야합니다. 내가 사용 :이 있었어야

recorder.prepare(); 
recorder.getMaxAmplitude(); 
recorder.start(); 
//listening to the user 
int amplitude = recorder.getMaxAmplitude(); 

:

recorder.prepare(); 
recorder.start(); 
recorder.getMaxAmplitude(); 
//listening to the user 
int amplitude = recorder.getMaxAmplitude(); 

편집 :이 코드는 여전히 보인다 결함을 가지고있다. 예를 들어,이 코드는 S2에서 작동하지 않습니다. 하지만 0을 반환합니다.하지만 getMaxAmplitude()는 두 번만 호출하므로 매 초마다 진폭을 업데이트해야하는 경우 괜찮을 수 있습니다.

1

해결 방안은 스레드 내부에서 진폭 판독 값을 얻는 것입니다. 때때로 0.0f와 다른 값을 보게됩니다. 코드는 나를 위해 일한 아래

private Runnable mPollTask = new Runnable() { 
    public void run() { 
      while(true){ 
      double amp = mSensor.getAmplitude(); 
      System.out.print("Amplitude: "); 
      System.out.println(amp); 
      } 
    } 
}; 
1

, 설정해야 setAudioSamplingRatesetAudioEncodingBitRate

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
if (Build.VERSION.SDK_INT >= 10) { 
recorder.setAudioSamplingRate(44100); 
recorder.setAudioEncodingBitRate(96000); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
} else { 
// older version of Android, use crappy sounding voice codec 
recorder.setAudioSamplingRate(8000); 
recorder.setAudioEncodingBitRate(12200); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
} 
recorder.setOutputFile(file.getAbsolutePath()); 
try { 
recorder.prepare(); 
} catch (IOException e) { 
throw new RuntimeException(e); 
} 
관련 문제