我最近一直致力于一个针对iOS的非常具体的项目,我的研究工作引导我几乎最终的代码。我已经解决了迄今为止我发现的所有极端困难,但在这一点上我似乎并不知道(关于原因和解决问题的可能性)。
我设置了我的音频队列(采样率44100,格式为LinearPCM,每通道16位,每帧2个字节,每帧1个通道......)并开始用12个音频缓冲区录制声音。但是,每4次回调后似乎有一段延迟。
情况如下:调用前4个回调,每个回调大约2 ms。但是,在第4和第5之间,有一个约60ms的延迟。同样的事情发生在8日和9日之间,12日和13日以及... ...
每帧的字节数与延迟时刻之间似乎存在关系。我知道这一点,因为如果我改为每帧4个字节,我开始在第8和第9之间,然后在第16和第17,第24和第25之间的延迟......但是,似乎没有延迟时刻与缓冲区数量之间的任何关系。
回调函数只做两件事:将音频数据(inBuffer-> mAudioData)存储在我的类可以使用的数组上;并调用另一个AudioQueueEnqueueBuffer,将当前缓冲区放回队列。
有没有人经历过这个问题?至少有人知道它可能是什么原因造成的?
提前谢谢。
答案 0 :(得分:3)
音频队列API似乎运行在RemoteIO音频单元API之上,其真正的音频缓冲区大小可能与您的音频队列缓冲区大小无关,并且在您的示例中大于该大小。因此,只要RemoteIO缓冲区准备就绪,就可以快速从中填充一堆较小的AQ缓冲区。然后你会得到更长的延迟,等待更大的缓冲区填充样本。
如果您想要更好地控制(间隔更均匀)缓冲延迟,请尝试直接使用RemoteIo Audio Unit。