按下按钮后,如何在屏幕活动的同时播放声音

时间:2016-01-28 20:18:38

标签: ios concurrency action audio-player

我有一个非常具体的问题,我还没有找到解决方案。 我有按钮按下的IBAction。按下此按钮时我想要发生的是:

  1. 播放声音文件(声音长约5秒)

  2. 屏幕上的闪烁字(这也是大约5秒钟)

  3. 我希望这可以同时发生,所以总时间约为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]是必需的,否则我所看到的就是最后一个字。

1 个答案:

答案 0 :(得分:1)

您可以使用2种工具:

  • prepareToPlay()
  • playAtTime(_:)

准备以便声音在内存中。

  

调用此方法可预加载缓冲区并获取播放所需的音频硬件,从而最大限度地减少调用播放方法和声音输出开始之间的延迟。

等到你的其他用户界面准备就绪,然后再播放。

  

使用此方法可以精确同步两个或多个AVAudioPlayer对象的播放。