AudioFilePlayer (Generator unit) -> GenericOutput (Output unit) を持つオーディオ グラフを作成しています。
基本的な考え方:
AudioFilePlayer は、その出力にオーディオ フレームを生成しています。ジェネリック出力は、AudioFilePlayer の出力からデータを入力として受け取ります。そのデータを取得して他のバッファに保存するよりも。
私の質問は、一般的な出力からデータを取得してオフライン レンダリング用のデータを取得する方法です。
私はそれについていくつかの調査を行い、GenericOutput ユニットで AudioUnitRender を使用してオーディオ データをプルする必要があることがわかりました。
Uint32 frames = 512;
timestamp.mSampleTime = 0;
... While Loop ...
timestamp.mFlags = kAudioTimeStampSampleTimeValid;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0].mNumberChannels = param->inputFormat.mChannelsPerFrame;
bufferList.mBuffers[0].mDataByteSize = frames * param->inputFormat.mChannelsPerFrame * sizeof(float);
bufferList.mBuffers[0].mData = NULL;
AudioUnitRenderActionFlags flags = 0;
OSStatus error = noErr;
if ((error = AudioUnitRender(param->genericOutput, &flags, ×tamp, 0, frames, &bufferList)) != noErr)
{
printf("Cannot AudioUnitRender: %d\n", error);
}
timestamp.mSampleTime += frames;
しかし、番号-50でエラーが発生します。
入力パラメータの設定が間違っていませんか? レンダー コールバック関数を GenericOutput ユニットに登録する必要はありますか?