【发布时间】:2023-03-12 02:48:01
【问题描述】:
我正在尝试编写(应该是什么)一个简单的应用程序,它在 AUGraph 中按顺序包含一堆音频单元,然后将输出写入文件。我使用 AUGraphAddRenderNotify 添加了一个回调。这是我的回调函数:
OSStatus MyAURenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *actionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
if (*actionFlags & kAudioUnitRenderAction_PostRender) {
ExtAudioFileRef outputFile = (ExtAudioFileRef)inRefCon;
ExtAudioFileWriteAsync(outputFile, inNumberFrames, ioData);
}
}
这类作品。该文件是可播放的,我可以听到我录制的内容,但有可怕的静电量使其几乎听不见。
有人知道这有什么问题吗?或者有人知道将 AUGraph 输出记录到文件的更好方法吗?
感谢您的帮助。
【问题讨论】:
-
您的 AUGraph 和 ExtAudioFile(客户端数据格式)的格式是否匹配?还有,需要实时录制吗?
-
我认为他们匹配。我使用相同的 AudioStreamBasicDescription 来配置所有音频单元并创建文件。我不确定如何实际检查。你知道怎么做吗?我想我会调查一下。我想我不需要实时记录,但还有其他方法可以做到吗?如果我不将数据实时保存在某个地方,那么它就会丢失。
-
我相信你不想在图的头部重复调用
AUGraphStart,而不是调用AudioUnitRender。我认为实时处理的问题是ExtAudioFile的内部环形缓冲区填满并丢失数据。 -
哦,这就是您所说的非实时。我认为我确实需要它是实时的,因为我正在从麦克风录制并将音频传递到扬声器。
标签: ios core-audio