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

标签 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]

有人对我该如何做有任何建议吗?不像仅用音频文件的名称替换数字那样简单!谢谢!!

最佳答案

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中,并在这些操作之间创建依赖关系以按顺序执行它们。

关于ios - 当使用序列数组每秒发回一个数字时,如何使多个声音一个接一个地播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186457/

相关文章:

ios - 使用委托(delegate)显示/隐藏 tableview 单元格

ios - Swift 中 WebView 的问题

iphone - 无法识别的选择器发送到 OAuthCore 类中的类

javascript - TypeScript 平面数组到对象树

ios - 在 subview 的 UILabel 列表中查找文本

iphone - 当必需的输入参数为 nil 时在 objective-c 方法中抛出异常?

iphone - 实现 UIViewController 类别

c++ - 从文件的特定部分(复制到文档目录中)初始化 NSInputStream?

java - 如何使用从不同数组中随机选择的字符填充数组

javascript - Javascript 刽子手游戏问题