gpt4 book ai didi

ios - 为什么在音频队列播放代码中调用 CFRunLoopRunInMode()?

转载 作者:可可西里 更新时间:2023-11-01 03:59:30 24 4
gpt4 key购买 nike

我正在关注 iOS“音频队列编程指南 - 播放音频”。在本指南接近尾声时,在步骤 Start and Run an Audio Queue 中调用了 CFRunLoopRunInMode() :

do {                                               // 5
CFRunLoopRunInMode ( // 6
kCFRunLoopDefaultMode, // 7
0.25, // 8
false // 9
);
} while (aqData.mIsRunning);
//...

关于第 6 行的文档说:“CFRunLoopRunInMode 函数运行包含音频队列线程的运行循环。”但是,当我的方法返回时,运行循环是否仍然执行?在我的应用程序中按下播放按钮时,上面的代码由主线程执行。

现在我很难理解这些对 CFRunLoopRunInMode() 的调用有什么用,因为它们的缺点是我的播放按钮没有正确更新(它看起来被按下了音频播放的整个时间)并且没有积极影响,即如果我从代码中删除 do-while-loop 以及对 CFRunLoopRunInMode() 的调用,音频也可以很好地播放直接从此方法返回。好吧,这指向了一个显而易见的解决方案,即简单地删除这些调用,因为这不会造成问题。有人可以解释为什么这段代码包含在 Apple 关于在 iOS 中使用音频队列进行音频播放的官方指南中吗?

编辑:

我刚刚看到在 Mac OS X 中存在与 iOS 相同的音频队列 API,iOS 指南似乎是 Mac OS guide 的复制粘贴副本。 .这让我怀疑那些对运行循环的调用只在 Mac OS 中需要,而在 iOS 中不再需要,例如因为否则 Mac OS 应用程序将退出或类似的东西。有人可以验证这一点或排除它吗?

最佳答案

@bunnyhero 是对的,CFRunLoopRunInMode() 通常用于命令行示例

https://github.com/abbood/Learning-Core-Audio-Book-Code-Sample/blob/master/CH05_Player/CH05_Player/main.c

只要你的AudioQueueRef没有被释放,你就不必在IOS中使用CFRunLoopRunInMode()...

我所做的是为音频队列创建一个单独的类,只要分配了我的类指针和 AudioQueueRef,我就可以播放、暂停、恢复、停止等....

关于ios - 为什么在音频队列播放代码中调用 CFRunLoopRunInMode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com