如何解决Swift - 如何在循环时获取 AVAudioPlayerNode 的当前位置?
我有一个 AVAudioPlayerNode
循环播放歌曲的一段:
audioPlayer.scheduleBuffer(segment,at: nil,options:.loops)
我想在播放时获取歌曲的当前位置。通常,这是通过计算 = currentFrame / audioSampleRate
哪里
var currentFrame: AVAudioFramePosition {
guard let lastRenderTime = audioPlayer.lastRenderTime,let playerTime = audioPlayer.playerTime(forNodeTime: lastRenderTime) else {
return 0
}
return playerTime.sampleTime
}
然而,当循环结束并重新开始时,currentFrame
不会重新开始。但它仍然增加,这使得 currentFrame / audioSampleRate
作为当前位置不正确。
那么计算当前位置的正确方法是什么?
解决方法
好的旧模将完成这项工作:
public var currentTime: TimeInterval {
guard let nodeTime = player.lastRenderTime,let playerTime = player.playerTime(forNodeTime: nodeTime) else {
return 0
}
let time = (Double(playerTime.sampleTime) / playerTime.sampleRate)
.truncatingRemainder(dividingBy: Double(file.length) / Double(playerTime.sampleRate))
return time
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。