OSX:AudioUnit 回调没有被足够的调用
Posted
技术标签:
【中文标题】OSX:AudioUnit 回调没有被足够的调用【英文标题】:OSX: AudioUnit callback not being called enough 【发布时间】:2017-02-12 20:48:49 【问题描述】:我有一个简单的应用程序,它可以记录音频并处理传入的字节。我发现我丢失了很多应该传入的数据,比如 2/3 .
这个套路:
static OSStatus AudioCallBack (void* userData, AudioUnitRenderActionFlags* ioActionFlags, const AudioTimeStamp* inTimeStamp, UInt32 inBusNumber, UInt32 nFrames, AudioBufferList* ioData)
没有被足够的调用。什么通常会导致这种情况?
【问题讨论】:
【参考方案1】:如果您尝试在音频单元回调(或任何其他执行 Objective C 消息传递、同步、锁定或内存管理等的操作)中进行任何大量处理,您的回调函数或块可能需要太长时间,因此您的应用程序可能会错过一些回调,从而错过一些音频数据。您可以通过删除回调中的所有处理来检查这一点,只需汇总接收到的音频样本数以确保每秒传入的数量正确。
如果发生这种情况,那么,为了防止您的回调阻塞太久,您应该重新安排您的处理以在另一个线程中完成全部或大部分处理,然后快速将音频单元回调中的数据复制到一个数组中、队列或 fifo 以传递给其他处理任务或线程。由于您知道音频回调的速率,因此您可以确定正确的速率以轮询所需的处理。
【讨论】:
是的,这就是问题所在。谢谢!以上是关于OSX:AudioUnit 回调没有被足够的调用的主要内容,如果未能解决你的问题,请参考以下文章
MacOS Catalina 10.15.7 AudioUnit 麦克风通知回调未调用
OsX 中 USB HID API 的回调永远不会被游戏手柄或其他任何东西调用