AVAudioPlayer停止声音并从头开始播放

时间:2010-10-02 13:22:53

标签: cocoa-touch avaudioplayer avfoundation

我使用AVAudioPlayer播放10秒的wav文件,它运行正常。 现在我要在第4秒停止wav然后再从中再次播放 第1秒。

这是我尝试过的代码:

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 play]时,wav继续播放第5秒而不是从头开始播放。

我怎么能这样做?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:59)

Apple的AVAudioPlayer class reference说:

stop方法不会将currentTime属性的值重置为0.换句话说,如果在播放期间调用stop然后调用play,则播放将从其停止的位置恢复。

所以你应该可以用:

重新启动它
[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];

答案 1 :(得分: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];

现在我可以重新开始生活。

答案 2 :(得分:0)

夫特:

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