尝试初始化AudioRecord时“无法获取记录源1的音频输入”

时间:2011-02-10 20:51:46

标签: android

我在尝试初始化和AudioRecord对象时遇到此错误,试图使用Eclipse使用模拟器录制声音。

我尝试过各种比特采样率,8000是唯一有效的,但错误仍然存​​在。我试过各种版本的sdk,1.5,1.6,2,2.2和2.3.1。 (以及与AVD的组合)。

以下是代码:

       Log.v(TAG, "About to initialize recording");
   //int[] samplingRates = {44100, 22050, 16000, 11025, 8000};
   int[] samplingRates = {8000};

    for (int i = 0; i < samplingRates.length; ++i)
    {
        try
        {
            Log.d(TAG,"Trying sampling rate: " + samplingRates[i]);
            int min = AudioRecord.getMinBufferSize(samplingRates[i], 
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    //AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_PCM_16BIT);
            Log.d(TAG,"MinBufferSize: " + min);

            AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, samplingRates[i],
                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, min);
            if (record.getState() == AudioRecord.STATE_INITIALIZED)
            {
                Log.d("Recorder", "Audio recorder initialised at " + record.getSampleRate());
                return record;
            }
            record.release();
            record = null;
        }
        catch (IllegalArgumentException e)
        {
            // Try the next one.
            Log.d(TAG,"Initialization failed");
        }
    }
    // None worked.
    return null;

实例化时发生错误,AudioRecord record = new等。

有没有人看到同样的问题,它似乎是一个直接的请求,所以我很惊讶,如果这是一个错误,特别是因为我不能使用不同的版本。

我创建了具有音频记录功能的AVD。还有什么我需要配置的吗?

我在同一个问题上看过其他一些帖子,但没有回复。

提前致谢

克里斯

2 个答案:

答案 0 :(得分:2)

你这里的问题可能实际上是双重的。首先,你必须得到适合AudioRecord的所有参数,即,我可以看到你尝试了所有不同的采样率和通道配置,但你尝试了不同的位深度吗?如果你没有把它完全正确,它就行不通。此外,似乎有些Android设备似乎报告了错误的minBufferSize。

但是,我认为您遇到的实际问题是AVD无法录制音频/视频(即使您配置它们也不会抱怨): http://developer.android.com/guide/topics/media/index.html

从第3段开始:

  

请注意,仿真器没有用于捕获音频或视频的硬件,但实际的移动设备可能提供这些功能,可通过MediaRecorder类访问。

答案 1 :(得分:0)

对于三星设备上的我来说,它只需要改变即可 AudioFormat.CHANNEL_IN_MONO

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize);