我正试图发出一个非常精确的定时发射的声音。
我使用以下代码来创建计时器:
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1ull*500000000, 5000ull);
dispatch_source_set_event_handler(timer, ^{[myAVAudioPlayer play];});
dispatch_resume(timer);myAVAudioPlayer的初始化方式如下:
NSURL *soundURL = [NSURL fileURLWithPath:[mainBundle pathForResource:@"clock" ofType:@"aiff"]];
myAVAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
[myAVAudioPlayer prepareToPlay];我还尝试使用.caf格式的声音和苹果的BubbleLevel示例代码中的SoundEffect类,在性能上没有显着差异。
如果发射率很低,声音是相当准确的。但如果我加快射速,声音就会非常不准确。
任何帮助都将不胜感激。
发布于 2011-07-15 07:58:24
调度定时器不是为音频精度而设计的。IIRC是苹果建议人们直接使用线程而不是分派队列的为数不多的几个领域之一。
比这更好的是研究Core Audio,它的设计目的是处理您想要的东西:对时间的精确控制。在这里我不能提供太多的细节,因为我不熟悉它的应用程序接口,而且它的文档也很糟糕,尽管谷歌很快找到了at least one person doing the same thing,所以你可能会幸运地找到一个更好的解决方案。
https://stackoverflow.com/questions/6701121
复制相似问题