无论我提供的缓冲区大小如何,提供给AudioQueueNewInput的回调都会以大致相同的时间间隔发生。
例如:
如果你有.05秒缓冲并且正在44k录音,则回调首先在.09秒调用,然后在(.001秒)之后立即进行第二次调用。然后你再等一下〜.09秒。如果您的缓冲区大小为.025。您将等待.09秒,然后几乎立即看到3个缓冲区。
更改采样率会增加延迟。
录制16位8k音频会导致缓冲区泛洪之间延迟0.5秒。
所以我怀疑在后台使用了一个8000字节的缓冲区。当它被填充时,我的回调会被给定的缓冲区运行,直到它被清空。
我希望以尽可能小的延迟记录16k 16位音频。鉴于上述情况,我总是看到大约四分之一秒的延迟。有没有办法减少延迟?是否有音频会话属性来设置内部缓冲区大小?我已经尝试了kAudioSessionProperty_PreferredHardwareIOBufferDuration,但它似乎没有帮助。
谢谢!
答案 0 :(得分:0)
Audio Queue API看起来像构建在Audio Unit RemoteIO API之上。小音频队列缓冲区可能用于填充幕后更大的RemoteIO缓冲区。也许甚至可能会进行一些速率重新采样(在原始的2G手机上)。
为了降低延迟,请尝试直接使用RemoteIO Audio Unit API,然后请求音频会话为您的应用提供更小的延迟缓冲区大小。