1

我正在使用 AVAudioEngine 录制用户的声音,同时对声音应用一些实时效果。

由于我需要用户能够在会话期间听到自己的声音,因此我将 AVAudioEngine 图连接起来如下所示:

inputNode -> 音效节点 -> mainMixerNode (点击安装在这里) -> outputNode

我还在 mainMixerNode 上安装了一个节点抽头,以提取处理后的语音并将其保存到缓冲区中。

当我插入耳机时,所有这些都可以正常工作。但是,当我在录制过程中中途拔下耳机时,我会体验到很多尖锐的回声和反馈。我猜这是因为语音被发送到输出进行播放,这反过来又加强了用户的原始输入语音。

如果在录音过程中耳机被拔掉,有没有什么好的方法可以减少反馈?我曾想过动态断开 mainMixerNode 的连接,以便在拔出时声音不会路由到输出,但我不确定是否有更好的方法。

理想情况下,我希望在每个录制会话结束时都有一个音频缓冲区,无论用户在会话中插入和拔出耳机多少次。

有什么想法吗?提前致谢!

4

1 回答 1

0

使用其他节点将音量变为0,然后连接到输出节点。

audioEngine.connect(mainMixerNode, to: otherNode, format: yourFormat)
otherNode.volume = 0
audioEngine.connect(otherNode, to: outputNode, format: yourFormat)
于 2019-09-12T06:58:44.823 回答