基本上,我设置了一个数组,这样当按下一个按钮时,它会每秒返回一个值,这些值先前已在项目中声明。
我的项目中有四个声音,我想播放而不是数字值。
使用的代码是:
- (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]
替换为与这些数字相当的声音。
有人对我如何做到这一点有什么建议吗?并不像仅仅用我的音频文件名称替换数字那么简单!谢谢!!
答案 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
,并在操作之间创建依赖关系以按顺序执行它们。