En este tutorial de programación con Python te mostraré cómo convertir texto a voz/audio usando Python y un paquete que trabaja totalmente fuera de línea, es decir, sin conexión a internet.
Anteriormente ya te había mostrado un tutorial pero en ese caso usábamos la API de Google para convertir texto a audio usando Python, ahora te mostraré lo mismo pero usando un paquete que no necesita internet.
De este modo podrás reproducir audio a partir de determinado texto, además de guardar la voz en un archivo de audio MP3.
Instalando librería
Vamos a usar la librería pyttsx3; para ello debes contar con Python y PIP. Una vez que los tengas, ejecuta:
pip install pyttsx3
Dependiendo de tu sistema operativo se van a descargar varias dependencias. Yo te cuento que en Windows funciona perfectamente y pip se encargó de instalar todo.
Según el repositorio oficial esto debería funcionar correctamente en Windows y Linux.
Convertir texto a voz con Python
Veamos el primer ejemplo en donde vamos a convertir el texto a voz y después reproducir el sonido a través de Python. El código queda así:
"""
https://parzibyte.me/blog
"""
import pyttsx3
engine = pyttsx3.init()
# Control the rate. Higher rate = more speed
engine.setProperty("rate", 150)
text = "Hola mundo. Visita parzibyte.me"
engine.say(text)
"""
Queue another audio
"""
another_text = "I like Python"
engine.say(another_text)
engine.runAndWait()
Primero importamos la librería y creamos un motor. Podemos invocar a setProperty
para cambiar varios aspectos (puedes leer la documentación del repositorio). En este caso cambio el rate que controla la velocidad del audio.
Después invocamos a engine.say
para encolar un texto que el motor convertirá a audio. Podemos invocar varias veces a say
, y el motor va a convertir el texto a audio en ese orden.
Finalmente invocamos a engine.runAndWait
para que el motor “arranque” y espere a que se reproduzca el audio.
Convertir texto a audio y guardar en archivo MP3
Para terminar este tutorial de Python y TTS veamos cómo convertir texto a audio pero guardar el resultado en un archivo MP3. Ahora en lugar de invocar a say
, invocamos a save_to_file
con dos argumentos: el texto que se guardará dentro del archivo, y el nombre del archivo de salida.
El código queda como se ve a continuación:
"""
https://parzibyte.me/blog
"""
import pyttsx3
engine = pyttsx3.init()
# Control the rate. Higher rate = more speed
engine.setProperty("rate", 150)
text = "Hola mundo. Este audio quedará guardado en un archivo"
output_file = "audio.mp3"
engine.save_to_file(text, output_file)
engine.runAndWait()
En este caso el código es muy parecido, solo que ahora lo guardamos a un archivo. Es importante invocar runAndWait
al final para que los archivos sean creados.
Al ejecutar el código vamos a tener un archivo de audio con el texto que indicamos.
Conclusión
Con este paquete podemos hacer varias cosas como crear APIs que devuelvan el archivo, o, por ejemplo, saltar algunas limitantes que tiene JavaScript (el hecho de no poder reproducir audio sin la interacción del usuario).
La ventaja de pyttsx3 sobre otros paquetes es que éste es totalmente fuera de línea, offline o como le digas. De este modo solo debes asegurarte de instalar la dependencia y luego podrás usarla sin problemas y sin límites.
Recuerda que vas a encontrar toda la documentación en el repositorio oficial. Te dejo aquí con más posts sobre Python.
¿Cómo puedo instalar más opciones de voz?
Gracias por compartir.
Gracias a usted por comentar.
Saludos!