0

我有 5 个音频通道由 5 个 AVAudioPlayer 对象操作,我想为每个通道添加一个非常小的延迟,这样当我按下按钮时,我会得到:

  • 启动声音 1(持续 10 秒)
  • 在声音 1 后 0.25 秒开始声音 2
  • 开始声音 3 声音 2 后 0.25 秒
  • 开始声音 4 声音 3 后 0.25 秒
  • 开始声音 5 声音 3 后 0.25 秒

我厌倦了在每次调用 [AVAudioPlayerObeject play] 之间使用 sleep(0.25) 来做到这一点,如下所示:

[audioPlayer1 play];
sleep(delay);
[audioPlayer2 play];
sleep(delay);
[audioPlayer3 play];
sleep(delay);
[audioPlayer4 play];
sleep(delay);
[audioPlayer5 play];

...其中延迟是设置为 0.25 的浮点变量。但是,这不起作用,我一次听到所有 5 种声音。我尝试使用 NSTimer 进行试验,但我并不真正了解如何为延迟创建一个单独的方法,然后用我的代码调用该方法。

有人可以帮我修改我的代码以获得预期的效果吗?谢谢!

4

1 回答 1

1

Keep state with an integer that identifies which sound to start...

@property(assign, nonatomic) NSInteger startSound;

Schedule a timer...

self.startSound = 0;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

When the timer fires, start a new sound. Quit after you've started 5....

- (void)timerFired:(NSTimer *)timer {

    if (self.startSound < 5) {
        // assume you know how to play sound N, numbered 0..4
        [self playSound:self.startSound++];
    } else {
        [timer invalidate];
    }
}

You can make the timer interval and the max count of sounds variables in this class.

于 2013-05-24T05:47:34.087 回答