【问题标题】:AVAudioPlayer Duration ChangingAVAudioPlayer 持续时间更改
【发布时间】:2013-04-28 15:12:03
【问题描述】:

我的应用使用 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。

【问题讨论】:

    标签: ios avaudioplayer uislider


    【解决方案1】:

    在某些压缩格式下,音频播放器可能会改变其对持续时间的估计,因为它通过播放(并因此解码)越来越多的歌曲来了解越来越多的歌曲。这里有类似的观察:

    Audio player duration changes while playing

    我认为您需要调整滑块表示的持续时间,以匹配音频播放器对持续时间的了解的变化。

    【讨论】:

    • 是的,自从发帖以来,我意识到了这一点。谢谢马特。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多