objective-c - 如何让AudioQueue播放而不卡住GUI?

标签 objective-c cocoa core-audio audioqueue cfrunloop

我刚刚开始从 CoreAudio 书(粗剪)中学习 AudioQueues。 我做了AudioQueue播放示例教程,与苹果教程示例基本相同。一切工作正常。

当我尝试在具有 GUI 的应用程序中实现代码时,问题就开始了。我通过将代码粘贴到 NSObject 子类的“init”方法中来测试它。我可以让队列执行回调的唯一方法是在 init 末尾插入一个空的 DO...WHILE 循环,但这会使 GUI 卡住(显然...)!!

显然,只要为 inCallbackRunLoop 和 CallbackRunLoopMode 参数将 AudioQueueNewOutput 传递为 NULL,AudioQueue 就应该自动在其自己的单独线程中运行。那只是没有发生。我只听到缓冲区启动后 1.5 秒的声音。

显然,我不明白事情是如何运作的一些基本原理......

卡斯帕

-(void) start
{
CheckError(
     AudioQueueStart(queue, NULL),
 "AudioQueueStart failed");

printf("Playing...\n");
do {
} while (0 == 0);            //WHY IS THIS MAKING IT PLAY???
}

最佳答案

事实证明,我的 userData 结构没有在头文件中声明为 ivar。菜鸟错误...

关于objective-c - 如何让AudioQueue播放而不卡住GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818002/

相关文章:

ios - 枚举NSArray从给定索引开始以两种方式搜索(环绕)

ios - 绘制 UIBezierPath 时出错。没有当前点

ios - 比较两个图像以检查它们是否相同

ios - 将 UICollectionView 中的所有图片保存为一张图片

cocoa - 放置在 NSTableView 上的行为

methods - AudioFileGetProperty - .mm 源文件中没有匹配的函数调用,但在 .m 中可以吗?

ios - 如何从 iOS 中的十六进制/二进制(原始数据)值生成音频文件?

IOS - 将 NSDictionary 保存到磁盘

cocoa - 如何在基于 SSD 的 Mac 上模拟正常硬盘性能?

ios - 在不移除混音器总线或停止/启动图的情况下停止总线渲染回调