3

一个 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 上解决这个问题?

4

1 回答 1

1

在 Apple 的开发者论坛上寻求帮助后,我们决定使用 Audio Units 来生成连续的音频信号,并适当设置其幅度(静音为零,滴答声为常数)以实现滴答声效果。

该代码是基于iOS Tone Generator编写的。

于 2013-11-29T11:39:24.113 回答