我一直在查找Swift文档以保存AVAudioEngine的音频输出,但我没有找到任何有用的提示。 有什么建议吗?
解决方案 我通过matt的答案找到了一个方法。以下是如何在通过AVAudioEngine传递音频后保存音频的示例代码(我认为从技术上讲它是之前)。
希望这能帮到你!
需要解决的一个问题:
有时,你的输出节点比输入节点短:如果你将时间速率加速2倍,你的音频长度将缩短2倍。这是我目前面临的问题,因为我保存文件的条件是(第10行)。
解决方案 我通过matt的答案找到了一个方法。以下是如何在通过AVAudioEngine传递音频后保存音频的示例代码(我认为从技术上讲它是之前)。
newAudio = AVAudioFile(forWriting: newAudio.url, settings: nil, error: NSErrorPointer())
//Your new file on which you want to save some changed audio, and prepared to be bufferd in some new data...
var audioPlayerNode = AVAudioPlayerNode() //or your Time pitch unit if pitch changed
//Now install a Tap on the output bus to "record" the transformed file on a our newAudio file.
audioPlayerNode.installTapOnBus(0, bufferSize: (AVAudioFrameCount(audioPlayer.duration)), format: opffb){
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in
if (self.newAudio.length) < (self.audioFile.length){//Let us know when to stop saving the file, otherwise saving infinitely
self.newAudio.writeFromBuffer(buffer, error: NSErrorPointer())//let's write the buffer result into our file
}else{
audioPlayerNode.removeTapOnBus(0)//if we dont remove it, will keep on tapping infinitely
println("Did you like it? Please, vote up for my question")
}
}
希望这能帮到你!
需要解决的一个问题:
有时,你的输出节点比输入节点短:如果你将时间速率加速2倍,你的音频长度将缩短2倍。这是我目前面临的问题,因为我保存文件的条件是(第10行)。
if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio.
有什么可以帮您的吗?