如何在不冻结 GUI 的情况下让 AudioQueue 播放?
Posted
技术标签:
【中文标题】如何在不冻结 GUI 的情况下让 AudioQueue 播放?【英文标题】:How to make AudioQueue play without freezing GUI? 【发布时间】:2011-01-27 15:04:36 【问题描述】:我刚开始从 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???
【问题讨论】:
【参考方案1】:原来我的 userData 结构没有在头文件中声明为 ivar。菜鸟失误……
【讨论】:
以上是关于如何在不冻结 GUI 的情况下让 AudioQueue 播放?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不冻结 GUI 的情况下使用视频帧不断更新 contentcontrol?
如何在不冻结 gui 的情况下运行 QProcess 的同步链?