Post

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.

Semana 4: de vuelta a WebSocket, agregamos Piper

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

RELLENAR: captura de la página con el audio reproduciéndose

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.

Recursos

This post is licensed under CC BY 4.0 by the author.