ios - AVAudioEngine 求歌曲时间

标签 ios avaudioengine

我正在使用 AVAudioPlayerNode 播放歌曲,我正在尝试使用 UISlider 来控制它的时间,但我无法弄清楚如何使用 AVAUdioEngine.

最佳答案

经过反复试验,我想我终于弄明白了。

首先您需要计算文件的采样率。为此,请获取 AudioNode 的最后渲染时间:

var nodetime: AVAudioTime  = self.playerNode.lastRenderTime
var playerTime: AVAudioTime = self.playerNode.playerTimeForNodeTime(nodetime)
var sampleRate = playerTime.sampleRate

然后,将您的采样率乘以以秒为单位的新时间。这将为您提供您想要启动播放器的歌曲的确切帧:

var newsampletime = AVAudioFramePosition(sampleRate * Double(Slider.value))

接下来,您将要计算音频文件中剩余的帧数:

var length = Float(songDuration!) - Slider.value
var framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)

最后,停止您的节点,安排新的音频片段,然后再次启动您的节点!

playerNode.stop()

if framestoplay > 1000 {
   playerNode.scheduleSegment(audioFile, startingFrame: newsampletime, frameCount: framestoplay, atTime: nil,completionHandler: nil)
}

playerNode.play()

如果您需要进一步的解释,我在这里写了一个简短的教程:http://swiftexplained.com/?p=9

关于ios - AVAudioEngine 求歌曲时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954206/

相关文章:

ios - 带有今天扩展的 AVAudioEngine

ios - 可以在 Parse 数据库中获取 authData 吗?

objective-c - UIView 方向不正确

ios - 仅在长按识别器触发后才执行平移手势识别器

ios - 新手-游戏开发(iPhone)- objective-c 和游戏开发的新手

ios - 为什么我的多 channel 映射不能正常工作?

ios - 将单声道音频数据传递给 AVAudioEnvironmentNode

iphone - 钥匙串(keychain)警告 “System Roots” 钥匙串(keychain)无法修改

ios - 实时更改 SCNAudioPlayer 的音量 - Swift

swift - AVAudioFile.length 为 0 即使文件存在