+-
Java-Android:当SAMPLERATE设置为44100时,在未初始化的AudioRecord上调用startRecording()
将AudioRecord对象的采样率设置为44100时出现错误.当它是22050时,它可以正常工作.

02-16 10:45:45.099 24021-24021 / com.vlad.jackcomms E / AudioRecord:frameCount 1024< minFrameCount 1792 02-16 16:45:45.099 24021-24021 / com.vlad.jackcomms E / AudioRecord-JNI:创建AudioRecord实例时出错:初始化检查失败. 02-16 16:45:45.099 24021-24021 / com.vlad.jackcomms E / android.media.AudioRecord:初始化本机AudioRecord对象时出现错误代码-20.

02-16 10:45:45.109 24021-24021 / com.vlad.jackcomms E / AndroidRuntime:致命

例外:主要
    流程:com.vlad.jackcomms,PID:24021
    java.lang.IllegalStateException:在未初始化的AudioRecord上调用startRecording().

以下是相关代码:

private static final int RECORDER_SAMPLERATE = 22050*2;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,
            RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);

    recorder.startRecording();
最佳答案
您可以检查您的设备是否支持44100.
Android没有提供明确的方法来检查它,但是AudioRecord类的getMinBufferSize函数可以解决.

public void getValidSampleRates() {
    for (int rate : new int[] {44100, 22050, 11025, 16000, 8000}) {  // add the rates you wish to check against
        int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);
        if (bufferSize > 0) {
            // buffer size is valid, Sample rate supported

        }
    }
}
点击查看更多相关文章

转载注明原文:Java-Android:当SAMPLERATE设置为44100时,在未初始化的AudioRecord上调用startRecording() - 乐贴网