2011-11-11 164 views
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;

我遇到的問題是滑塊點總是會在播放後返回到音頻的開頭。這是一個錯誤嗎?我該如何改變這一點?請提供您的建議。

回答

1

我不能說這是否是一個錯誤,但請嘗試使用代理方法AVAudioPlayer。在didFinishPlaying方法中將Slider值設置爲maximumValue。這可能是解決方案之一。

+0

我嘗試過,但播放音頻後滑塊移動到開頭 – Siddharth

+0

ok然後我認爲它是你的NSTimer問題。只要在歌曲播放結束後立即使定時器失效,而不是重新初始化......我認爲這可能是因爲這個原因。您可以使AVAudioPlayer委託方法中的計時器無效。還將nil分配給變量。 – DShah

1

打印avAudioPlayer.currentTime的值,然後將其分配給playslider.value 我想最後它會變成零。並且它將賦予零playslider.value

+0

我在這裏注意到的事情是avAudioPlayer.currentTime的值在最後永遠不會等於avAudioPlayer.duration。 – Siddharth

+0

它只是在結束之前跳躍。 – Siddharth