AVAudioPlayer停止声音并从头播放

问题描述:

我使用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

苹果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

所以我有一些麻烦,你可以从我的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

斯威夫特:

mySound.audioPlayer?.stop() 
mySound.audioPlayer?.currentTime = 0 
mySound.audioPlayer?.play()