我刚开始从 CoreAudio 书(粗略)中了解 AudioQueues。我做了AudioQueue播放示例教程,和apple教程示例基本一样。一切正常。
当我尝试在带有 GUI 的应用程序中实现代码时,问题就开始了。我通过将代码粘贴到 NSObject 子类的“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???
}