我有一个音频文件,想要使用一些特效(例如音高特效)进行处理,然后将最终结果写入文件。
在处理文件和保存到磁盘之前,我会让用户实时调整音高特效并听取变化。
这是我实时处理的方法:
let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryPlayback, error: nil)
audioSession.setActive(true, error: nil)
audioEngine = AVAudioEngine()
audioFile = AVAudioFile(forReading: audioUrl!, error: nil)
audioPlayerNode = AVAudioPlayerNode()
audioEngine.attachNode(audioPlayerNode)
changePitchEffect = AVAudioUnitTimePitch()
changePitchEffect.pitch = 1.0 // default
audioEngine.attachNode(changePitchEffect)
audioEngine.connect(audioPlayerNode, to: changePitchEffect, format: nil)
audioEngine.connect(changePitchEffect, to: audioEngine.outputNode, format: nil)
let frameCapacity = UInt32(audioFile.length)
let buffer = AVAudioPCMBuffer(PCMFormat: audioFile.processingFormat, frameCapacity: frameCapacity)
if audioFile.readIntoBuffer(buffer, error: nil) {
audioEngine.startAndReturnError(nil)
audioPlayerNode.scheduleBuffer(buffer, atTime: nil, options: .Loops, completionHandler: nil)
audioPlayerNode.play() // start playing in a loop
}
然后使用UISlider
让用户在循环播放音频时更改音高值。
因此,当用户完成更改音高并点击下一个按钮时,我需要保存带有所选音高值的音频文件。
我的问题是,如何创建具有音高效果的新音频文件?
我不想在用户听取音频并使用音高效果时进行录制,我只想导出最终结果(当然不播放文件)。