- Sopro TTS es un modelo ligero de texto a voz basado en inglés que admite clonación de voz zero-shot y generación en streaming
- Tiene 169 millones de parámetros y puede generar 30 segundos de audio en unos 7.5 segundos, a una velocidad de 0.25 RTF en CPU
- Puede clonar la voz de un hablante usando solo audio de referencia de 3 a 12 segundos, y utiliza una arquitectura de convoluciones dilatadas estilo WaveNet y cross-attention ligera
- Es un proyecto de bajo presupuesto entrenado con una sola GPU L40S, con margen de mejora si aumenta la calidad de los datos
- Admite modos streaming y no streaming, además de CLI, API de Python y demo web, lo que le da una alta utilidad para experimentación e integración por parte de desarrolladores
Resumen de Sopro TTS
- Sopro significa “aliento” en portugués y fue desarrollado como un modelo TTS ligero en inglés
- Usa una arquitectura que combina convolución dilatada y cross-attention en lugar de Transformer
- Es un proyecto personal entrenado con una sola GPU L40S
- Características principales
- 169M parámetros, soporte de streaming y clonación de voz zero-shot
- Genera 30 segundos de audio en 7.5 segundos con 0.25 RTF en CPU
- Permite clonación de voz con audio de referencia de 3 a 12 segundos
Instalación y ejecución
- Solo se especifican versiones mínimas de dependencias, por lo que puede instalarse sin crear un entorno separado
- Ejemplo: la versión
torch==2.6.0 ofrece cerca de 3 veces más rendimiento en CPU M3
- Métodos de instalación
- PyPI:
pip install sopro
- Repositorio de GitHub: después de
git clone, ejecutar pip install -e .
Ejemplos de uso
- Ejemplo de ejecución por CLI
- Se pueden indicar el texto, el audio de referencia y el archivo de salida
- Incluye parámetros de control detallados como
--style_strength, --no_stop_head, --stop_threshold y --stop_patience
- Ejemplo con la API de Python
- Carga el modelo con
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
- Admite tanto modo no streaming como streaming
- En modo streaming, es posible unir secuencialmente los fragmentos de audio generados
Demo interactiva en streaming
- Después de la instalación, ejecuta un servidor local con el comando
uvicorn demo.server:app
- También puede compilarse y ejecutarse con Docker
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
- Se puede ver la demo entrando a
http://localhost:8000 en el navegador
Precauciones y limitaciones
- Puede haber falta de consistencia en la salida, por lo que se requiere ajuste de parámetros
- La calidad de la clonación de voz depende mucho de la calidad del micrófono y del ruido ambiental
- La versión no streaming ofrece mejor calidad de audio
- La longitud de generación está limitada a aprox. 32 segundos (400 frames); si se supera, aparecen salidas alucinadas
- Al usar torchaudio se necesita ffmpeg; se recomienda usar
soundfile
- Los datos de entrenamiento están en forma de tokens preprocesados; el audio original fue descartado por problemas de espacio de almacenamiento
- Se menciona como plan futuro la publicación del código de entrenamiento y la ampliación del soporte multilingüe
Datos de entrenamiento
- Se usaron los datasets Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22 y MLS
Referencias y tecnologías base
- Aprovecha investigaciones y código de Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM y CSM, entre otros
1 comentarios
Opiniones en Hacker News
Es un proyecto genial y útil
Personalmente, creo que Chatterbox-TTS-Server es la mejor alternativa
Es más lento, pero la calidad de audio es bastante alta
Me parece una herramienta muy potente porque permite clonación de voz y control manual de emociones mediante vectores emocionales
Me resultó especialmente útil en un proyecto de orquestación de modelos en el que estoy trabajando
Un modelo externo de clasificación de emociones controla al mismo tiempo la personalidad del LLM y la salida del TTS para mantener la consistencia
La probabilidad de recuperar “memorias” también cambia según el estado emocional, y casi no hay TTS que permitan un control tan fino como IndexTTS2
La salida de Sopro TTS, basándome en el video de GitHub, es seriamente mala y está a un nivel inutilizable en la práctica
En cambio, Chatterbox da resultados sorprendentes
Mi GPU es una RTX5090, y corre muy rápido, con alrededor de 2 segundos de ejecución por cada segundo generado
Puedes revisar el primer ejemplo y el segundo ejemplo. El segundo es una demo clonando la voz del youtuber ArbitorIan
¡Está realmente genial!
Yo uso Kokoro (82M) en local, y funciona rápido además de tener una calidad de audio excelente
Yo manejo la activación de voz con ricky0123/vad, hago reconocimiento rápido con Web Speech API y luego uso un TTS comercial
Todavía no he encontrado una opción open source que sea realmente rápida
Me preguntaba qué significa “zero-shot”
few-shot consiste en guiar al modelo con algunos ejemplos, y multi-shot implica varias rondas de prompts y correcciones
Se siente como haber logrado clonación de voz a nivel Mission Impossible sin una compilación larga
También comparto un video de YouTube relacionado y un poema de juego de palabras
Lo probé en inglés y me pareció bastante impresionante
Para ser un proyecto de bajo presupuesto, el resultado fue sorprendente y además fue muy fácil de usar
Si existiera una versión en alemán, definitivamente me gustaría usarla
Considerando las limitaciones, es un resultado bastante impresionante
Me pregunto si hay planes de publicar una versión más potente, con menos artefactos y que requiera más cómputo
Uso Chatterbox principalmente, pero si esto evoluciona hacia una alta calidad, podría convertirse en una buena alternativa
El costo computacional es bastante alto, pero si la reacción de la comunidad es buena, pienso seguir desarrollándolo
Por cierto, Chatterbox es un gran modelo y una fuente de inspiración
Tenía curiosidad por el significado de “zero-shot”
Incluso son más arbitrarios que la notación Big O
Es decir, si el modelo aprende la probabilidad condicional P(Audio|Voice) y puede muestrear clases de voz que no vio durante el entrenamiento, entonces es zero-shot
Proporcionar un audio de referencia no cambia los pesos del modelo, sino que corresponde a dar contexto
Escuché el audio y me sorprendió lo terrible que suena
Es peor que voces de computadora de hace 15 años, y no entiendo por qué la gente dice que está bien
Lo probé en varios navegadores y fue igual en todos
Si es tan grave, podría haber otro problema, así que me gustaría revisarlo contigo
Es una tecnología realmente genial
Seguramente va a mejorar más adelante
Aun así, aunque sea como medida temporal, estaría bien agregar un posprocesamiento de audio simple para reducir ese tono áspero (razziness)
Me pregunto si alguno de estos modelos funciona como un modulador de voz speech-to-speech
Es decir, que tome una muestra de voz fija (prompt) y un flujo de audio de entrada en tiempo real, y convierta la voz de entrada al tono y timbre del prompt
En casos como los V-tubers, no habría necesidad de cambiar el prompt con frecuencia, así que quizá también sería posible aplicar un timbre fijo con un solo fine-tuning
Eso sí, el procesamiento en streaming tendrías que implementarlo por tu cuenta
Toma audio A (estilo) y B (contenido), y combina el timbre de A con la pronunciación y entonación de B
En realidad, este tipo de modelo se entiende mejor como S+STS (speech+style to speech) que como “TTS” propiamente dicho
Lo explican en detalle en su blog oficial
Pero como hubo conflictos entre el creador original y los desarrolladores, conviene evitar el fork principal y buscar un fork actualizado mantenido en inglés