2013-03-26 2 views
0

AudioFormat.ENCODING_PCM_8BIT을 AudioFormat으로 사용할 때 아래 줄에 문제가 있습니다. AudioFormat.ENCODING_PCM_16BIT을 사용할 때 이들은 정상적으로 작동합니다.AudioRecord - 오디오 버퍼 크기가 잘못되었습니다.

bufferSize = AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT); 
audio = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, bufferSize); 

로그 캣 :

03-26 10:03:49.643: E/AndroidRuntime(19949): FATAL EXCEPTION: main 
03-26 10:03:49.643: E/AndroidRuntime(19949): java.lang.IllegalArgumentException: Invalid audio buffer size. 
03-26 10:03:49.643: E/AndroidRuntime(19949): at android.media.AudioRecord.audioBuffSizeCheck(AudioRecord.java:340) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at android.media.AudioRecord.<init>(AudioRecord.java:237) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.kris.test.SoundMeter.runForCamMic(SoundMeter.java:57) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.kris.test.VolumeCalc.run(VolumeCalc.java:89) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.kris.test.StateChecker.micCalibration(StateChecker.java:159) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.kris.test.Settings$3.onClick(Settings.java:354) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at android.os.Looper.loop(Looper.java:137) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at android.app.ActivityThread.main(ActivityThread.java:4921) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at java.lang.reflect.Method.invokeNative(Native Method) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at java.lang.reflect.Method.invoke(Method.java:511) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
03-26 10:03:49.643: E/AndroidRuntime(19949): at dalvik.system.NativeStart.main(Native Method) 
+0

'bufferSize'의 값은 무엇입니까? – Michael

답변

0

AudioRecord.getMinBufferSizePCM_8BIT합니다 (AudioRecord source code) 참조 지원하지 않습니다, 당신이 그것을에 PCM_8BIT 형식을 전달하는 경우 ERROR_BAD_VALUE (-2)을 반환합니다

한 가지 해결책이있다. PCM_16BIT 인코딩으로 전환해야합니다. (동작 여부를 확인하지 않은) 또 다른 가능성은를 기준으로 최소 버퍼 크기를 요청하는 것입니다을 생성하고 AudioRecord 인스턴스를 생성 할 때 반환 된 크기를 2로 나눕니다.

관련 문제