如何记录DLS合成器(kAudioUnitSubType_DLSSynth)的输出?
How to record the output of DLS synthesizer (kAudioUnitSubType_DLSSynth)?
我正在开发一个 OSX 应用程序,我在其中使用 Core Audio 通过内置 DLS 合成器 (kAudioUnitSubType_DLSSynth) 播放声音。我想捕获合成器输出并将其导出到文件(.aif、.mp3、.caf 等)。这似乎是一件直截了当的事情,但我在任何地方都找不到例子。从内置麦克风录音很容易。这很难。
任何人都可以给我举个例子或给我一些提示吗?
我假设您正在设置一个由两个组件组成的 AUGraph:一个输出音频单元代替 输出节点:
AudioComponentDescription outputdesc = {0};
outputdesc.componentType = kAudioUnitType_Output;
outputdesc.componentSubType = kAudioUnitSubType_DefaultOutput;
outputdesc.componentManufacturer = kAudioUnitManufacturer_Apple;
AUNode outputNode;
AUGraphAddNode(player->graph, &outputcd, &outputNode);
和其中 .componentSubType = kAudioUnitSubType_DLSSynth
"upstream" 的一个音频单元,取代了 乐器节点 。
您可以编写并注册 输出单元 的输入回调,而不是 仪器单元 ,允许从 "upstream"。这是最简单的答案。 "how-to" 在许多教科书和代码示例中都有很好的介绍,但也需要一些个人研究。处理记录格式和格式转换已经是一个单独的问题,IMO。
我正在开发一个 OSX 应用程序,我在其中使用 Core Audio 通过内置 DLS 合成器 (kAudioUnitSubType_DLSSynth) 播放声音。我想捕获合成器输出并将其导出到文件(.aif、.mp3、.caf 等)。这似乎是一件直截了当的事情,但我在任何地方都找不到例子。从内置麦克风录音很容易。这很难。
任何人都可以给我举个例子或给我一些提示吗?
我假设您正在设置一个由两个组件组成的 AUGraph:一个输出音频单元代替 输出节点:
AudioComponentDescription outputdesc = {0};
outputdesc.componentType = kAudioUnitType_Output;
outputdesc.componentSubType = kAudioUnitSubType_DefaultOutput;
outputdesc.componentManufacturer = kAudioUnitManufacturer_Apple;
AUNode outputNode;
AUGraphAddNode(player->graph, &outputcd, &outputNode);
和其中 .componentSubType = kAudioUnitSubType_DLSSynth
"upstream" 的一个音频单元,取代了 乐器节点 。
您可以编写并注册 输出单元 的输入回调,而不是 仪器单元 ,允许从 "upstream"。这是最简单的答案。 "how-to" 在许多教科书和代码示例中都有很好的介绍,但也需要一些个人研究。处理记录格式和格式转换已经是一个单独的问题,IMO。