首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在播放AUGraph时显示UIActivityIndicatorView

在播放AUGraph时显示UIActivityIndicatorView
EN

Stack Overflow用户
提问于 2013-07-01 00:51:06
回答 1查看 123关注 0票数 0

我的iOS应用程序有4个filePlayer单元连接到AUGraph中的一个混音器单元。我希望用户能够通过电子邮件将四个filePlayer单元的“混合”作为一个.caf文件。

我通过将回调附加到remoteIO并在回调中通过ExtAudioFileWriteAsync将混合器的输出写入文件来捕获混合器的输出。

当用户点击我的"Export Mix and Email“按钮时,我启动这个过程-也就是调用AUGraphStart。由于AUGraphStart发生在不同的线程上,因此我的应用程序接下来会在图形运行时调用MFMailComposeViewController代码。此代码显示电子邮件表单,并将混合的.caf文件附加到电子邮件中。这里最明显的问题是,文件虽然创建了,但并没有完全写入,因为图形仍在运行。

为了解决这个问题,在启动AUGraph之后,我会这样做:

代码语言:javascript
复制
    while ([myMixerObject graphIsRunning]) {
//        NSLog(@"...waiting for graph to stop...");
    }

graphIsRunning只是调用AUGraphIsRunning并返回一个布尔值。

这很管用,尽管看起来很马虎,但我坚持了下来。

当我试图在AUGraph捕获混合器的输出时显示UIActivityIndicatorView时,事情变得更加令人担忧。简而言之,当我这样做的时候。

代码语言:javascript
复制
    [activityIndicator startAnimating];
    while ([myMixerObject graphIsRunning]) {
//        NSLog(@"...waiting for graph to stop...");
    }
    [activityIndicator stopAnimating];

...the指示灯从不出现。

为了好玩,我把[activityIndicator startAnimating]放在while循环中,但它仍然没有出现。

我已经检查了activityIndicator对象是否被正确实例化(例如,我可以让它在图形不运行时出现),所以它让我相信在AUGraph运行时调用它有一些特殊之处。

我对iOS和Core Audio还很陌生,但我知道一些Core Audio调用是在实时线程上进行的,所以我的第一个怀疑是存在一些并发问题。然而,我不知道从哪里开始。问题是从我的while()循环开始的吗?我应该以不同的方式来处理吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 04:53:41

您的while循环阻塞了主线程,这就是您遇到UI问题的原因。我建议注册一个周期性(每秒5-10次)调用的回调函数(使用NSTimer或GCD定时器),而不是轮询您的mixer对象。此回调应检查混音器图是否正在运行。一旦图形停止,您的计时器回调就可以处理必要的UI更改和清理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17392655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档