Anteriormente vimos cómo usar la tecnología TTS en JavaScript, ahora veremos cómo hacerlo con Python.
La conversión de texto a voz con Python ofrece más características, por ejemplo, podemos guardar la salida en un archivo de MP3 y no hay un límite definido.
Para hacerlo vamos a instalar gtts, es un paquete de Python que usa la API de Google (Google Text-to-Speech) para convertir el texto a audio.
Obviamente se necesita internet, pero tranquilo, que si quieres usarlo de manera offline puedes guardar los archivos con palabras comunes y luego reproducirlas.
Nota: he creado un post mostrándote una librería para convertir texto a voz usando Python de manera offline.
Instalar gTTS con PIP
Comienza instalando Python y PIP. Después ejecuta:
pip install gTTS
Espera a que se termine de instalar. Si es necesario, cierra la consola y vuelve a abrirla.
Opcionalmente vamos a listar los lenguajes que soporta, para asegurarnos de que el español está entre ellos.
El comando es gtts-cli --all
.
Lo importante aquí es la clave: es-es
, es-us
, es
. Ahora vamos a comenzar a programar.
Visión general de gTTS con Python
Voy a dar una pequeña explicación y al final dejaré ejemplos completos.
Para importar la librería usamos:
from gtts import gTTS
Para crear un objeto de gTTS
llamamos a la función y como primer argumento le pasamos el texto.
Adicionalmente acepta otros parámetros en forma de kwargs, entre los que destacan slow
que es un booleano
indicando si la pronunciación debería ser lenta o no, y lang
, que es una cadena en la que el texto será pronunciado (por eso vimos al inicio los idiomas disponibles).
Para guardar el texto convertido a audio en un archivo existen dos métodos: save
y write_to_fp
. El primero recibe el nombre del archivo de salida, el segundo un “flujo” de un archivo.
Este método de write_to_fp
puede ser llamado con distintos tts, ahí la ventaja, pues podemos concatenar el audio ya sea en distintos lenguajes o a distintas velocidades.
Ejemplo 1 con TTS y Python: hola mundo
Tenemos el primer ejemplo que muestra las capacidades básicas de gtts.
"""
Convertir texto a voz (TTS) con
Python usando gTTS
Ejemplo 1: Escribir hola mundo en un archivo, en idioma español
@author parzibyte
"""
from gtts import gTTS
tts = gTTS('Hola mundo. Estamos convirtiendo texto a voz con Python.', lang='es-us')
tts.save("1_hola_mundo.mp3")
Estamos indicando que queremos el español de Estados Unidos, pues a mi parecer es el que más se asemeja al español de México entre todos los listados.
Ejemplo 2: Escribir a file object
Anteriormente no tuvimos que preocuparnos por abrir el archivo, simplemente llamamos a save. Ahora veremos cómo escribirlo a un archivo que abrimos con open
.
"""
Convertir texto a voz (TTS) con
Python usando gTTS
Ejemplo 2: Escribir hola mundo en un archivo abierto con open,
en idioma español
@author parzibyte
"""
from gtts import gTTS
tts = gTTS('Hola mundo. Estamos convirtiendo texto a voz con Python.', lang='es-us')
with open("2_hola_mundo.mp3", "wb") as archivo:
tts.write_to_fp(archivo)
Es casi lo mismo, pero usando write_to_fp
. Como lo dije anteriormente: esto permite escribir al mismo archivo distintas salidas de gTTS.
Ejemplo 3: escribir distintos idiomas en mismo archivo
En el siguiente ejemplo convertimos texto a voz con Python en 3 idiomas: español, inglés y francés. Creamos 3 objetos, abrimos el archivo con open
y escribimos.
"""
Convertir texto a voz (TTS) con
Python usando gTTS
Ejemplo 3: Escribir múltiples idiomas en un archivo
@author parzibyte
"""
from gtts import gTTS
tts = gTTS('Hola mundo. Estamos convirtiendo texto a voz con Python.', lang='es-us')
tts_ingles = gTTS('Hello world! testing tts in Python', lang='en')
tts_frances = gTTS('Bonsoir, Elliot', lang='fr-fr')
with open("3_hola_es_en_fr.mp3", "wb") as archivo:
tts.write_to_fp(archivo)
tts_ingles.write_to_fp(archivo)
tts_frances.write_to_fp(archivo)
Estamos definiendo 3 distintos idiomas, aunque podríamos igualmente cambiar la velocidad con el argumento de slow.
TTS con Python, ejemplo 4: reproducir audio
El archivo MP3 generado se puede reproducir con cualquier, valga la redundancia, reproductor. Pero si quieres reproducirlo directamente desde Python puedes ver este post para instalar playsound.
Veamos el ejemplo en donde el audio generado con TTS es reproducido:
"""
Convertir texto a voz (TTS) con
Python usando gTTS
Ejemplo 4: Escribir hola mundo en un archivo, en idioma español
y después reproducirlo
@author parzibyte
"""
from gtts import gTTS
from playsound import playsound
NOMBRE_ARCHIVO = "sonido_generado.mp3"
tts = gTTS('Hola mundo. Estamos convirtiendo texto a voz con Python.', lang='es-us')
# Nota: podríamos llamar directamente a save
with open(NOMBRE_ARCHIVO, "wb") as archivo:
tts.write_to_fp(archivo)
playsound(NOMBRE_ARCHIVO)
De esa manera se puede reproducir el archivo. No es el único método pero es un ejemplo.
Ejemplo 5 de conversor de texto a voz
Para terminar voy a ejemplificar cómo cambiar la velocidad a slow
para que sea un poco más lenta. Queda así:
"""
Convertir texto a voz (TTS) con
Python usando gTTS
Ejemplo 5: TTS con velocidad lenta
@author parzibyte
"""
from gtts import gTTS
tts = gTTS('Hola mundo. Estamos convirtiendo texto a voz con Python.', lang='es-us', slow=True)
tts.save("5_hola_mundo.mp3")
Conclusión
Esta librería parece simple, pero podemos usarla para distintas cosas. Podríamos agregar muchísimas características a nuestros programas, agregar accesibilidad, entre otras.
Cabe mencionar que al instalar el paquete con PIP se han instalado algunos “binarios” que sirven para hacer conversiones sin necesidad de Python, todo ejecutándose desde la línea de comandos, pero eso es para otro post.
Como referencia dejo la documentación oficial.
En el ejemplo 4 para resproducir el sonido directamente falta especificar que toca cerrar el archivo
No es necesario, ya que al usar “with” el archivo será cerrado automáticamente
muy buen post nada mas una pregunta como podría grabar un audio con voz de hombre o mujer?
Hola. Gracias por sus comentarios. Si tiene dudas específicas puede hacérmelas llegar en https://parzibyte.me/#contacto
Saludos!