我正在用自己的语音命令自定义模型在我的应用程序中弄乱-我使它能够很好地记录和处理AudioRecord的输入音频,并通过文本到语音向用户提供反馈。
我遇到的一个问题是,即使在播放音频时,我也希望它可以工作-通过我自己的文本到语音或通过其他在后台播放的内容(例如音乐)。我意识到这将是一个非同小可的问题,但是如果我可以某种方式访问音频输出数据(电话正在播放的内容)并将其与我的麦克风输入数据进行匹配,我认为我至少可以进行调整我为此的模型+改善了我的结果。
但是,基于Android - Can I get the audio data for playback from the audio mixer?,听起来这是不可能的。
两个问题:
1)我是否有任何方法无法通过android api访问预期的音频输出/播放数据,或者android api提供的用于处理此问题的任何选项(音频输出和输入之间的反馈循环)?
2)除了停止所有其他播放或等待其他播放结束之外,还有其他方法可以解决此问题吗?如果用户使用免提电话,我会假设某些调用应用程序可以解决此问题,而我只是自己想办法
谢谢
答案 0 :(得分:1)
回答1和2:您想要AcousticEchoCanceler。
关于“为什么从麦克风输入中删除扬声器音频”输入是一项不费吹灰之力的简短演讲,需要大量的信号处理知识:这比仅时移扬声器音频一点点并从中减去音频要复杂得多。麦克风输入。事实是,即使离开扬声器,音频的频谱也会发生剧烈变化(大多数微型扬声器的very peaky response中心为3-4KHz)。音频在回到麦克风(multipath interference)之前可能会从多个物体(墙壁等)反弹。不同的频率成分以不同的,无法预测的方式干扰麦克风,从而极大地改变了音频频谱。顺便说一句-如果房间中的任何东西移动了,例如,如果您将手放在电话旁,一切都会改变。这就是为什么您不想尝试编写自己的回声消除滤波器的原因。 Android为您提供了一个,因此您可以编写出色的免提电话应用等。