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

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.