一个 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 上启用了接近传感器以节省电量。
不幸的是,这对音频循环产生了令人不快的影响:播放节拍时抖动很大(请参阅YouTube 上的视频)。
如何在 iOS 6 上解决这个问题?