当前位置: 首页 > 知识库问答 >
问题:

使用AVAudioEngine录制而不带耳机时避免回声反馈

任长卿
2023-03-14

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

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

输入节点->;音频效果节点->;mainMixerNode(此处安装了tap)->;输出节点

我还在mainMixerNode上安装了一个节点tap,用于拉出处理过的语音并将其保存到缓冲区中。

当我把耳机插上的时候,所有这些都可以正常工作。然而,当我在录音过程中中途拔掉耳机时,我体验到了很多尖锐的回声和反馈。我猜这是由于语音被发送到输出端播放,这反过来又加强了用户的原始输入语音。

在录音会话过程中,如果耳机被中途拔掉,有没有一个好的方法来最大限度地减少反馈?我曾想过动态断开mainMixerNode的连接,这样在拔掉插头时语音就不会路由到输出,但我不确定是否有更好的方法。

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

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

共有1个答案

谭成业
2023-03-14

使用other Node将volume更改为0,然后连接到OutputNode。

audioEngine.connect(mainMixerNode, to: otherNode, format: yourFormat)
otherNode.volume = 0
audioEngine.connect(otherNode, to: outputNode, format: yourFormat)
 类似资料:
  • 问题内容: 我正在 iPhone6 Plus*上进行测试,插入或拔出耳机后会崩溃。 ,,在我的应用程序使用。 * 不带耳机的启动应用程序可以播放iPhone扬声器的声音。 带有耳机的启动应用可以播放耳机的声音。 在以下情况下发生错误。启动不带耳机的应用,并播放扬声器的声音。然后,如果我连接耳机,则耳机没有声音。之后拔下耳机的插头,即使扬声器也没有声音。当我触摸屏幕时,audioApp崩溃。 与使用

  • 我想使用扬声器进行音频输出,同时使用耳机插孔进行不同的音频输出/输入。这可能吗?

  • 问题内容: 我在Stack Exchange上的一个问题中看到,限制可能是每15分钟的请求数的函数,并且还取决于算法的复杂性,只不过这并不复杂。 所以我使用这段代码: 我总是收到Twitter限制错误: 问题答案: 问题在于您的区块放置在错误的位置。将数据插入数据库将永远不会产生-对其进行迭代。我建议重构您的代码以在无限循环中调用方法。该调用应放置在块中,因为它可能引发错误。 代码大致如下所示:

  • 我一直收到NoClassDefoundError错误。我试图使用JavaMail API发送电子邮件,但当我使用SMTPMessage类创建Message实例时发生错误。 我知道我需要激活库,但它还是不起作用。 错误发生在这段代码的第一行。 堆栈跟踪

  • 我创建了语音通话录音应用程序,它与手机的麦克风和听筒配合得很好。但是当插入耳机时,它不能录制音频。我试图将AudioSource更改为AudioSource.default,以为它会自动接受默认音频源。它什么也没记录。

  • 让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey 另外一种方式使用 groupByKey: val words = Array("one", "two", "two", "three", "three", "three") val wordPairsRDD = sc.parallelize(words).map(word => (word, 1)) val

  • 嘿。我想在Swift中用新的实现一个实时音频应用程序。有人对新框架有经验吗?实时应用程序如何工作? 我的第一个想法是将(处理过的)输入数据存储到对象中,然后让它通过播放,如您在我的演示类中所见: 但这离实时很远,效率也不是很高。有什么想法或经历吗?如果您更喜欢Objective-C或Swift,我非常感谢所有的注释、评论、意见、解决方案等。

  • 问题内容: 在我的应用程序中,我正在通过PMD运行代码,它向我显示以下消息: 避免使用printStackTrace(); 请改用记录器调用。 那是什么意思? 问题答案: 这意味着您应该使用logback或log4j之类的日志记录框架,而不是直接打印异常: 您应该使用以下框架的API记录它们: 日志记录框架为您提供了很大的灵活性,例如,您可以选择是否要登录到控制台或文件-如果发现它们在某些环境中不