28

我用 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 秒,而不是从头开始播放。

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

4

3 回答 3

63

苹果的AVAudioPlayer 类参考说:

stop 方法不会将 currentTime 属性的值重置为 0。换句话说,如果您在播放过程中调用 stop 然后调用 play,则播放会从中断点恢复。

所以你应该能够重新启动它:

[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
于 2010-10-02T13:48:16.330 回答
6

因此,从我对 DarkDust 答案的评论中可以看出,我遇到了一些麻烦。该问题仅出现在 iOS 4.3.3/4.3.5、iPhone 4 上。可能还有早期的 iO​​S 版本,但不是 iOS 5.0.1。不知何故,AVAudioPlayer 本身在停止时似乎“中断”,而后者的播放将莫名其妙地失败。实际上,“停止”会卸载prepareToPlay上加载的一些内容,如果您只是“暂停”播放器,则不会卸载 - 根据参考资料。所以我的解决方案是使用暂停而不是停止 - 考虑到播放器当前正在播放 - 否则没有理由停止任何事情。理论上也应该更快。为我解决了。

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

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

于 2012-02-23T07:56:05.537 回答
0

迅速:

mySound.audioPlayer?.stop()
mySound.audioPlayer?.currentTime = 0
mySound.audioPlayer?.play()
于 2017-04-27T20:58:26.347 回答