Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android音频记录器初始化失败_Android - Fatal编程技术网

Android音频记录器初始化失败

Android音频记录器初始化失败,android,Android,我试着用如下的录音方法录制声音,这在HTC nexus one android 2.3中很好,但当我在LG和索尼的andoid 4.0和4.1上尝试时,它工作了一次,下一次尝试时,它在startRecordingjava.lang.IllegalStateException:startRecording()中抛出异常调用未初始化的录音。怎么了 final int RECORDER_BPP = 16; int RECORDER_SAMPLERATE = 16000; int REC

我试着用如下的录音方法录制声音,这在HTC nexus one android 2.3中很好,但当我在LG和索尼的andoid 4.0和4.1上尝试时,它工作了一次,下一次尝试时,它在startRecording
java.lang.IllegalStateException:startRecording()中抛出异常调用未初始化的录音。
怎么了

final int RECORDER_BPP = 16;
    int RECORDER_SAMPLERATE = 16000;
    int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
    int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
    int bufferSizeInBytes = AudioRecord
            .getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS,
                    RECORDER_AUDIO_ENCODING);
    // Initialize Audio Recorder.
    AudioRecord audioRecorder = new AudioRecord(
            MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE,
            RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSizeInBytes);

    audioRecorder.startRecording();

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

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;
    }
它运行所有可用音频格式设置组合,并返回第一个与您的设备名称匹配的设置。

您可以稍微修改它,甚至可以获得设备支持的所有格式。

问题是因为没有使用release(),停止记录器后,它应该释放,以便您可以使用记录器多次。

添加一些错误检查
getMinBufferSize()
可以返回
ERROR
ERROR\u BAD\u值
,并且
AudioRecord()
可以引发异常。@ehsan mozafari原因可能在于如何释放录音机。或者使用相同的设置(只是猜测)初始化一个音频记录,或者类似的方式。在初始化本机音频记录对象时仍然存在相同的问题
错误代码-20
怎么办?您发布的代码没有显示任何问题。所有其他问题都在代码的其他部分中。