我正在构建音频图,其中包含: AudioFilePlayer(生成器单元)-> GenericOutput(输出单元)
基本思路:
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 单元注册任何渲染回调函数?
最佳答案
问题是我在调用 AUGraphInitialize() 后设置了 GenericOutput StreamFormat。 必须在那之前完成。
我使用 CAShow(reader.graph) 获取音频图的日志,这帮助我注意到在尝试设置后格式没有改变。
关于macos - 从图表中提取音频数据 kAudioUnitSubType_GenericOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15153008/