如何在不冻结GUI的情况下播放AudioQueue?

时间:2011-01-27 15:04:36

标签: objective-c cocoa core-audio audioqueue cfrunloop

我刚刚从CoreAudio书籍(粗略剪辑)开始学习AudioQueues。 我做了AudioQueue回放示例教程,它与apple教程示例基本相同。一切都很好。

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

显然,只要AudioQueueNewOutput为inCallbackRunLoop和CallbackRunLoopMode参数传递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???
}

1 个答案:

答案 0 :(得分:2)

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