AVAudioPlayer持续时间改变

我的应用程序使用AVAudioPlayer播放音乐文件。 它还有一个UISlider来调整正在播放的歌曲的位置。 但是,UISlider有一个奇怪的错误,那就是它正在改变audioPlayer的持续时间。

当一首歌曲开始时,作为过程的一部分,值设置如下:

audioPlayer.currentTime = 0; seekingSlider.maximumValue = [audioPlayer duration]; seekingSlider.value = audioPlayer.currentTime; 

这工作没有问题。 然后我有一个NSTimer更新播放时间和seekSlider。 这似乎也没有问题。 当一个用户改变了这个查找的时候,那么这个seekingChanged函数就会变成下面seekingChanged

 - (IBAction)seekingChanged:(id)sender { audioPlayer.currentTime = seekingSlider.value; [self updatePlayedTimeLabel:audioPlayer.currentTime]; } - (void)updatePlayedTimeLabel:(NSTimeInterval)time { playedTime.text = [NSString stringWithFormat:@"%d:%02d", (int)time / 60, (int)time % 60, nil]; [playedTime sizeToFit]; } 

请注意,我无法写入audioPlayer.duration。 我只是从开始和各种NSLog语句中读取它来debugging发生的事情。 令我惊讶的是,它发生了变化。 下面是一首歌曲开始处的示例输出,在设置值之后:

 after setting, seeking slider is at 0.000000 / 278.981384, audioplayer is at 0.000000 / 278.981375 

这是另外一个,暂停55秒后:

 pausing, seeking slider is at 55.884716 / 278.981384, audioplayer is at 55.946236 / 274.689354 

有没有一个与audioPlayer改变持续时间的已知错误? 当用户改变滑块并且由于audioPlayerDidFinishPlaying被调用而移动到下一首歌曲时,这performance为错误的错误。

在某些压缩格式下,audio播放器可以通过播放(并因此解码)越来越多的关于该歌曲而学习越来越多的持续时间的估计。 这里有一个类似的观察:

播放时audio播放器的持续时间会改

我认为您需要调整滑块所表示的时间,以便使audio播放器的变化与其持续时间的知识相匹配。