我有一个非常具体的问题,我还没有找到解决方案。 我有按钮按下的IBAction。按下此按钮时我想要发生的是:
播放声音文件(声音长约5秒)
屏幕上的闪烁字(这也是大约5秒钟)
我希望这可以同时发生,所以总时间约为5秒(声音在播放时闪烁的单词)。
我最终得到的结果是首先闪现,然后播放声音。我永远不能让他们同时去。有趣的是,即使放在行动的最开始,我仍然无法先发出声音。
我已经尝试过NSThread声音,exec,CATransaction flush,但没有什么可以让它们并发。
任何想法,顺便说一下,我是初学者程序员,如果没有正确描述,那就很抱歉。
-(IBAction) playButtonClick:(id)sender {
int i;
[_audioPlayer play];
for (i=0; i<10; i++){
[self.model getNextWord];
[self displayWord];
[CATransaction flush];
usleep(550000); // word on screen for 0.55 seconds
}
}
[CATransaction flush]是必需的,否则我所看到的就是最后一个字。
答案 0 :(得分:1)
您可以使用2种工具:
prepareToPlay()
playAtTime(_:)
准备以便声音在内存中。
调用此方法可预加载缓冲区并获取播放所需的音频硬件,从而最大限度地减少调用播放方法和声音输出开始之间的延迟。
等到你的其他用户界面准备就绪,然后再播放。
使用此方法可以精确同步两个或多个AVAudioPlayer对象的播放。