在 Swift 的某个时间停止 AVAudioPlayer

Stopping AVAudioPlayer at a certain time in Swift

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

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

    func setSongConstraints(songStart: Double, songEnd: Double){
         audioPlayer.currentTime = audioPlayer.duration * songStart
    }

我知道一个选项是设置等待计时器或其他东西,然后在该时间后调用停止。

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

我知道你不想做一个等待计时器,但你总是可以跟踪已经过去了多少时间,并在有新数据可用时重置计时器。或者我猜想在某种循环中轮询 NSDate。

您可以使用等待计时器。如果用户重置歌曲的终点,只需将计时器重置为新的增量 - 。您可以通过终止现有计时器并生成新计时器或更改现有计时器的 fireDate 来实现。请务必处理新端点早于当前时间的情况...然后您应该调用停止并终止现有计时器。

可以使用Timer to check the currentTime property of your AVAudioPlayer对象。

例如

开始播放音频时启动计时器。根据所需的准确度水平调整检查间隔 0.1

var timer:Timer!

timer = Timer.scheduledTimerWithTimeInterval(
    0.1, 
    target: self, 
    selector: "checkTime",
    userInfo: nil, 
    repeats: true
)

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

let END_TIME = 10.0

func checkTime() {
    if self.audioPlayer.currentTime >= END_TIME {
        self.audioPlayer.stop()
        timer.invalidate()
    }
}