如何真正阻止音频快速播放

时间:2019-07-18 15:48:37

标签: ios swift avaudioplayer

在我的应用中,我有一个计时器。当用户启动计时器时,它将播放铃声音频剪辑。此音频片段会响起(共鸣)几秒钟。用户可以随时重新启动计时器,只要这样做,就可以再次播放铃声音频剪辑。

正在发生的事情是,如果在重新启动时轻按铃音,由于重叠,它不会再次播放铃音。我以为将代码添加到.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()
        }
    }

1 个答案:

答案 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()
    }
}