我刚刚从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???
}
答案 0 :(得分:2)
事实证明我的userData结构未在头文件中声明为ivar。菜鸟错误......