接近传感器会影响播放音频的线程

时间:2013-09-23 19:53:45

标签: iphone ios audio nsthread proximity

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上解决此问题?

1 个答案:

答案 0 :(得分:1)

在Apple的开发者论坛上寻求帮助之后,我们决定使用音频单元生成连续的音频信号并正确设置其振幅(静音为零,刻度为常数)以实现滴答效果。

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