bUsed[0] in SampleRate[44100] outSampleRate[16000]..."是什么意思?-6ren"> bUsed[0] in SampleRate[44100] outSampleRate[16000]..."是什么意思?-在 Android 2.1 设备 (Samsung Galexy S) 上,我尝试使用以下代码录制音频数据: int frequency = 16000; int channelCon-6ren">
gpt4 book ai didi

android - 错误消息 "AFCCreateReSampler: avAFCInfo->bUsed[0] in SampleRate[44100] outSampleRate[16000]..."是什么意思?

转载 作者:行者123 更新时间:2023-11-29 18:24:20 25 4
gpt4 key购买 nike

在 Android 2.1 设备 (Samsung Galexy S) 上,我尝试使用以下代码录制音频数据:


   int frequency = 16000;   

int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord( MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration, audioEncoding, bufferSize);
short [] buffer = new short[bufferSize];

isAdIdle = false;
audioRecord.startRecording();

while( isRecording ) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
// save buffer data
}

此代码在其他设备上运行良好,例如 Nexus one,但在 Samsung Galaxy S 上,我收到以下错误消息:


AFCCreateReSampler: avAFCInfo->bUsed[0] in SampleRate[44100] outSampleRate[16000] nChannel[2] outBitDepth[16] 

问题是什么?谁能帮我解决这个问题?

提前致谢~伊金。

最佳答案

如果您仍然对它感兴趣,我发现有几件事可以让录音在 Galaxy S(以及驱动程序顶部带有 alsa 的所有设备)上正常运行。

  1. 不要相信 getMinBufferSize !这里有一些代码似乎适用于所有设备:
if(inputBuffSizeRec <= 4096){
inputBuffSizeRec = 4096 * 3/2;
}

这已经很有帮助了,但是您仍然会观察到一些丢失的帧

  1. 不要连续阅读。

必须在每个读取方法前加上get current timestamp;将它与之前的值进行比较,如果最后一帧和你要读取的帧之间的延迟大于帧大小,你应该在读取之前等待( sleep )。目标是在缓冲区(音频驱动程序缓冲区)尚未收到您请求的内容时不调用读取方法。

请注意,我读取的 block 大小小于缓冲区大小(我认为这也更好)。

我在另一个 android 开源 sip 应用程序 (sipdroid) 上找到了解决方案。集成在我的中,听起来工作正常。不知道日志中是否仍然存在错误(警告?),但是......我用我的应用程序听到了来自 galaxy S 的语音邮件录音机,声音非常完美。

关于android - 错误消息 "AFCCreateReSampler: avAFCInfo->bUsed[0] in SampleRate[44100] outSampleRate[16000]..."是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3314760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com