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

6

在使用Eclipse尝试使用模拟器录制声音时,我一直收到初始化AudioRecord对象时的错误提示。

我已经尝试了各种位采样率,只有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等。

有人遇到过同样的问题吗?这似乎是一个很直接的请求,所以如果这是一个bug,我会感到惊讶,特别是因为我无法在不同版本中使其正常工作。

我已经创建了带有音频记录功能的AVD。还有其他需要配置的吗?

我看到了一些关于同一问题的帖子,但没有回复。

提前致谢

克里斯


是的,这是可能的... 请查看此帖子 https://dev59.com/K2435IYBdhLWcg3wuign - suDocker
2个回答

2
您的问题可能实际上有两个方面。首先,您必须将AudioRecord的所有参数设置正确,即,我可以看到您尝试了各种采样率和通道配置,但是您尝试了不同的位深度吗?如果您没有完全做到这一点,它就无法正常工作。此外,似乎某些Android设备似乎报告了错误的minBufferSize。
但是,我认为您正在经历的实际问题是AVD无法记录音频/视频(即使您进行了配置也可能不会抱怨): http://developer.android.com/guide/topics/media/index.html 从第三段开始:
请注意,模拟器没有捕获音频或视频的硬件,但是实际移动设备很可能提供这些功能,可通过MediaRecorder类访问。

0

对于我的三星设备,只需更改AudioFormat.CHANNEL_IN_MONO即可正常工作。

或者

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接