使用AVAudioEngine录制麦克风和音效

Using AVAudioEngine to record mic and sound effects

我正在使用 AVAudioEngine 将来自麦克风的输入以及各种音效记录到一个文件中。录音时,声音通过引擎的输出节点通过扬声器播放。然而,这会对使用耳机录音的用户造成奇怪的影响,因为他们可以听到自己的声音通过 speakers/headphones 播放。因此,我只希望通过扬声器输出声音文件的声音,而不是从麦克风传来的声音。

但是,我还没有找到使用 AVAudioEngine 实现此目的的方法。我最近的尝试涉及将声音文件节点连接到主混音器,并使用混音器的输出节点播放它们,然后将麦克风连接到第二个混音器。然后 mainMixer 将其输出(来自声音文件的音频)发送到我安装了水龙头的这个混音器,用于将音频写入我的文件。

但是,混音器节点只有一个输出,这意味着根本没有声音通过扬声器播放,因为 mainMixer 已更改为将其输出路由到第二个混音器而不是输出节点。

这是我的引擎布局:

soundfileNode ----> mainMixer ---> outputNode (speaker)
                        |
                        |
                        v
inputNode (mic) --> secondaryMixer ---> tap (write to file)

我该如何解决我的问题?有什么想法吗?

更新:

我现在正在使用 AVAudioConnectionPoint 拆分来自 mainMixer 的输出。然而,声音文件播放(和录制)的声音失真,有很多噼啪声和噪音。只有当我在我的辅助混音器上安装一个水龙头以写入输出文件时才会发生这种情况。有没有其他人遇到过这种情况?

However, mixer nodes only have one output

啊哈,但事实并非如此。您正在寻找 AVAudioConnectionPoint。通过连接到一组连接点,您可以拆分输出。