2013-04-28 43 views
0

我的應用程序使用AVAudioPlayer播放音樂文件。它還有一個UISlider來調整正在播放的歌曲的位置。然而,在這似乎是改變audioPlayer的持續時間UISlider一個奇怪的錯誤。AVAudioPlayer持續時間改變

當歌曲開始時,作爲這一進程的一部分,值設置像這樣:

audioPlayer.currentTime = 0; 
seekingSlider.maximumValue = [audioPlayer duration]; 
seekingSlider.value = audioPlayer.currentTime; 

這工作沒有任何問題。然後我有一個NSTimer更新播放時間和seekSlider。這似乎也沒有問題。當用戶改變了追求,那然後去下面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語句中讀取它來調試發生的事情。令我驚訝的是,它發生了變化。下面是在歌曲的開頭一個樣本輸出,只是在設置這些值之後:只是暫停其55秒在後

after setting, seeking slider is at 0.000000/278.981384, audioplayer is at 0.000000/278.981375 

這裏有另外一個,:

pausing, seeking slider is at 55.884716/278.981384, audioplayer is at 55.946236/274.689354 

是否與audioPlayer一個已知的bug改變持續時間?這表現爲一個壞的錯誤,當用戶改變滑塊並將其移動到下一首歌曲,因爲audioPlayerDidFinishPlaying被調用。

回答

4

在某些壓縮格式的,因爲它通過學習演奏(並且因此解碼)越來越多的關於該歌曲越來越它的音頻播放器可以改變的持續時間的判斷。。有一個類似的觀察這裏:

Audio player duration changes while playing

我想你會需要調整由滑塊所表達的持續時間,以便在其持續時間的知識相匹配的音頻播放器的變化。

+0

呀,因爲張貼,我意識到了這一點。謝謝馬特。 – user592419 2013-04-28 16:47:56