为iPhone应用程序制作一个计时器,稍微延迟几个音频通道



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

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

我想在每次调用[AVAudioPlayerObeject play]之间使用sleep(0.25)来做这个,像这样:

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

…其中delay是一个设置为0.25的浮动变量。然而,这行不通,我同时听到了所有5种声音。我试着用NSTimer做实验,但我真的不明白如何为延迟创建一个单独的方法,然后用我的代码调用这个方法。

有人可以帮我修改我的代码,以获得所需的效果吗?谢谢!

保持状态,用一个整数标识哪个声音开始…

@property(assign, nonatomic) NSInteger startSound;

设置一个定时器…

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

当计时器触发时,开始一个新的声音。开始后退出....

- (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];
    }
}

您可以在这个类中设置定时器间隔和声音的最大计数。

最新更新