_注意:此问题取代了问题#57_
Mark 1和Picroft图像上的当前音频总线不能消除麦克风中的扬声器音频。 这会导致不良的设备行为,最明显的是在播放音频流并且用户无法使用Hey Mycroft
轻松“插入”时。
设备知道扬声器正在输出什么音频。 所需的基本思想是使用适当的方法从麦克风音频输入中减去扬声器音频输出-例如时移出站音频并将其与麦克风中的音频匹配。
关键技术联系人-Steve Penrod(@penrods)(@ steve-mycroft,网址为https://chat.mycroft.ai)
此功能请求的赏金为1000美元,以及免费的Mark 1和Gold Mycroft Challenge Coin。
我很快就会看一看
更多有用的信息:
PulseAudio支持模块回声取消。
更多信息在这里... https://arunraghavan.net/2016/05/improvements-to-pulseaudios-echo-cancellation/
一些关于脉冲模块的有用链接:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#Enable_Echo.2FNoise -Cancelation
回声消除模块还可以进行波束成形...
@KathyReid @penrods
以前有没有人探索过这个选项(脉冲音频回声消除)? 我愿意尝试一下,尽管我只有一个皮托管。
我相信它是在几年前尝试过的,但CPU压力很高。 (这是我所听到的,因此在Pi上没有亲身经历)。 脉冲音频回声消除在我的工作站上效果很好,因此,如果它也可以在Pi上工作,那将是很酷的。 如果在硬件上过于密集,则可能需要进行一些调整。
试试看,看看结果如何!
我一直在使用Broadcom芯片组进行项目开发,与BCM2837(在RPi3中使用的)不同,我们使用Opus回声消除器取得了成功。 它确实需要CPU来完成,但这并不是特别糟糕。 不幸的是,我没有必要的空闲时间来进行赏金狩猎,但我认为也许暗示这会帮助其他人。
感谢您的反馈, @ roadriverrail-非常好的建议!
可能有趣:
https://github.com/xiph/rnnoise
并基于此:
https://github.com/werman/noise-suppression-for-voice
(以上方法比可行方法慢得多,可惜:处理量增加了约8:1)
@forslund ,在使用mycroft源的工作站上工作时,脉冲回声消除会自动加载吗?还是我们必须自己做?
USB扬声器电话设备(例如Jabra 410)(在论坛上很受欢迎)是否可以消除回声? 我将其与RPi 3B +配合使用,“ Hey Mycroft,停止”似乎可以正常工作。 虽然,我不确定它是否在“正常音量”下“正常”运行。
目前,没有发行版加载脉冲回声消除(据我所知)。
按照https://www.jabra.com/business/speakerphones/jabra-speak-series/jabra-speak-410 “数字信号处理(DSP)技术
清晰的声音甚至在最大音量下也没有回声或失真的声音”,听起来很像它具有某种回声消除功能。
@tlc as @ el-tocino表示默认情况下未加载回声消除。 加载它会创建一个虚拟麦克风,您需要将其设置为与mycroft一起使用的默认麦克风。 (基本上在脉冲音频音量控制中选择它)
我们都如何处理这个问题? 我们可以提供任何帮助的信息吗?
我已经使用“ webrtc”和“ speex”算法对语音引擎/ ec(基本上是speex的包装器)和PulseAudio的echo-cancel模块(必须从Debian-Jessie-Backports安装PA 7.1)进行了实验。 (完全无法使用adrian),但到目前为止还没有运气。 我主要看到两个原因:
1)当音乐在Mark-I扬声器上播放时,Mark-I的麦克风几乎只会拾取音乐(这是由于物理结构造成的),此外,麦克风/前置放大器会拾取很多电子/无线电噪声。 这对于任何噪声/回声消除算法来说都非常困难。
2)内部时钟的RPI3时序对于这种实时处理而言不够稳定-永久性的时间漂移也使回声消除算法感到困惑。
我将很快尝试“ rnnoise”(已经针对RPI对其进行了编译,但是在针对PA进行配置时出现了一些问题),但是由于上述原因,我们不必高估
我愿意考虑一种解决方案,该解决方案需要对Mark 1进行较小且便宜的附加或修改,例如将麦克风和扬声器分开的隔音泡沫或重新布线。 但不更改板级。
基于麦克风位置加上cheapo usb麦克风的波束成形可能是一种选择。 在端口中设置的这些微型麦克风中的一两个(搜索“ Overfly便携式USB 2.0麦克风”)与通过波束形成器运行的现有麦克风的音频相结合,应该能够产生aec并改善收听效果。 myself,我还没有尝试过。
经过更多的实验后,我对PulseAudio回声消除模块进行了配置,该模块可以合理地工作*在大约距离内,音量最高为5(Mark-1的最大值为11)。 4英尺。 还有一些调整参数的空间,这些参数可能会提高可靠性。
我还没有尝试过硬件调整(声学泡沫)。 另外,我正在考虑对Mycroft Audioservices进行更改,例如,一旦检测到唤醒字词,就会听到鸭子/静音音乐,以便获得清晰的语音提示...
*取决于音乐材料,压缩程度越高(请参见“响度战争”),其可靠性就越差。
我相信@forslund已经在回避部分做了一些工作。 相信它已经在PR / Issue部分中。
与您一起,AEC必须与音频回避结合使用。
我用了一些门/窗绝缘泡沫(类似:https://www.homedepot.com/p/Frost-King-3-4-in-x-5-16-in-x-10-ft-Black-Rubber -Foam-Weatherseal-Tape-R534H / 202262324)在面板电路板和面板之间的麦克风前部形成屏障。 其次,我也用泡沫覆盖了扬声器的背面。
最有用的评论
我一直在使用Broadcom芯片组进行项目开发,与BCM2837(在RPi3中使用的)不同,我们使用Opus回声消除器取得了成功。 它确实需要CPU来完成,但这并不是特别糟糕。 不幸的是,我没有必要的空闲时间来进行赏金狩猎,但我认为也许暗示这会帮助其他人。