在Swift中的某个时间停止AVAudioPlayer

JSp*_*cky 3 avaudioplayer ios swift

我正在尝试播放一段声音片段.我如何在特定时间停止AVAudioPlayer?

我有一个函数,当从滑块值调用时,将把播放时间设置为给定的位置.(songStart和SongEnd只是歌曲的一个百分比)我可以建立什么功能来阻止它?

    func setSongConstraints(songStart: Double, songEnd: Double){
         audioPlayer.currentTime = audioPlayer.duration * songStart
    }
Run Code Online (Sandbox Code Playgroud)

我知道一个选项是设置一个等待计时器或什么,然后在这段时间后调用停止.

但是,我希望在歌曲开始后允许改变歌曲结束点的功能.等待计时器在这种情况下不起作用,因为它需要在启动后进行更改.

Wez*_*Wez 7

您应该只使用NSTimer并检查对象的currentTime属性AVAudioPlayer.

例如

在这里我启动计时器viewDidLoad,但实际上你想要在开始播放音频时这样做.

var timer:NSTimer!

override func viewDidLoad() {
    super.viewDidLoad()
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "checkTime", userInfo: nil, repeats: true)
}
Run Code Online (Sandbox Code Playgroud)

然后创建计时器每秒运行的功能,以根据您自己的值检查音频播放器当前时间,END_TIME可以更新或替换为您的songEnd逻辑.

var END_TIME = 10.0

func checkTime() {
    if self.audioPlayer.currentTime >= END_TIME {
        self.audioPlayer.stop()
        timer.invalidate()
    }
}
Run Code Online (Sandbox Code Playgroud)

ref:AVAudioPlayerNSTimer

  • 这似乎不必要地昂贵和粗糙......音频只会在一秒的边界上停止,并且你必须每秒轮询。我下面的解决方案重置计时器,使其只需触发一次,然后终止音频。 (2认同)