O avanço das tecnologias de inteligência artificial permitiu a criação de modelos de conversão de voz extremamente realistas. No entanto, o treinamento e a execução desses modelos exigem processamento gráfico (GPU) de alto desempenho, o que pode ser um obstáculo para muitos usuários. Uma solução eficiente é o uso do Google Colab, um ambiente baseado em nuvem que oferece acesso gratuito a recursos de hardware robustos, como a GPU Tesla T4.
Configuração do Ambiente no Colab
O Google Colab funciona de forma integrada ao Google Drive, permitindo que scripts, datasets e modelos treinados sejam armazenados de forma persistente. Para começar, é necessário vincular o Colab à sua conta do Drive.
Após criar um novo notebook (.ipynb), o primeiro passo técnico é verificar a disponibilidade da GPU e a versão dos drivers CUDA instalados no ambiente virtual:
!/usr/local/cuda/bin/nvcc --version
!nvidia-smi
O comando nvidia-smi exibirá detalhes sobre a placa de vídeo alocada. Para tarefas de síntese de voz com a biblioteca so-vits-svc, a Tesla T4 com 15GB de memória de vídeo é a configuração ideal frequentemenet disponibilizada pelo Google.
Instalação de Dependências
A biblioteca so-vits-svc requer versões específicas de bibliotecas de manipulação de áudio e processamento numérico. Devido à natureza do ambiente Colab, pode ser necessário reiniciar o tempo de execução (runtime) após a instalação de pacotes como o numpy para evitar conflitos de versão.
!pip install pyworld==0.3.2
!pip install numpy==1.23.5
Em seguida, clonamos o repositório do projeto e instalamos os requisitos fundamentais, incluindo frameworks de deep learning e ferramentas de manipulação de modelos do HuggingFace:
import os
import glob
# Clonagem do repositório oficial (branch específica para estabilidade)
!git clone https://github.com/effusiveperiscope/so-vits-svc -b eff-4.0
os.chdir('/content/so-vits-svc')
# Instalação automatizada de dependências via pip
!cat requirements.txt | xargs -n 1 pip install --extra-index-url https://download.pytorch.org/whl/cu117
!pip install praat-parselmouth ipywidgets huggingface_hub fairseq==0.12.2 tensorflow==2.11.0
Utilitários de Gerenciamento de Dados
Para facilitar o download de modelos pré-treinados de diversas fontes (Mega, Google Drive, HuggingFace), implementamos uma série de funções auxiliares para extração e transferência de arquivos grandes.
import tarfile
from zipfile import ZipFile
def gerenciar_arquivos_compactados(caminho):
pasta_destino = os.path.split(caminho)[0]
if caminho.endswith(".zip"):
with ZipFile(caminho, 'r') as z:
z.extractall(pasta_destino)
elif caminho.endswith((".tar.gz", ".tar.bz2", ".tar")):
modo = "r:" + caminho.split('.')[-1] if "tar." not in caminho else "r:" + caminho.split('.')[-2]
with tarfile.open(caminho, modo.replace("tar.gz", "gz").replace("tar.bz2", "bz2")) as t:
t.extractall(pasta_destino)
print(f"Arquivo {caminho} processado com sucesso.")
# Exemplo de lógica para download via HuggingFace
import huggingface_hub
import shutil
def baixar_modelo_hf(repo_id, nome_modelo, pasta_alvo):
if not os.path.exists(pasta_alvo):
os.makedirs(pasta_alvo, exist_ok=True)
# Download do checkpoint e configuração
arquivo_g = huggingface_hub.hf_hub_download(repo_id=repo_id, filename=f"{nome_modelo}/G_18500.pth")
arquivo_cfg = huggingface_hub.hf_hub_download(repo_id=repo_id, filename=f"{nome_modelo}/config.json")
shutil.move(os.path.realpath(arquivo_g), os.path.join(pasta_alvo, "G_18500.pth"))
shutil.copy(arquivo_cfg, os.path.join(pasta_alvo, "config.json"))
print("Download do modelo concluído.")
Proceso de Inferência e Conversão de Voz
Com o ambiente configurado e os modelos (como o do Donald Trump ou outros locutores) carregados na pasta models/, utilizamos o motor de inferência do so-vits-svc para transformar um áudio de origem (vocal) na voz do modelo alvo.
O código abaixo inicializa a interface de inferência, permitindo ajustar parâmetros como o Transpose (ajuste de tom para converter vozes masculinas em femininas e vice-versa) e o Clustering Ratio (para melhorar a fidelidade do timbre).
import torch
from inference import infer_tool
from inference.infer_tool import Svc
import soundfile as sf
class ProcessadorVozIA:
def __init__(self, model_path, config_path, cluster_path=""):
self.svc_model = Svc(model_path, config_path, cluster_model_path=cluster_path)
self.target_sample = self.svc_model.target_sample
def converter_audio(self, input_path, output_path, tom=0, noise_scale=0.4):
# O so-vits-svc realiza o slicing automático do áudio para processamento em partes
print(f"Iniciando conversão de: {input_path}")
# Simulação simplificada do fluxo de inferência
# Na prática, utiliza-se o método infer_tool.format_wav e svc_model.infer
# O resultado é exportado via soundfile
pass
# Instanciação e execução
# processador = ProcessadorVozIA("models/trump/G_18500.pth", "models/trump/config.json")
# processador.converter_audio("input/musica_original.wav", "output/resultado_ia.wav", tom=0)
O sistema processa o áudio de entrada, remove ruídos de fundo e aplica a rede neural para prever a frequência fundamental (F0) e o timbre, resultando em uma nova faixa de áudio com as características vocais do modelo treinado.
Considerações Técnicas sobre Recursos
Ao utilizar o Google Colab para síntese de voz, é fundamental monitorar o espaço em disco disponível no Google Drive (limite de 15GB na versão gratuita). Modelos de deep learning e arquivos de áudio .wav sem compressão podem consumir esse espaço rapidamente. Além disso, o uso intenso da GPU pode levar a uma redução temporária na prioridade de alocação de hardware para a conta, sendo recomendada a limpeza periódica de arquivos temporários no diretório /content/.