2010-10-02 213 views
21

我使用AVAudioPlayer播放10秒的wav文件,它工作正常。 現在我在第4秒停止wav,然後在第1秒從 再次播放。AVAudioPlayer停止聲音並從頭播放

這裏是我試過的代碼:

NSString *ahhhPath = [[NSBundle mainBundle] pathForResource:@"Ahhh" ofType:@"wav"]; 
AVAudioPlayer *ahhhhhSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:ahhhPath] error:NULL]; 

[ahhhhhSound stop]; 
[ahhhhhSound play]; 

我得到的是,該WAV停在第4秒,但是當我再次運行[XXX播放],爲wav繼續播放5秒,而不是從一開始就玩。

我怎麼能做到這一點?任何幫助將不勝感激。

+0

而對於短的聲音明顯的症狀是聲音不玩第二次 - 呼籲停止和播放只是造成聲音完成播放和聲音聽起來像是第二個上場的被忽略。這就是我的代碼中發生的事情,下面的答案解決了它。 – Echelon 2014-10-22 09:12:26

回答

54

蘋果AVAudioPlayer class reference說:

停止方法不currentTime屬性的值重置爲0。換句話說,如果你在播放過程中調用停止,然後調用播放,播放將繼續在地步離開。

所以,你應該能夠重新啓動它:

[ahhhhhSound stop]; 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 
+0

我至少在iOS 4.3.3和4.3.5的設備上發現了這個問題。它適用於iOS 5.0.1設備。 (iPhone 4和4S),然後將currentTime設置爲0,然後播放,實際播放失敗(返回NO)。我在這裏拉我的頭髮... – Jonny 2012-02-23 07:28:52

+0

@Jonny:然後問一個新的問題。這個問題是1.5歲;-) – DarkDust 2012-02-23 07:48:18

+0

不,我發現了一個解決方法,併爲您的名望運行;-) – Jonny 2012-02-23 07:57:28

6

所以我有一些麻煩,你可以從我的DarkDust的回答評論見。這個問題只出現在iOS 4.3.3/4.3.5,iPhone 4上。可能更早的iOS版本,但不是iOS 5.0.1。不知何故,AVAudioPlayer本身在停止播放時似乎「中斷」,而後者播放將無法解釋。實際上,一個「停止」會卸載prepareToPlay上加載的一些內容,如果您只是「暫停」播放器,則不會卸載。所以我的解決方案是使用暫停而不是停止 - 認爲玩家正在玩 - 否則就沒有理由停止任何事情。理論上也應該更快。爲我解決了它。

if (ahhhhhSound.playing) { 
    [ahhhhhSound pause]; 
} 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 

現在我可以再次生活。

+0

+1此解決方案。 我遇到了停止問題(聲音會中斷,只有端部會播放其他聲音,等等......我有多個AVAudioPlayer實例)。 使用暫停並將currentTime設置爲0可解決我所有的問題! – 2012-07-09 21:24:43

+0

是的,暫停()是正確的方法。 – StackUnderflow 2017-02-14 00:33:04

0

斯威夫特:

mySound.audioPlayer?.stop() 
mySound.audioPlayer?.currentTime = 0 
mySound.audioPlayer?.play() 
相關問題