3

我正在使用 AVAudioEngine 将来自麦克风的输入以及各种音效录制到单个文件中。录制时,声音通过扬声器通过引擎的 outputNode 播放。但是,这会给使用耳机录音的用户带来奇怪的效果,因为他们可以听到通过扬声器/耳机播放的自己的声音。因此,我只希望通过扬声器输出声音文件的声音,而不是来自麦克风的声音。

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

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

这是我的引擎布局:

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

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

更新:

我现在使用 AVAudioConnectionPoint 来拆分 mainMixer 的输出。但是,播放(和录制)的声音文件声音失真,带有大量噼啪声和噪音。这只发生在我在辅助混音器上安装水龙头以写入输出文件时。有没有其他人经历过这个?

4

1 回答 1

2

但是,混合器节点只有一个输出

啊哈,但这不是真的。您正在寻找 AVAudioConnectionPoint。通过连接到连接点数组,您可以拆分输出。

于 2016-03-10T21:00:57.997 回答