当使用每秒返回一个数字的序列数组时,如何使多个声音一个接一个地播放

时间:2016-03-23 18:53:17

标签: ios objective-c arrays audio ibaction

基本上,我设置了一个数组,这样当按下一个按钮时,它会每秒返回一个值,这些值先前已在项目中声明。

我的项目中有四个声音,我想播放而不是数字值。

使用的代码是:

- (IBAction)playSeq:(UIButton *)sender
{
    AppDelegate* app = [[UIApplication sharedApplication] delegate];
    if (sender.tag == 1001)
    {
//        [app addNote:2];
//        [app addNote:3];
//        [app addNote:2];
//        [app addNote:0];
//        [app addNote:1];

        [app playSeq:@[@2, @3, @3, @0, @1]];
    }
}

在使用函数playSeq的情况下,我希望能够将[@2, @3, @3, @0, @1]替换为与这些数字相当的声音。

有人对我如何做到这一点有什么建议吗?并不像仅仅用我的音频文件名称替换数字那么简单!谢谢!!

1 个答案:

答案 0 :(得分:0)

playSeq方法的简单实现可能如下所示:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
NSTimeInterval timeDelay = 0.0;
for (id sound in sounds) {
    dispatch_time_t dispatchDelay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeDelay * NSEC_PER_SEC));
    dispatch_after(dispatchDelay, queue, ^{
        // Play the sound in whatever fashion you want
        [self play:sound];
    });
}

这并没有给你很多控制(比如取消等),但它可能已足以满足你的需求。

如果没有,请考虑使用自定义NSOperation子类进行声音播放任务。要么为此类提供delay属性以延迟声音播放,要么创建另一个NSOperation子类,其唯一任务是等待指定的延迟。然后,您可以将所有这些操作添加到NSOperationQueue,并在操作之间创建依赖关系以按顺序执行它们。