iPhone - 为什么AVAudioPlayer currentTime返回负值?

时间:2009-11-17 08:51:37

标签: iphone avaudioplayer

AVAudioPlayer的currentTime方法何时返回负值?正在播放音频文件(我在获取currentTime之前进行检查)但是调用currentTime会返回负值。

有什么想法吗?感谢

if(thePlayer != nil && [thePlayer isPlaying]){
    double playerTime = [thePlayer currentTime];
    NSLog(@"Player Time: %f", playerTime);
}

输出

Player Time: -0.019683

3 个答案:

答案 0 :(得分:1)

你在模拟器上测试这个吗?模拟器上有几个AVAudioPlayer错误。一个是currentTime可以是一个非常大的正数或负数。即使您将currentTime设置为特定数字,它仍然会经常显示不同的内容。据我所知,这只是模拟器上的一个问题,而不是在设备上运行时。

以下是我用来设置AVAudioPlayer实例的currentTime属性的代码:

- (void)safeSetCurentTime:(NSTimeInterval)newTime {
self._player.currentTime = newTime;
if (self._player.currentTime != newTime)
{
    // code falls through to here all the time
            // the second attempt _usually_ works.
    [self prepareAudioForPlayback];
    self._player.currentTime = newTime;
    //NSLog(@"Set time failed");
}

}

答案 1 :(得分:0)

我认为此问题已修复iOS4 beta 2 SDK版本,因此您不应在iPhone上看到它。见here。但是,我认为我们在iPad上遇到问题,直到iOS4在该设备上可用。

有人知道解决方法吗?有任何方法可以预测如何错误地报告当前时间,因此可以应用修正系数吗?我所看到的是,据报道当前时间比实际播放时间落后几秒(如果你接近音频的开头,可能是负片),它会跟踪正确的位置。那么,每当在早期iOS版本上使用该应用程序时,可能会有一些偏移量可以应用吗?

答案 2 :(得分:0)

我找到了解决问题的解决方法,这可以解决问题,直到iOS4发布到iPad并解决问题。

保持音频缓冲区,当您暂停/停止后即将恢复播放时,将音频缓冲区重新加载到AVAudioPlayer实例中,将currentTime设置为要从中恢复播放的位置,然后恢复播放。 / p>

对我来说非常合适,重新加载音频缓冲区似乎非常快。