macos - 从图表中提取音频数据 kAudioUnitSubType_GenericOutput

标签 macos core-audio

我正在构建音频图,其中包含: 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, &timestamp, 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/

相关文章:

linux - 如何生成可以在 macOS 和 Linux 上运行的可执行文件

swift - 如何使用 swift 将变量数组分成更小的数组

macos - 在 Mac (Lion) 上安装 Apache : "Did not find prce-config script at" error

iOS,CoreAudio : a strange 'CADebugPrintf.h: no such file or directory ... ' error

c - 将 Mac OS X 应用程序移植到 iPhone

xcode - 需要帮助链接到 OS X 上的 bundle

linux - 在多个文件上运行命令并保持相同的名称

iphone - 用于录音应用程序的 iOS 多任务处理

c - 在 .m 文件中访问作为全局变量的结构

c - 从 C 函数更新进度条