2017-04-21 201 views
1

我需要确定,当我RemoteIO回调正在改变缓冲区的大小。在iOS 7之前,我们可以使用AudioSessionAddPropertyListener,然后是属性kAudioSessionProperty_PreferredHardwareIOBufferDuration来添加会话属性侦听器。现在已弃用。有没有更换? AVAudioSession旨在符合KVO,但不适用于IOBufferDurationpreferredIOBufferDuration属性。AudioSessionAddPropertyListener弃用IOBufferDuration

什么是替代吗?

回答

2

缓冲持续时间是考虑到RemoteIO回调中,帧数(正比于在回调缓冲的样本的数目)在已知的采样速率的形式。任何其他通知都会与此回调信息异步,因此可能在与实际更改(发生在音频线程中,而不是UI主运行循环中)相比错误的时间收到。

但您的音频回调可能会改变一些可见的状态(全局或在参数结构),它可以通过缓存时间更新后,任何其他轮询线程或消费者线程被发现。

+0

它不幸的内存分配情况,但我想我会使用切片,如果缓冲区大小增加 – yano

+1

内存实时音频需要的数量,与任何最近的iOS设备可用内存相比,通常不值得优化。巨大的(大部分是空的)圆形音频缓冲器是一种常见的解决方案,不需要切片。 – hotpaw2