滑块在播放音频结束时停止

4

在我的项目中,我使用 AVAudioPlayer 播放已保存的音频。我显示了用于播放音频的滑块。滑块的值是使用播放器的当前时间属性设置的。 playSlider.value = avAudioPlayer.currentTime; 这是计时器代码

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];



//Calls the update current time function 
- (void)updateCurrentTime
{
    [self updateCurrentTimeForPlayer:self.player];
}


//Updates the current time while the audio is playing
-(void)updateCurrentTimeForPlayer:(AVAudioPlayer *)avAudioPlayer
{
    currentTimeLabel.text = [NSString stringWithFormat:@"%d:%02d", (int)avAudioPlayer.currentTime / 60, (int)avAudioPlayer.currentTime % 60, nil];
    playSlider.value = avAudioPlayer.currentTime;

    if (playSlider.value==playSlider.minimumValue) 
    {
        moveToBeginningButton.enabled = NO;
        rewindButton.enabled = NO;
        NSLog(@"PlaySliderMaxValue1 === %f",playSlider.maximumValue);
        NSLog(@"PlaySliderValue1 === %f",playSlider.value);
    }
    else  
    {  
        moveToBeginningButton.enabled = YES;
        rewindButton.enabled = YES; 
        NSLog(@"PlaySliderMaxValue2 === %f",playSlider.maximumValue);
        NSLog(@"PlaySliderValue2 === %f",playSlider.value);

    }
}

滑块的最大值设置如下:

playSlider.maximumValue = audioPlayer.duration;

我遇到的问题是,在播放后,滑块指针总是会返回音频的开头。这是一个bug吗?我该如何解决?请提供您的建议。

2个回答

1

在将avAudioPlayer.currentTime分配给playslider.value之前,打印其值。我认为最终它会变成零,并将零分配给playslider.value。


我在这里注意到的是,avAudioPlayer.currentTime的值在最后从未等于avAudioPlayer.duration。 - Siddharth
它在到达结尾之前就跳出了。 - Siddharth

1
我无法确定这是否是一个错误,但尝试使用AVAudioPlayer的委托方法。在didFinishPlaying方法中将滑块值设置为最大值。这可能是其中一种解决方案。

我尝试过,但在播放音频后滑块会移动到开头。 - Siddharth
好的,那我觉得可能是你的NSTimer有问题。不要重新初始化,只需在歌曲播放完毕后立即使计时器失效即可。我认为可能是因为这个原因。你可以在AVAudioPlayer代理方法中使计时器无效。同时将变量分配为空值。 - DShah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接