我正在尝试获取一些音频,以便能够在演奏时调整音调。我对 Swift 和 iOS 非常陌生,但我最初的尝试是在播放时更改 timePitchNode.pitch
;但是,它不会在播放时更新。我当前的尝试是重置 audioEngine
,并让它从播放的位置恢复(如下)。如何确定音频当前所在的位置,以及如何让它从那里恢复?
var audioFile: AVAudioFile?
var audioEngine: AVAudioEngine?
var audioPlayerNode: AVAudioPlayerNode?
var pitch: Int = 1 {
didSet {
playResumeAudio()
}
}
…
func playResumeAudio() {
var currentTime: AVAudioTime? = nil
if audioPlayerNode != nil {
let nodeTime = audioPlayerNode!.lastRenderTime!
currentTime = audioPlayerNode!.playerTimeForNodeTime(nodeTime)
}
if audioEngine != nil {
audioEngine!.stop()
audioEngine!.reset()
}
audioEngine = AVAudioEngine()
audioPlayerNode = AVAudioPlayerNode()
audioEngine!.attachNode(audioPlayerNode!)
let timePitchNode = AVAudioUnitTimePitch()
timePitchNode.pitch = Float(pitch * 100)
timePitchNode.rate = rate
audioEngine!.attachNode(timePitchNode)
audioEngine!.connect(audioPlayerNode!, to: timePitchNode, format: nil)
audioEngine!.connect(timePitchNode, to: audioEngine!.outputNode, format: nil)
audioPlayerNode!.scheduleFile(audioFile!, atTime: nil, completionHandler: nil)
let _ = try? audioEngine?.start()
audioPlayerNode!.playAtTime(currentTime)
}
最佳答案
我显然是愚蠢的。您可以在播放期间修改音高,并且它会更新。无需重置任何音频,只需在播放时改变节点即可工作。
关于iOS 通过 AVAudioUnitTimePitch 播放时调整音调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238703/