gpt4 book ai didi

SWIFT - 是否可以从 AVAudioEngine 或 AudioPlayerNode 保存音频?如果是,如何?

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:08 29 4
gpt4 key购买 nike

我一直在查看 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")
}

}

希望这对您有所帮助!

要解决的一个问题:

有时,您的输出节点比输入节点短:如果您将时间速率加快 2,您的音频将短 2 倍。这是我现在面临的问题,因为我保存文件的条件是(第 10 行)

if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio.

这里有什么帮助吗?

最佳答案

是的,这很容易。您只需点击一个节点并将缓冲区保存到一个文件中。

不幸的是,这意味着您必须通过节点。我希望 AVAudioEngine 能让我将一个声音文件直接处理成另一个声音文件,但显然这是不可能的 - 你必须实时播放和处理。

关于SWIFT - 是否可以从 AVAudioEngine 或 AudioPlayerNode 保存音频?如果是,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127152/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com