- Sopro TTS é um modelo leve de texto para fala focado em inglês, com suporte a clonagem de voz zero-shot e geração em streaming
- Tem 169 milhões de parâmetros e gera 30 segundos de áudio em cerca de 7,5 segundos, com velocidade de 0,25 RTF em CPU
- Consegue clonar a voz de um falante usando apenas 3 a 12 segundos de áudio de referência, com uma arquitetura baseada em dilated conv no estilo WaveNet e cross-attention leve
- É um projeto de baixo orçamento treinado com uma única GPU L40S, com espaço para melhoria de desempenho à medida que a qualidade dos dados evoluir
- Suporta modos streaming e não streaming, além de CLI, API Python e demo web, oferecendo alta utilidade para experimentação e integração por desenvolvedores
Visão geral do Sopro TTS
- Sopro significa “fôlego” em português e foi desenvolvido como um modelo TTS leve para inglês
- Arquitetura que combina dilated convolution e cross-attention em vez de Transformer
- Projeto individual treinado com uma única GPU L40S
- Principais características
- 169M de parâmetros, suporte a streaming e clonagem de voz zero-shot
- 0,25 RTF em CPU, gerando 30 segundos de áudio em 7,5 segundos
- Clonagem de voz com áudio de referência de 3 a 12 segundos
Instalação e execução
- Apenas versões mínimas de dependências são especificadas, então é possível instalar sem criar um ambiente separado
- Exemplo: a versão
torch==2.6.0 melhora o desempenho em cerca de 3x em CPU M3
- Como instalar
- PyPI:
pip install sopro
- Repositório GitHub: após
git clone, execute pip install -e .
Exemplos de uso
- Exemplo de execução via CLI
- É possível definir texto, áudio de referência e arquivo de saída
- São fornecidos parâmetros de controle detalhados como
--style_strength, --no_stop_head, --stop_threshold, --stop_patience
- Exemplo com API Python
- Carregamento do modelo com
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
- Suporte tanto a modo não streaming quanto a modo streaming
- No modo streaming, os chunks de áudio gerados podem ser combinados em sequência
Demo interativa de streaming
- Após a instalação, execute um servidor local com o comando
uvicorn demo.server:app
- Ou faça build e execute com Docker
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
- No navegador, acesse
http://localhost:8000 para ver a demo
Observações e limitações
- Pode haver falta de consistência na saída, exigindo ajuste de parâmetros
- A qualidade da clonagem de voz depende fortemente da qualidade do microfone e do ruído ambiente
- A versão não streaming oferece melhor qualidade de áudio
- O comprimento de geração é limitado a cerca de 32 segundos (400 frames); acima disso, ocorrem saídas alucinatórias
- Ao usar torchaudio, ffmpeg é necessário; recomenda-se usar
soundfile
- Os dados de treino estão em formato pré-tokenizado, e o áudio original foi descartado por limitações de armazenamento
- Há menção a planos futuros para abrir o código de treinamento e ampliar o suporte multilíngue
Dados de treinamento
- Uso dos datasets Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22 e MLS
Referências e tecnologias de base
- Baseado em pesquisas e código como Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM e CSM
1 comentários
Comentários do Hacker News
Projeto muito legal e útil
Pessoalmente, acho que o Chatterbox-TTS-Server é a melhor alternativa
É mais lento, mas a qualidade de áudio é bem alta
Acho esse modelo uma ferramenta muito poderosa porque permite clonagem de voz e controle manual de emoção por meio de vetores de emoção
Foi especialmente útil em um projeto de orquestração de modelos no qual estou trabalhando
Um modelo externo de classificação de emoções controla ao mesmo tempo a persona do LLM e a saída do TTS para manter consistência
A probabilidade de busca de “memória” também muda conforme o estado emocional, e quase não existe TTS com um nível de controle tão fino quanto o IndexTTS2
A saída do Sopro TTS, com base no vídeo do GitHub, é seriamente ruim e em nível impraticável para uso real
Já o Chatterbox produz resultados impressionantes
Minha GPU é uma RTX5090, e ele é bem rápido, com cerca de 2 segundos de runtime para gerar 1 segundo de áudio
Dá para conferir o primeiro exemplo e o segundo exemplo. O segundo é uma demo clonando a voz do youtuber ArbitorIan
Muito legal!
Eu uso Kokoro (82M) localmente, e funciona rápido com qualidade de áudio excelente
Eu faço a ativação por voz com ricky0123/vad, uso a Web Speech API para reconhecimento rápido e depois TTS comercial
Ainda não encontrei nada open source que seja rápido
Fiquei curioso sobre o que significa “zero-shot”
Few-shot é quando você orienta o modelo com alguns exemplos, e multi-shot é quando passa por várias rodadas de prompt e correção
Dá a impressão de que conseguiram fazer clonagem de voz em nível Mission Impossible sem uma compilação longa
Também compartilho um vídeo no YouTube relacionado e um poema cheio de trocadilhos linguísticos
Testei em inglês e achei bastante impressionante
Para um projeto de baixo orçamento, o resultado foi surpreendente e foi muito fácil de usar
Se existisse uma versão em alemão, eu certamente gostaria de experimentar
Considerando as restrições, é um resultado bem impressionante
Fico curioso se há planos de lançar uma versão mais poderosa, com menos artefatos e maior custo computacional
Eu uso principalmente o Chatterbox, mas se isto evoluir para alta qualidade pode virar uma boa alternativa
O custo computacional é bem alto, mas se a reação da comunidade for boa, penso em desenvolver mais
Aliás, o Chatterbox é um excelente modelo e uma fonte de inspiração
Fiquei curioso sobre o significado de “zero-shot”
São ainda mais arbitrários do que notação Big O
Ou seja, se o modelo aprende a probabilidade condicional P(Audio|Voice) e consegue amostrar para classes de voz não vistas durante o treino, então é zero-shot
Fornecer áudio de referência não muda os pesos do modelo; isso entra na categoria de fornecimento de contexto
Ouvi o áudio e fiquei surpreso com o quanto a qualidade sonora é horrível
É pior do que vozes de computador de 15 anos atrás, e não entendo por que as pessoas estão dizendo que é bom
Testei em vários navegadores e foi igual
Se estiver tão ruim assim, pode haver outro problema, então eu gostaria de investigar junto
Tecnologia realmente muito legal
Acho que vai melhorar ainda mais no futuro
Mas, nem que seja como solução provisória, seria bom adicionar um pós-processamento simples de áudio para reduzir a aspereza vocal (razziness)
Fico curioso se algum desses modelos funciona na forma de um modulador de voz speech-to-speech
Ou seja, recebe uma amostra de voz fixa (prompt) e um fluxo de áudio de entrada em tempo real, e converte a voz de entrada para o tom e timbre do prompt
No caso de V-tubers, não haveria necessidade de trocar o prompt com frequência, então talvez desse até para aplicar um timbre fixo com um único fine-tuning
Mas o processamento em streaming precisa ser implementado por conta própria
Ele recebe áudio A (estilo) e B (conteúdo) e combina o timbre de A com a pronúncia e entonação de B
Na prática, esse tipo de modelo faz mais sentido como S+STS (speech+style to speech) do que como “TTS” propriamente dito
Está explicado em detalhes no blog oficial
Mas houve conflito entre o criador original e os desenvolvedores, então é melhor evitar o fork principal e procurar um fork atualizado mantido em inglês