Android录音机初始化失败

时间:2013-10-22 12:14:52

标签: android

我尝试使用下面的audiorecorder方法录制声音,它在HTC nexus一个android 2.3中很好但是当我在LG和Sony上尝试使用andoid 4.0和4.1时它会工作一次并且对于下一次尝试它会在startRecording {抛出异常} {1}}出了什么问题?

java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.

2 个答案:

答案 0 :(得分:0)

不同的设备仅支持AudioRecord的某些设置。有一个功能可以让您检测特定设备支持的设置。

private static int[] mSampleRates = new int[]{44100, 22050, 11025, 8000};

    public AudioRecord findAudioRecord() {
        for (int rate : mSampleRates) {
            for (short audioFormat : new short[]{AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT}) {
                for (short channelConfig : new short[]{AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}) {
                    try {
                        Log.d(TAG, "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " + channelConfig);
                        int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);

                        if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
                            // check if we can instantiate and have a success
                            AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                            if (recorder.getState() == AudioRecord.STATE_INITIALIZED) {
                                return recorder;
                            }
                        }
                    } catch (Exception e) {
                        Log.e(TAG, rate + "Exception, keep trying.", e);
                    }
                }
            }
        }
        return null;
    }

它会运行可用音频格式设置的所有组合,并返回首先匹配您的设备容量 您可以稍微修改它,甚至可以获得设备支持的所有格式。

答案 1 :(得分:0)

问题是因为没有使用release(),在停止录音机之后它应该被释放,以便你可以使用录音机几次。