在我的应用中,我有一个计时器。当用户启动计时器时,它将播放铃声音频剪辑。此音频片段会响起(共鸣)几秒钟。用户可以随时重新启动计时器,只要这样做,就可以再次播放铃声音频剪辑。
正在发生的事情是,如果在重新启动时轻按铃音,由于重叠,它不会再次播放铃音。我以为将代码添加到.stop()然后再将.play()可以解决问题,但是没有用。取而代之的是,似乎重新启动按钮就像是暂停/播放按钮,当您点击按钮时,您会听到铃声音频片段产生共鸣。
我认为我需要某种方法来“清除”来自AVAudioPlayer()的任何播放音频,但我不知道该怎么做(并且搜索互联网没有帮助)。
这是我的代码:
@IBAction func RestartTimerBtn(_ sender: Any) {
timer.invalidate() // kills the past timer so it can be restarted
// stop the bell audio so it can be played again (usecase: when restarting right after starting bell)
if audioPlayer_Bell.isPlaying == true{
audioPlayer_Bell.stop()
audioPlayer_Bell.play()
}else {
audioPlayer_Bell.play()
}
}
答案 0 :(得分:3)
来自AVAudioPlayer.stop
docs(重点是我):
stop方法不会重置currentTime属性的值 设为0。换句话说,如果您在播放过程中调用
stop
然后调用play
,播放会在中断处恢复播放。
相反,请考虑利用currentTime
属性在重新play
播放之前,向后跳到声音的开头:
@IBAction func RestartTimerBtn(_ sender: Any) {
timer.invalidate() // kills the past timer so it can be restarted
if audioPlayer_Bell.isPlaying == true{
audioPlayer_Bell.stop()
audioPlayer_Bell.currentTime = 0
audioPlayer_Bell.play()
}else {
audioPlayer_Bell.play()
}
}