Semana 4: de vuelta a WebSocket, agregamos Piper
Refactorizo audio_out para transformar el flujo continuo de audio con WebSocket y añado Piper para añadir text-to-speech como fuente de audio.
Resumen de la semana
He transformado el sistema de envío y de procesado, y he añadido la API para Python de Piper al backend para poder mandar audio generado desde texto.
Objetivos
- Sustituir el envío a través de WebRTC por envío a través de WebSocket.
- Añadir una capa previa con Piper que convierta texto en audio que se mande después al navegador.
- Utilizar MediaStream para procesar el audio en el navegador.
Trabajo realizado
De vuelta a WebSocket
La
MediaStream en el browser
Inicialmente planteé usar ambas tecnologías: WebRTC para el audio en tiempo real y WebSocket para señalización y control. En la última reunión de la semana, compañeros de JdeRobot me indicaron que había un problema con mi planteamiento:
- El audio (no solo la señalización) debía viajar por WebSocket.
- WebRTC en el navegador debía usarse solo para captar y reproducir el audio localmente, no como transporte entre navegador y servidor.
De forma que el primer reto para la siguiente semana sería decidir qué partes de esta arquitectura se podrían dejar intactas, cuáles se podrían reutilizar y cuáles deberían ser eliminadas.
Piper
Para terminar, leí la documentación de la [API de Piper][https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/API_PYTHON.md], descargué un [modelo de voz en español][https://huggingface.co/rhasspy/piper-voices/tree/main/es/es_ES/carlfm/x_low] y configuré los archivos “piper_source” e “input.txt”. De este modo, el audio que se enviará será el producido al transformar el texto escrito en “input.txt” en un archivo de audio wav.
Próximos pasos
- Encapsular el backend del programa en un contenedor.
- Incrustar el frontend del programa en un ejercicio de Unibotics.
