基本上,我设置了一个数组,这样当按下按钮时,它每秒就会返回一次值,这些值先前已在项目中声明。
我的项目中要播放四个声音而不是数字值。
使用的代码是:
- (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/