ios – 添加效果后导出音频文件

ios – 添加效果后导出音频文件,第1张

概述我有一个音频文件,我想使用一些效果(如音高效果)处理,然后将最终结果写入文件. 在处理文件并将其保存到光盘之前,我让用户播放音高效果并实时收听更改. 这是我如何做实时的东西: let audioSession = AVAudioSession.sharedInstance() audioSession.setCategory(AVAudioSessionCategoryPlayback, 我有一个音频文件,我想使用一些效果(如音高效果)处理,然后将最终结果写入文件.

在处理文件并将其保存到光盘之前,我让用户播放音高效果并实时收听更改.

这是我如何做实时的东西:

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我让用户在循环中聆听音频时更改音高的值.

所以当用户完成播放并点击下一个按钮时,我需要保存音频文件与所选的音高值.

我的问题是,如何用音高效果创建新的音频文件?

我不想在用户正在听音频和播放音高效果时录制,我只想输出最终的结果(当然不要播放文件)

解决方法 由于在问题的标题中使用AVAudioSession并不是明确的要求,所以有两种可能的答案:

通过节点播放(使用AVAudioSession)

在节点上安装一个水龙头.见AV Foundation Framework Reference.

audioPlayerNode.installTapOnBus(0,bufferSize:frameLength,format: audioinputNode.outputFormatForBus(0),block: {(buffer,time) in    let channels = UnsafeArray(start: buffer.floatChannelData,length: Int(buffer.format.channelCount))    let floats = UnsafeArray(start: channels[0],length: Int(buffer.frameLength))    for var i = 0; i < Int(self.audioBuffer.frameLength); i+=Int(self.audiomixerNode.outputFormatForBus(0).channelCount)    {        // process    }})

AVAudioSession tap机制需要播放.更多关于通过@matt在Stack Overflow answer上播放的录音.

使用AudioUnit(不带AVAudioSession)

使用AudioSessionInitialize初始化AudioSession以播放&记录,设置阅读&写入流,并传递指向您的数据处理代码的AURenderCallbackStruct.但是,这样做不能使您无法使用AVAudioUnitTimePitch.您可以在此How to do realtime recording with effect processing on iOS文章中找到有关此解决方案的更多信息.

总结

以上是内存溢出为你收集整理的ios – 添加效果后导出音频文件全部内容,希望文章能够帮你解决ios – 添加效果后导出音频文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存