AudioTrack:由于采样率不匹配,客户端拒绝了音频输出标志

AudioTrack:由于采样率不匹配,客户端拒绝了音频输出标志,audio,real-time,low-latency,Audio,Real Time,Low Latency,有人知道如何修复此警告消息吗 07-14 10:38:55.411 V/tracker音频测试(22426):录制线程::运行():开始录音。 07-14 10:45:51.490“W/AudioTrack(607):由于采样率不匹配,客户拒绝音频输出标志(44100 vs 48000)” 当我在安卓4.4上测试音频延迟时,看到这个警告消息后,我面临着突然增加的延迟。但是我在测试期间不改变采样率,初始设置为48kHz。此警告消息在开始录制7分钟后出现 如果需要,您可以在设备上测试此项目。该项目位

有人知道如何修复此警告消息吗

07-14 10:38:55.411 V/tracker音频测试(22426):录制线程::运行():开始录音。 07-14 10:45:51.490“W/AudioTrack(607):由于采样率不匹配,客户拒绝音频输出标志(44100 vs 48000)”

当我在安卓4.4上测试音频延迟时,看到这个警告消息后,我面临着突然增加的延迟。但是我在测试期间不改变采样率,初始设置为48kHz。此警告消息在开始录制7分钟后出现

如果需要,您可以在设备上测试此项目。该项目位于GitHub:


音频输出\u标志\u FAST被拒绝,因为您使用的速率与硬件支持的速率不同。您需要查询硬件支持的采样率并以该速率记录,而不是将其硬编码为48kHz

尝试在以下位置更改采样率:

框架/基础/
框架/av/
硬件/libhardware

地点

默认采样率为44100,请尝试设置所需的采样率(您的音频文件有)。它会起作用的


干杯。

您可以尝试使用Java函数接口:

AudioManager myAudioMgr=(AudioManager)getSystemService(Context.AUDIO\u SERVICE);
nativeSampleRate=myAudioMgr.getProperty(AudioManager.PROPERTY\u输出\u采样率);
要在手机上检索硬件默认采样率,请使用该采样率创建播放器。
也可以尝试使用:

nativeSampleBufSize=myAudioMgr.getProperty(AudioManager.PROPERTY\u输出\u帧/u缓冲区);
获取默认音频缓冲区大小(以帧为单位)并将其用于播放


如果JNI适合您,您可以查看JNI示例代码。

我尝试在我的Android-M(nexus 9和nexus 5)上运行您的程序,原始音频文件播放效果良好(我使用了音乐文件,因此任何中断都是显而易见的)。您的缓冲区为480,在我的设备上,快速音频缓冲区大小为:240帧/缓冲区,频率为48Khz。我觉得播放起来很流畅。Android-M在音频方面有改进,你可以检查一下,看看它是否能改善你的工作。看看代码,在内部循环中,它首先提取录制的音频,写入文件[在比特进入文件之前复制两次];然后通过读取一个音频数据缓冲区来处理播放器,对其重新采样,复制到播放缓冲区[2份];然后把它们混合起来,写进文件。在一个缓冲区播放时间内,5份拷贝,3次文件访问,他们必须按时完成。如果未完成,则播放机或录音机饥饿,将导致故障。我认为最好让播放器和录像机有两个缓冲区,并在回调发生时将一个新的缓冲区排队。把文件也分成大块读。