_NOTA: este problema reemplaza al número 57_
El bus de audio actual en las imágenes Mark 1 y Picroft no elimina el audio del altavoz del micrófono. Esto conduce a un comportamiento indeseable del dispositivo, más notablemente cuando se está reproduciendo una transmisión de audio y el usuario no puede "irrumpir" fácilmente con un Hey Mycroft
.
El dispositivo es consciente de qué audio se emite desde el altavoz. La idea esencial que se desea es restar la salida de audio del altavoz de la entrada de audio del micrófono utilizando un enfoque apropiado, como cambiar el tiempo del audio de salida y hacer coincidir la entrada de audio del micrófono.
Contacto técnico clave: Steve Penrod (@penrods) (@ steve-mycroft en https://chat.mycroft.ai)
La recompensa por esta solicitud de función es de $ 1000 USD, así como un Mark 1 y una Moneda de desafío de oro Mycroft gratis.
Voy a echar un vistazo a esto en breve.
Información que puede ser útil con respecto a: OSS DSP:
http://www.audioxpress.com/news/the-linux-foundation-adopts-sound-open-firmware-project-enabling-developers-to-adapt-operating-systems-for-audio-devices
Más información útil:
PulseAudio admite cancelación de eco de módulo .
Más información aquí ... https://arunraghavan.net/2016/05/improvements-to-pulseaudios-echo-cancellation/
Algunos enlaces con suerte útiles sobre el módulo de pulso:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#Enable_Echo.2FNoise -Cancelation
El módulo de cancelación de eco también puede realizar formación de haces ...
@KathyReid @penrods
¿Alguien ha explorado esta opción (cancelación de eco de audio por pulsos) anteriormente? Estoy dispuesto a intentarlo, aunque solo tengo un picroft con el que trabajar.
Creo que se intentó hace un par de años, pero la tensión de la CPU era bastante alta. (Esto es lo que he escuchado, así que no tengo experiencia personal en el Pi). La cancelación de eco de audio de pulso funciona muy bien en mi estación de trabajo, por lo que sería genial si también pudiera funcionar en el Pi. Si es demasiado intensivo en el hardware, tal vez se puedan hacer ajustes.
Pruébelo y vea cuál es el resultado.
He trabajado en proyectos que utilizan un conjunto de chips Broadcom similar al del BCM2837 (que se utiliza en RPi3) y hemos tenido un gran éxito con el cancelador de eco Opus. Se necesita CPU para hacerlo, pero no fue particularmente malo. Desafortunadamente, no tengo el tiempo libre necesario para contribuir a la búsqueda de recompensas, pero pensé que tal vez sugerir esto ayudaría a alguien más.
Gracias por tus comentarios, @roadriverrail - ¡gran sugerencia!
Potencialmente interesante:
https://github.com/xiph/rnnoise
y en base a eso:
https://github.com/werman/noise-suppression-for-voice
(lo anterior es significativamente más lento de lo viable, por desgracia: aumento de ~ 8: 1 en el procesamiento)
@forslund , cuando se trabaja en una estación de trabajo con la fuente mycroft, ¿la cancelación de eco de pulso se carga automáticamente o tenemos que hacerlo nosotros mismos?
¿Los dispositivos de altavoz USB como el Jabra 410 (popular en los foros) cancelan el eco? Estoy usando uno con RPi 3B + y "Hey Mycroft, pare" parece funcionar. Aunque, no estoy seguro de si funciona "bien" a "volumen normal".
Actualmente, ninguna distribución carga la cancelación de eco de pulso (que yo sepa).
Según https://www.jabra.com/business/speakerphones/jabra-speak-series/jabra-speak-410 "Tecnología de procesamiento de señal digital (DSP)
Sonido cristalino sin ecos o sonidos distorsionados incluso al nivel de volumen máximo "que suena como si tuviera algún tipo de cancelación de eco.
@tlc como @ el-tocino indica que la cancelación de eco no se carga por defecto. Al cargarlo, se crea un micrófono virtual que debe configurar como predeterminado para usar con mycroft. (básicamente seleccionándolo en el control de volumen de audio de pulso)
¿Cómo vamos con este? ¿Alguna pregunta? ¿Alguna información que podamos proporcionar para ayudar?
No es mi trabajo, pero me encontré con él;
https://github.com/voice-engine/ec
Parece interesante y marca las casillas.
He experimentado con voice-engine / ec (que es básicamente un contenedor para speex) y el módulo de cancelación de eco de PulseAudio (para eso tienes que instalar PA 7.1 desde Debian-Jessie-Backports) usando los algoritmos "webrtc" y "speex" (Adrian no se puede usar en absoluto) pero no ha tenido suerte hasta ahora. Veo principalmente dos razones:
1) cuando se reproduce música a través del altavoz Mark-I, el micrófono del Mark-I casi solo capta la música (esto se debe a la construcción física), además, el micrófono / preamplificador capta mucho ruido eléctrico / de radio . Esto hace que sea realmente difícil para cualquier algoritmo de cancelación de ruido / eco.
2) La sincronización RPI3 del reloj interno no es lo suficientemente estable para este tipo de procesamiento en tiempo real; la deriva de tiempo permanente también confunde los algoritmos de cancelación de eco.
Daré una oportunidad a "rnnoise" en breve (ya lo tengo compilado para RPI pero algunos problemas para configurarlo para PA) pero no tengo una gran expectativa por las razones anteriores
Estaría dispuesto a considerar una solución que requiera un complemento o modificación menor y económico al Mark 1, por ejemplo, espuma acústica que separa el micrófono y el altavoz o el desvío de cables. Pero no cambios de nivel de tablero.
La formación de haces basada en la posición del micrófono más un micrófono USB económico podría ser una opción. Uno o dos de estos mini micrófonos (busque "overfly portable usb 2.0 mic") colocados en los puertos combinados con el audio del micrófono existente a través de un beamformer deberían poder hacer aec y mejorar la escucha. Por desgracia, todavía no lo he probado yo mismo.
Después de experimentar un poco más, tengo una configuración con el módulo de cancelación de eco PulseAudio que funciona razonablemente * con niveles de volumen de hasta 5 (el máximo de Mark-1 es 11) dentro de una distancia de aprox. 4 pies. Hay más espacio para ajustar parámetros que podrían aumentar la confiabilidad.
Todavía no probé el ajuste de hardware (espuma acústica). Además, estoy considerando cambios en Mycroft Audioservices, por ejemplo, pato / silenciar música tan pronto como se detecte la palabra de activación para obtener una expresión limpia ...
* Depende del material musical, cuanto más comprimido (ver " guerra de sonoridad "), menos confiable funciona.
Creo que @forslund ya hizo un trabajo en la parte de agacharse. Creo que ya está en la sección PR / Issue en alguna parte.
Con usted, ese AEC debe combinarse con la atenuación de audio.
Utilicé un poco de espuma aislante para puertas / ventanas (similar: https://www.homedepot.com/p/Frost-King-3-4-in-x-5-16-in-x-10-ft-Black-Rubber -Foam-Weatherseal-Tape-R534H / 202262324) para hacer una barrera alrededor de la parte frontal del micrófono entre la placa de circuito frontal y la placa frontal. En segundo lugar, también cubrí la parte posterior del altavoz con espuma.
Comentario más útil
He trabajado en proyectos que utilizan un conjunto de chips Broadcom similar al del BCM2837 (que se utiliza en RPi3) y hemos tenido un gran éxito con el cancelador de eco Opus. Se necesita CPU para hacerlo, pero no fue particularmente malo. Desafortunadamente, no tengo el tiempo libre necesario para contribuir a la búsqueda de recompensas, pero pensé que tal vez sugerir esto ayudaría a alguien más.