我正在构建音频图,它具有: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 单元注册任何渲染回调函数?