在 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()
}
}
我正在尝试播放一段声音片段。我如何在特定时间停止 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()
}
}