4

Swift で MIDI ファイルをオーディオ ファイル (.m4a) に変換しようとしています。

現在、MIDI ファイルをシーケンスおよび再生するためのツールとしてMIKMIDIを使用していますが、再生をファイルに保存する機能は含まれていません。MIKMID の作成者は、ここでこれを行うプロセスの概要を説明しています。出力をキャプチャしてオーディオ ファイルに保存するために、この例に従って、MIKMIDI グラフの RemoteIO ノードを Swift の GeneralIO ノードに置き換えてみました。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, UInt32(buffFrames), bufferList.unsafeMutablePointer)

         }

エラー -50 の原因と、それを解決して MIDI (オフライン) を .m4a ファイルにレンダリングするにはどうすればよいですか?

更新: mNumberChannels とチャンネルを = 1 に変更することで、ExtAudioFileWrite エラー -50 を解決しました。これで、ノイズのある 1 秒のオーディオ ファイルが得られます。AudioUnitRender は依然としてエラー -50 を返します。

4

1 に答える 1