python

Conversión de texto a voz (TTS) con Python y gTTS

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.

Texto a voz (TTS) con Python y gTTS

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

1 – Instalar paquete gTTS con pip

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.

2 – Comprobar lenguajes instalados

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.