使用AVAudioEngine录制麦克风和音效

3
我正在使用AVAudioEngine将来自麦克风以及各种声音效果录制到单个文件中。在录制时,声音通过引擎的outputNode播放回扬声器。然而,这会对使用耳机录制的用户产生奇怪的影响,因为他们可以听到自己的声音通过扬声器/耳机播放回来。因此,我只希望通过扬声器输出声音文件的声音,而不是来自麦克风的声音。
然而,我还没有找到使用AVAudioEngine实现这一点的方法。我的最新尝试包括将声音文件节点连接到主混音器,并使用混音器的outputNode播放它们,然后将麦克风连接到第二个混音器。然后,主混音器将其输出(声音文件中的音频)发送到此混音器上,并在其中安装一个tap,用于将音频写入我的文件。
然而,混音器节点只有一个输出,这意味着根本没有声音通过扬声器播放,因为主混音器已被更改为将其输出路由到第二个混音器,而不是outputNode。
以下是我的引擎布局:
soundfileNode ----> mainMixer ---> outputNode (speaker)
                        |
                        |
                        v
inputNode (mic) --> secondaryMixer ---> tap (write to file)

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

更新:

我现在正在使用AVAudioConnectionPoint来分离主混音器的输出。然而,播放(和录制)的声音文件听起来很失真,有很多噼啪声和噪音。只有当我在我的辅助混音器上安装一个tap,用于写入输出文件时,才会出现这种情况。有其他人遇到过这种问题吗?

1个回答

2

然而,混音节点只有一个输出

啊哈,但这并不是真的。你需要寻找AVAudioConnectionPoint。通过连接到一组连接点,您可以将输出分割。


AVAudioConnectionPoint似乎是在iOS9中引入的,而我也需要支持iOS8... - rodskagg
2
那么你就会陷入困境。AVAudioConnectionPoint是在iOS 9中引入的,_正是_为了解决这个问题。相反,在iOS 8中,你 无法 分割输出,你可以完全忘记它。 - matt
AVAudioConnectionPoint是如何工作的?文档实际上几乎不存在。 - rodskagg
@andlin 恭喜你解决了这个问题!我有一个非常类似的问题。如果我把我的stackoverflow问题链接给你,你能快速查看一下我的小片段AVAudioEngine代码吗? - user3344977
然而,我仍然遇到了一些问题。例如,当我使用AVAudioConnectionPoint时,我播放和录制的声音文件会出现失真。问题似乎在混音器上的实际触点上。如果我移除该触点,则声音就正常了,但这意味着当然不会将任何内容写入我的输出文件... - rodskagg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接