我正在播放一首歌AVAudioPlayerNode,我试图控制它的时间使用UISlider但是我无法弄明白如何使用它来寻找时间AVAUdioEngine.
Pau*_*ehn 11
在经过多次试验和错误后,我想我终于弄明白了.
首先,您需要计算文件的采样率.为此,请获取AudioNode的最后渲染时间:
var nodetime: AVAudioTime = self.playerNode.lastRenderTime
var playerTime: AVAudioTime = self.playerNode.playerTimeForNodeTime(nodetime)
var sampleRate = playerTime.sampleRate
Run Code Online (Sandbox Code Playgroud)
然后,将采样率乘以新的时间(以秒为单位).这将为您提供想要启动播放器的歌曲的确切帧:
var newsampletime = AVAudioFramePosition(sampleRate * Double(Slider.value))
Run Code Online (Sandbox Code Playgroud)
接下来,您将要计算音频文件中剩余的帧数:
var length = Float(songDuration!) - Slider.value
var framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)
Run Code Online (Sandbox Code Playgroud)
最后,停止节点,安排新的音频片段,然后再次启动节点!
playerNode.stop()
if framestoplay > 1000 {
playerNode.scheduleSegment(audioFile, startingFrame: newsampletime, frameCount: framestoplay, atTime: nil,completionHandler: nil)
}
playerNode.play()
Run Code Online (Sandbox Code Playgroud)
如果你需要进一步的解释,我在这里写了一个简短的教程:http://swiftexplained.com/?p = 9
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |