我正在尝试播放一段声音片段。我如何在特定时间停止AVAudioPlayer?
我有一个函数,当从滑块值调用时,会将播放时间设置为给定的位置。 (songStart和SongEnd只是歌曲的一部分) 我可以建立什么功能来阻止它?
func setSongConstraints(songStart: Double, songEnd: Double){
audioPlayer.currentTime = audioPlayer.duration * songStart
}
我知道一个选项是设置等待计时器或其他东西,然后在这段时间后调用stop。
但是,我希望在歌曲开始后允许更改歌曲结束点的功能。等待计时器在这种情况下不起作用,因为它需要在启动后进行更改。
答案 0 :(得分: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)
}
然后创建定时器每秒运行的功能,以根据您自己的值检查音频播放器当前时间,END_TIME
可以更新或替换为您的songEnd
逻辑。
var END_TIME = 10.0
func checkTime() {
if self.audioPlayer.currentTime >= END_TIME {
self.audioPlayer.stop()
timer.invalidate()
}
}
答案 1 :(得分:0)
我知道您不想做等待计时器,但您可以随时跟踪已经过了多长时间并在新数据可用时重置计时器。或者我想在某种循环中轮询NSDate。
答案 2 :(得分:0)
您可以使用等待计时器。如果用户重置歌曲的端点,只需将计时器重置为 - 的新增量 - 。您可以通过终止现有计时器并生成新计时器或更改现有计时器的fireDate来实现。确保处理新端点早于currentTime的条件...然后你应该调用stop并终止现有的计时器。