1

AVAudioPlayer 的 currentTime 方法什么时候返回负值?音频文件正在播放(我在获取 currentTime 之前进行了检查),但调用 currentTime 返回一个负值。

有任何想法吗?谢谢

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

输出

Player Time: -0.019683
4

3 回答 3

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");
}

}

于 2010-03-30T22:47:52.830 回答
0

我找到了一种解决方法,可以解决 iPad 上的问题,直到为 iPad 发布 iOS4 并解决问题之前,它都是可行的。

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

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

于 2010-08-11T12:02:05.010 回答
0

我相信这个问题在 iOS4 beta 2 SDK 版本中得到了修复,所以你不应该在 iPhone 上看到它。见这里。但是,我认为我们在 iPad 上遇到了这个问题,直到 iOS4 在该设备上可用。

有人知道解决方法吗?有什么方法可以预测当前时间将如何被错误地报告,因此可以应用校正因子?我所看到的是,据报道当前时间比实际播放时间晚了几秒钟(如果您靠近音频的开头,这可能是负数),并且它与正确的位置一起跟踪。那么,每当在早期 iOS 版本上使用该应用程序时,是否可以应用一些偏移量?

于 2010-07-29T13:15:23.463 回答