我的应用程序使用 AVAudioPlayer 播放音乐文件。它还有一个 UISlider 来调整它在歌曲中播放的位置。然而,UISlider 有一个奇怪的错误,它似乎正在改变音频播放器的持续时间。
当一首歌曲开始时,作为该过程的一部分,值设置如下:
audioPlayer.currentTime = 0;
seekingSlider.maximumValue = [audioPlayer duration];
seekingSlider.value = audioPlayer.currentTime;
这没问题。然后我有一个更新playedTime 和 seekSlider 的NSTimer。这似乎也没有问题。当用户更改搜索时,然后转到以下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 语句中阅读它来调试正在发生的事情。令我惊讶的是,它发生了变化。这是一首歌曲开头的一个示例输出,就在设置值之后:
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。