AVAudioPlayer的currentTime方法何时返回负值?正在播放音频文件(我在获取currentTime之前进行检查)但是调用currentTime会返回负值。
有什么想法吗?感谢
if(thePlayer != nil && [thePlayer isPlaying]){
double playerTime = [thePlayer currentTime];
NSLog(@"Player Time: %f", playerTime);
}
输出
Player Time: -0.019683
答案 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>
对我来说非常合适,重新加载音频缓冲区似乎非常快。