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播放器的变化与其持续时间的知识相匹配。