2

AudioFormat.ENCODING_PCM_8BITAudioFormatとして使用すると、以下の行に問題があります。これらを使用する場合はAudioFormat.ENCODING_PCM_16BIT問題なく動作します。

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);

logcat:

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)
4

1 に答える 1

0

AudioRecord.getMinBufferSizeはサポートしていませんPCM_8BITAudioRecordソースコードを参照) 。フォーマットをERROR_BAD_VALUE渡すと(-2)が返されます。PCM_8BIT

PCM_16BIT1つの解決策は、エンコーディングの使用に切り替えることです。もう1つの可能性(動作するかどうかは確認していません)は、インスタンスを構築するときに、返されたサイズに基づいて最小バッファーサイズを要求しPCM_16BIT、返されたサイズを2で割ることです。AudioRecord

于 2013-03-26T10:17:53.690 に答える