按下按钮后如何与屏幕同时播放声音 activity

Upon button press how can play a sound at EXACT same time as screen activity

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

  1. 播放一个声音文件(这是大约 5 秒长的声音)

  2. 屏幕上闪字(这也是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] 是必需的,否则我将看到最后一个字。

您有 2 个工具可供使用:

  • prepareToPlay()
  • playAtTime(_:)

准备好让声音在内存中。

Calling this method preloads buffers and acquires the audio hardware needed for playback, which minimizes the lag between calling the play method and the start of sound output.

等到 UI 的其余部分准备就绪后再玩。

Use this method to precisely synchronize the playback of two or more AVAudioPlayer objects.