我使用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秒而不是从头开始播放。
我怎么能这样做?任何帮助将不胜感激。
答案 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()