Я просматривал документацию Swift, чтобы сохранить аудиовыход из AVAudioEngine, но не нашел полезного совета.
Есть предложения?
Решение Я нашел способ благодаря ответу Мэтта. Вот пример кода, как сохранить звук после его прохождения через 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")
}
}
Надеюсь, это поможет!
Необходимо решить одну проблему:
Иногда ваш outputNode короче, чем input: если вы ускорите темп времени в 2 раза, ваш звук будет в 2 раза короче. Это проблема, с которой я столкнулся сейчас, так как мое условие для сохранения файла (строка 10)
if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio.
Здесь есть помощь?