Hace unos meses traía el repositorio TorToiSe-TTS que facilitaba muchísmo la generación de voz a partir de texto, aunque solo se disponía de modelos en inglés.
https://theroamingworkshop.cloud/b/2066
Pero el mundo de la IA avanza tan rápido, que hoy os traigo una evolución que desbanca por completo al anterior post, con generación de voces complejas en cuestión de segundos y multilenguaje: Coqui-AI TTS.
https://github.com/coqui-ai/TTS
Versión web
Si tienes prisa y no quieres liarte, puedes usar el espacio gratuito de huggingface, y tendrás tu clonación de voz en pocos segundos:
https://huggingface.co/spaces/coqui/xtts
- Escribe el texto a generar
- Selecciona el idioma
- Sube tu fichero de referencia
- Configura el resto de opciones (marca las casillas: Cleanup Reference Voice, Do not use language auto-detect, Agree)
- Solicita tu clonación al servidor (Send)
Instalación
En cuanto a la instalación local:
- Necesitarás python > 3.9, < 3.12.
- RAM: no necesita tanta como para generación de imágenes. 4GB deberían bastar.
- Crea una carpeta para el proyecto, por ejemplo "text-2-speech". Usando un terminal de Linux:
mkdir text-2-speech - Es conveniente crear un entorno de python específico para evitar incompatibilidad de paquetes, para lo que debes instalar el paquete python3-venv. Yo crearé el entorno TTSenv:
cd text-2-speech
python3 -m venv TTSenv - Activa el entorno en el terminal:
source TTSenv/bin/activate - Si solo necesitas generación de voz (sin clonación ni entrenamiento), instala directamente TTS en python:
pip install TTS - Sin embargo, yo instalaré el repositorio completo de Coqui-AI TTS:
git clone https://github.com/coqui-ai/TTS
cd TTS
pip install -e .[all]
Comprobación de modelos de lenguaje y voces
Lo primero que puedes hacer es comprobar los modelos disponibles para transformar tu texto a voz en distintos idiomas.
En el terminal escribe lo siguiente:
tts --list_models
O fíltralo según tu idioma con grep, por ejemplo para español:
tts --list_models | grep "/es"
Texto a voz
Con esto ya puedes generar voz a partir de texto en cuestión de segundos y en el idioma que prefieras.
En el terminal, escribe lo siguiente, especificando el modelo adecuado:
tts --text "Ahora puedo hablar en español!" --model_name "tts_models/es/css10/vits" --out_path output/tts-es.wav
Asegúrate de que el directorio de salida existe, y de que eliges el nombre dle modelo correto. La primera vez se descargarán los archivos necesarios y deberás aceptar la licencia de Coqui-AI. Después la generación se realiza en cuestión de segundos:
Clonación de voz
Por último, lo realmente impresionante de este modelo es la clonación de voz a partir de unos pocos segundos de grabación de audio.
Igual que en el post anterior, yo he tomado unos 30 segundos de la voz de Ultrón de escenas de la película Los Vengadores: la era de Ultrón.
Muestra en español:
Muestra en inglés:
Ahora, preparamos un script de python donde parametrizaremos todo lo necesario, que a grandes rasgos hará lo siguiente:
- Importar torch y TTS
import torch
from TTS.api import TTS - Definir dispositivo de memoria (cuda o cpu). Con usar cpu sobra. Cuda puede petar.
device="cpu" - Definir el texto a generar.
txt="Voz generada a partir de texto" - Definir la muestra de audio de referencia (archivos .wav de unos 30 segundos)
sample="/voice-folder/voice.wav" - Llamada al modelo TTS
tts1=TTS("model_name").to(device) - Creación del fichero
tts1.tts_to_file(txt, speaker_wav=sample, language="es", file_path="output-folder/output-file.wav")
Yo lo he llamado TRW-clone.py y queda así:
import torch
from TTS.api import TTS
# Get device ('cuda' or 'cpu')
device="cpu"
#Define text
txt="Bienvenido a este nuevo artículo del blog. Disfruta de tu visita."
#txt="Welcome to this new block post... Enjoy your visit!"
#Define audio sample
sample="../my-voices/ultron-es/mix.wav"
#sample="../my-voices/ultron-en/mix.wav"
#Run cloning
tts1 = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)
tts1.tts_to_file(txt, speaker_wav=sample, language="es", file_path="../output/ultron-es.wav")
Ejecútalo desde la carpeta TTS donde se encuentra el repositorio completo:
cd TTS
python3 TRW-clone.py
Resultados
Aquí te dejo los resultados obtenidos en mis primeras pruebas.
Español:
Inglés:
Con un par de iteraciones podrás obtener resultados realmente espectaculares.
Cualquier duda o comentario aún la puedes dejar en Twitter/X