AudioRecord获取缓冲区使用AudioRecorder.startRecording()超时

时间:2011-12-14 11:41:06

标签: android bluetooth timeout buffer android-3.0-honeycomb

我的程序记录麦克风有问题。有时当我运行它时,我有以下警告,并且实际上没有录制声音:

12-14 11:17:50.660: W/AudioRecord(1857): obtainBuffer timed out (is the CPU pegged?) user=00000000, server=00000000

根据我的发现,其他问题与AudioTrack解释了herehere。但是,对我而言,AudioRecord无法正常工作。我知道无论出于何种原因都无法创建缓冲区。我开始录制过程时会出现警告:recorder.startRecording();

当我使用内置麦克风作为输入时,有时会出现此问题,但通常在使用Bluetooth耳机作为输入时。以下是我使用Bluetooth麦克风作为输入的代码:

audioManage = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);

if (!audioManage.isBluetoothScoOn()) {
    audioManage.setBluetoothScoOn(true);
    audioManage.startBluetoothSco();
    audioStreaming = new AudioStreaming();
} else {
    audioManage.startBluetoothSco();
    audioStreaming = new AudioStreaming();
}

如何强制创建缓冲区?

信息:我使用的是Android 3.0,我在Xoom平板电脑上测试了该程序。

编辑:

我刚刚意识到我也遇到了这个错误:

12-14 12:13:12.500: E/AudioPostProcessor(2541): Error reading from audio in: Connection timed out

仅当程序未使用蓝牙时。而且我还没有找到关于这个主题的任何内容......

2 个答案:

答案 0 :(得分:0)

尝试使用大于minSize的缓冲区并降低采样率。该消息通常意味着内核级别有些问题,比如错误的ALSA音频驱动程序集成,但我不知道Xoom是否会遇到这种情况。所以,祝你好运!

答案 1 :(得分:0)

嗯,嗯,解决方案非常简单......我只是没有检查新的更新是否可用......问题已经自行修复了。