iPhone应用程序使用NSThread启动一个线程,该线程会定期播放简短的音频节拍以加快速度。
启动并播放声音的代码:
tickingThread = [[NSThread alloc] initWithTarget:self
selector:@selector(playStepTicks:)
object:nil];
-(void)playStepTicks:(id) arg
{
NSLog(@"Started ticking.");
NSThread *cur = [NSThread currentThread];
NSTimeInterval stime = 0.3;
while (!cur.isCancelled) {
CFTimeInterval t = CACurrentMediaTime();
NSLog(@"Tick: %f", t);
AudioServicesPlaySystemSound (tickSound);
t = CACurrentMediaTime() - t;
[NSThread sleepForTimeInterval:stime-t];
};
NSLog(@"Stopped ticking.");
}
音频循环在iOS6上非常精确地运行,并且在屏幕打开时不会被UI事件分散注意力。
我们在iPhone 4S上启用了接近传感器以节省电量。
不幸的是,这会对音频循环产生令人不快的影响:使用大抖动播放节拍(请参阅video on YouTube)。
如何在iOS 6上解决此问题?
答案 0 :(得分:1)
在Apple的开发者论坛上寻求帮助之后,我们决定使用音频单元生成连续的音频信号并正确设置其振幅(静音为零,刻度为常数)以实现滴答效果。
代码是基于iOS Tone Generator编写的。