ios – Swift中的AudioUnitRender和ExtAudioFileWrite错误-50:尝试将MIDI转换为音频文件

ios – Swift中的AudioUnitRender和ExtAudioFileWrite错误-50:尝试将MIDI转换为音频文件,第1张

概述我正在尝试将MIDI文件转换为 Swift中的音频文件(.m4a). 现在我使用MIKMIDI作为一个工具来排序和播放MIDI文件,但它不包括将播放保存到文件中的功能. MIKMID的创建者概述了执行此 *** 作的过程here.为了尝试捕获输出并将其保存到音频文件,我按照this example尝试用Swift中的GeneralIO节点替换MIKMIDI Graph的RemoteIO节点.当我尝试使用A 我正在尝试将MIDI文件转换为 Swift中的音频文件(.m4a).

现在我使用MIKMIDI作为一个工具来排序和播放MIDI文件,但它不包括将播放保存到文件中的功能. MIKMID的创建者概述了执行此 *** 作的过程here.为了尝试捕获输出并将其保存到音频文件,我按照this example尝试用Swift中的GeneraliO节点替换MIKMIDI Graph的RemoteIO节点.当我尝试使用AudioUnitRender和ExtAudiofileWrite将输出保存到文件时,它们都返回错误-50(kAudio_ParamError).

var channels = 2    var buffFrames = 512    var bufferList = audiobufferlist.allocate(maximumBuffers: 1)         for i in 0...bufferList.count-1{               var buffer = AudioBuffer()               buffer.mNumberChannels = 2               buffer.mDataByteSize = UInt32(buffFrames*sizeofValue(AudioUnitSampleType))               buffer.mData = calloc(buffFrames,sizeofValue(AudioUnitSampleType))               bufferList[i] = buffer               result = AudioUnitRender(generaliOAudioUnit,&flags,&inTimeStamp,busNum,UInt32(buffFrames),bufferList.unsafeMutablePointer)               inTimeStamp.mSampleTime += 1               result = ExtAudiofileWrite(extAudiofile,bufferList.unsafeMutablePointer)         }

是什么导致错误-50,如何解决它以将MIDI(离线)渲染为.m4a文件?

更新:我通过将mNumberChannels和channel更改为= 1来解决ExtAudiofileWrite错误-50.现在我得到一个带噪声的一秒音频文件. AudioUnitRender仍然返回错误-50.

解决方法 您的代码存在一些问题:

>您的audiobufferlist不同意客户端格式,请尝试

let bufferList = audiobufferlist.allocate(maximumBuffers: Int(clIEntFormat.mChannelsPerFrame))

>您正在从AUGraph中替换错误的节点,并将剩余的节点连接到自身,导致AudioUnitRender上出现无限循环.

但主要的问题是你没有实现author suggested的解决方案.你希望你可以用实时时间戳调用AudioUnitRender,比实时更快,但作者说不,你必须手动将采样时间转换为主机时间并实现如果你想要的话,一个mIDi球员的更好的部分.

所以你可以做到这一点(听起来很难)或者是file a feature request,或者通过在图形的远程IO音频单元中使用AudioUnitAddRenderNotify添加渲染通知并在kAudioUnitRenderAction_PostRender阶段写入样本来实时录制文件.

总结

以上是内存溢出为你收集整理的ios – Swift中的AudioUnitRender和ExtAudioFileWrite错误-50:尝试将MIDI转换为音频文件全部内容,希望文章能够帮你解决ios – Swift中的AudioUnitRender和ExtAudioFileWrite错误-50:尝试将MIDI转换为音频文件所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存