De que hablamos cuando hablamos de habla
Después de haber configurado la traducción automática de todos mis artículos a varios otros idiomas, comencé a pensar en la próxima característica moderna y útil que podría implementar. Como estará absolutamente de acuerdo en que leer mis publicaciones es una de las experiencias más placenteras, pensé que el uso de un servicio de síntesis de voz automática podría mejorar aún más la UX del artículo. Por lo tanto, el plan era simple: agregaré una nueva acción al comienzo del texto del artículo que permite a los usuarios escucharlo a través del reproductor de audio del navegador.
Cómo: síntesis de voz
Después de haber analizado la arquitectura de la aplicación actual, se implementó el siguiente flujo de trabajo para mejorar la PWA con síntesis de voz automática y un reproductor de audio:
- Implementar la síntesis a través del servicio de conversión de texto a voz de GCP utilizando la opción WaveNet (mucho) más cara en lugar de la estándar.
- almacenar el archivo mp3 creado en Firebase Storage, un sistema de archivos simple también alojado en GCP; El nombre del archivo consiste en el slug del artículo y la configuración regional utilizada, lo que me da un ID implícito y evita la adición de un documento separado que mantiene la referencia a todas las URL de un discurso determinado.
- luego llamo a los dos pasos anteriores en el servidor de Vercel al crear o actualizar una página de artículo, lo que actualmente ocurre cada 24 horas como máximo
- usar la carga diferida para el reproductor web en caso de que haya una URL de audio disponible
Ser perezoso es importante
No quiero dañar el rendimiento de carga de mis aplicaciones web (y, en consecuencia, la clasificación del motor de búsqueda), por lo tanto, el reproductor web se carga a pedido solo después de que se cumplen dos condiciones:
- En realidad, hay disponible una URL de audio para el artículo, que actualmente solo se aplica a los textos en inglés para mantener los costos bajos
- Un usuario hace clic en el botón de reproducción, lo que indica el deseo de escuchar el artículo leído en voz alta.
¿Por qué no todos los idiomas (por ahora)?
Debido al uso de WaveNet de Google como el modelo de síntesis de voz real, debo considerar los costos de esta función como un punto de preocupación principal. El uso de WaveNet cuesta cuatro veces el modelo de síntesis estándar. Sin embargo, lo he elegido porque WaveNet supera con creces a la mayoría de los otros modelos, no solo de Google, sino también de IBM, por ejemplo.
Solo el principio
Esta fue una descripción general rápida de cómo implementé la síntesis de voz en una primera versión para esta PWA. El tiempo para codificar tomó solo unas pocas horas, ya que ya estaba haciendo la mayor parte de la configuración al ser cliente de GCP. La salida generada suena increíblemente bien, lo que muestra las fortalezas de los enfoques de voz basados en WaveNet y ML, así como en el manejo de texto. Una implementación futura podría agregar la lectura en voz alta para todos los idiomas admitidos. Según el uso y los costos de los próximos meses, determinaré cómo proceder en este caso.
Tomás