繁体   English   中英

在 Swift 中的某个时间停止 AVAudioPlayer

[英]Stopping AVAudioPlayer at a certain time in Swift

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

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

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

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

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

可以使用Timer检查AVAudioPlayer对象的currentTime属性。

例如

当您开始播放音频时启动计时器。 根据所需的准确度级别调整检查间隔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()
    }
}

您可以使用等待计时器。 如果用户重置歌曲的终点,只需将计时器重置为 - 的新增量。 您可以通过终止现有计时器并生成一个新计时器或更改现有计时器的 fireDate 来做到这一点。 确保处理新端点早于 currentTime 的情况...然后您应该调用 stop 并终止现有计时器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM