OmniVoice: geração e clonagem de voz com IA rodando localmente no Windows
A inteligência artificial tem transformado a forma como interagimos com a tecnologia, e a geração de voz é uma das áreas que mais evoluiu nos últimos anos. Hoje já é possível transformar texto em fala com qualidade bastante natural, clonar uma voz a partir de uma pequena amostra de áudio e até criar vozes com características específicas.
É nesse cenário que surge o OmniVoice, um modelo de síntese de voz desenvolvido para geração de fala multilíngue, clonagem de voz (voice cloning) e criação de vozes (voice design). O projeto foi desenvolvido como uma alternativa aberta para quem deseja experimentar essas tecnologias sem depender necessariamente de serviços de nuvem ou APIs pagas.
O grande diferencial é que o processamento pode ser realizado localmente no computador, utilizando a GPU quando há suporte adequado, ou utilizando a CPU quando necessário.
O que é o OmniVoice e como ele funciona?
O OmniVoice é um modelo de Text-to-Speech (TTS) de última geração baseado em uma arquitetura de modelo de linguagem com difusão. Ele foi projetado para trabalhar com mais de 600 idiomas, além de oferecer recursos de clonagem de voz e voice design.
Na prática, isso significa que você pode fornecer um texto e gerar uma fala sintética, mas também pode utilizar uma amostra de voz como referência para produzir uma nova fala preservando características da voz original.
Principais recursos
🎙️ Clonagem de voz
O OmniVoice permite realizar zero-shot voice cloning, ou seja, clonar características de uma voz sem precisar treinar um modelo específico para aquela pessoa. A voz de referência serve como base para a geração da nova fala.
🌎 Suporte multilíngue
Um dos maiores destaques do projeto é sua ampla cobertura de idiomas. O modelo é anunciado com suporte a mais de 600 idiomas, tornando-o particularmente interessante para projetos de narração, localização e produção de conteúdo em diferentes línguas.
🎨 Voice Design
Além de copiar uma voz existente, o OmniVoice também pode trabalhar com características de voz, permitindo controlar aspectos como gênero, idade, sotaque/dialeto, pitch e outras características da fala.
⚡ Execução local
Uma das grandes vantagens para quem trabalha com IA é a possibilidade de executar o modelo localmente. Isso significa que, depois de instalado e com os modelos necessários baixados, você pode gerar suas vozes sem precisar enviar cada texto para uma API externa.
Isso pode ser interessante para quem produz vídeos, cursos, audiobooks, dublagens, podcasts ou outros conteúdos que exigem geração frequente de áudio.
🔐 Privacidade
Quando executado localmente, o processamento pode permanecer no próprio computador. Isso elimina a necessidade de enviar o áudio de referência e os textos para um serviço externo durante a geração, algo especialmente interessante para quem trabalha com materiais privados ou projetos que não deseja enviar para servidores de terceiros.
Tags de expressão e entonação
O OmniVoice também pode utilizar algumas tags especiais no texto para adicionar diferentes características à fala. Essas marcações podem ser inseridas diretamente no texto utilizado para a geração.
Risada natural
[laughter]
Suspiro
[sigh]
Fungada
[sniff]
Som de confirmação ("uh-hum")
[confirmation-en]
Entonação de pergunta
[question-en]
Pergunta terminando em "ah?"
[question-ah]
Surpresa
[surprise-ah]
Essas tags podem ser combinadas com o texto para tornar a geração de voz mais expressiva e natural. Por exemplo, uma fala pode utilizar [sigh] para representar um suspiro ou [laughter] para adicionar uma risada.
E quanto à licença?
Esse é um ponto importante para quem pretende utilizar o OmniVoice profissionalmente.
O projeto OmniVoice original, desenvolvido pela equipe do projeto e disponibilizado no GitHub, utiliza a Apache License 2.0. Essa é uma licença permissiva que permite utilizar, modificar e distribuir o software dentro das condições estabelecidas pela licença.
Entretanto, é importante diferenciar o modelo OmniVoice de aplicações construídas em cima dele. Projetos como interfaces, aplicativos ou versões empacotadas podem possuir licenças próprias, e os pesos dos modelos também podem ter termos específicos. Portanto, antes de redistribuir o próprio modelo, incorporá-lo a outro produto ou criar uma aplicação comercial baseada nele, é importante verificar a licença da versão específica que está sendo utilizada.
Para simplesmente utilizar o OmniVoice localmente para produzir conteúdo, a situação é bem diferente: você está utilizando o modelo para gerar seu próprio áudio, e não necessariamente redistribuindo o software ou os pesos do modelo.
Também vale lembrar que clonar a voz de uma pessoa não significa automaticamente ter autorização para utilizá-la comercialmente. A licença do software não substitui autorização sobre a voz, imagem ou identidade de terceiros. O ideal é utilizar vozes próprias ou vozes para as quais você tenha autorização adequada.
O que é necessário para rodar?
O OmniVoice utiliza o ecossistema PyTorch para executar os modelos de inteligência artificial. Em computadores com GPU compatível, o processamento pode ser acelerado utilizando o hardware gráfico.
O projeto possui suporte a diferentes ambientes de execução, incluindo:
NVIDIA CUDA, para GPUs GeForce e RTX;
Intel XPU, para GPUs Intel Arc compatíveis;
CPU, quando não existe uma GPU compatível disponível.
A quantidade de memória disponível também influencia diretamente a experiência. O projeto pode funcionar em computadores sem GPU dedicada, mas o processamento tende a ser consideravelmente mais lento. Em GPUs com pouca VRAM, algumas partes do processamento podem precisar ser transferidas para a CPU.
Por isso, uma instalação local não precisa necessariamente de um computador extremamente poderoso, embora uma GPU NVIDIA com CUDA possa tornar a experiência muito mais rápida.
Instalação Simplificada com Apenas Um Arquivo .BAT
Sabemos que configurar ambientes de Inteligência Artificial no Windows pode ser uma tarefa complexa, repleta de comandos no terminal, versões específicas do Python e dependências que podem entrar em conflito.
Para simplificar esse processo, podemos automatizar toda a configuração através de um único arquivo de lote (.bat).
Como instalar
A ideia é simples:
Crie uma nova pasta em qualquer lugar do computador, por exemplo C:\OmniVoice.
Crie um arquivo chamado instalar.bat dentro dessa pasta.
Cole o instalador automático abaixo.
Execute o arquivo com dois cliques.
O instalador poderá verificar o ambiente, configurar o Python, criar o ambiente virtual, instalar as dependências necessárias e preparar o OmniVoice para execução.
O objetivo é transformar uma instalação que normalmente exigiria vários comandos manuais em um processo praticamente automático.
@echo off
setlocal EnableExtensions EnableDelayedExpansion
title OmniVoice - Instalador Automatico
cd /d "%~dp0"
set "ROOT=%~dp0"
set "VENV=%ROOT%venv"
set "VPY=%VENV%\Scripts\python.exe"
echo.
echo ==================================================
echo OMNIVOICE - INSTALADOR AUTOMATICO
echo ==================================================
echo.
echo Pasta:
echo %ROOT%
echo.
REM ==================================================
REM 1. LOCALIZAR PYTHON
REM ==================================================
echo [1/7] Verificando Python...
set "PYTHON_CMD="
where py >nul 2>&1
if not errorlevel 1 (
py -3.11 --version >nul 2>&1
if not errorlevel 1 set "PYTHON_CMD=py -3.11"
)
if not defined PYTHON_CMD (
where py >nul 2>&1
if not errorlevel 1 (
py -3.12 --version >nul 2>&1
if not errorlevel 1 set "PYTHON_CMD=py -3.12"
)
)
if not defined PYTHON_CMD (
where python >nul 2>&1
if not errorlevel 1 (
python --version 2>&1 | findstr /R "Python 3\.1[012]\." >nul
if not errorlevel 1 set "PYTHON_CMD=python"
)
)
if not defined PYTHON_CMD (
echo.
echo Python compativel nao encontrado.
echo.
echo Tentando instalar Python 3.11 pelo WinGet...
echo.
where winget >nul 2>&1
if errorlevel 1 (
echo ERRO: WinGet nao esta disponivel.
echo Instale Python 3.11 ou 3.12 e execute novamente.
echo.
pause
exit /b 1
)
winget install --id Python.Python.3.11 -e --source winget --accept-package-agreements --accept-source-agreements
if errorlevel 1 (
echo.
echo ERRO ao instalar Python 3.11.
echo.
pause
exit /b 1
)
echo.
echo Python instalado.
echo Tentando localizar novamente...
echo.
where py >nul 2>&1
if not errorlevel 1 (
py -3.11 --version >nul 2>&1
if not errorlevel 1 set "PYTHON_CMD=py -3.11"
)
)
if not defined PYTHON_CMD (
echo.
echo ERRO: Python nao foi localizado.
echo Feche e abra novamente o instalador.
echo.
pause
exit /b 1
)
echo Python encontrado: %PYTHON_CMD%
REM ==================================================
REM 2. DETECTAR HARDWARE
REM ==================================================
echo.
echo [2/7] Detectando hardware...
set "GPU_KIND=CPU"
set "GPU_NAME="
set "GPU_BACKEND=CPU"
REM --------------------------------------------------
REM NVIDIA
REM --------------------------------------------------
where nvidia-smi >nul 2>&1
if not errorlevel 1 (
for /f "skip=1 delims=" %%G in ('nvidia-smi --query-gpu=name --format=csv 2^>nul') do (
if not defined GPU_NAME set "GPU_NAME=%%G"
)
if defined GPU_NAME (
set "GPU_KIND=NVIDIA"
set "GPU_BACKEND=CUDA"
)
)
REM --------------------------------------------------
REM INTEL ARC
REM --------------------------------------------------
if not defined GPU_NAME (
for /f "usebackq delims=" %%G in (`powershell -NoProfile -Command "$g=Get-CimInstance Win32_VideoController ^| Where-Object {$_.Name -match 'Intel.*Arc'} ^| Select-Object -First 1 -ExpandProperty Name; if($g){$g}"`) do (
if not defined GPU_NAME set "GPU_NAME=%%G"
)
if defined GPU_NAME (
set "GPU_KIND=INTEL"
set "GPU_BACKEND=XPU"
)
)
REM --------------------------------------------------
REM AMD
REM --------------------------------------------------
if not defined GPU_NAME (
for /f "usebackq delims=" %%G in (`powershell -NoProfile -Command "$g=Get-CimInstance Win32_VideoController ^| Where-Object {$_.Name -match 'AMD^|Radeon'} ^| Select-Object -First 1 -ExpandProperty Name; if($g){$g}"`) do (
if not defined GPU_NAME set "GPU_NAME=%%G"
)
if defined GPU_NAME (
set "GPU_KIND=AMD"
set "GPU_BACKEND=CPU"
)
)
REM --------------------------------------------------
REM OUTRAS GPU
REM --------------------------------------------------
if not defined GPU_NAME (
for /f "usebackq delims=" %%G in (`powershell -NoProfile -Command "$g=Get-CimInstance Win32_VideoController ^| Select-Object -First 1 -ExpandProperty Name; if($g){$g}"`) do (
if not defined GPU_NAME set "GPU_NAME=%%G"
)
if defined GPU_NAME (
set "GPU_KIND=OTHER"
set "GPU_BACKEND=CPU"
)
)
if not defined GPU_NAME (
set "GPU_NAME=CPU / Nenhuma GPU detectada"
set "GPU_KIND=CPU"
set "GPU_BACKEND=CPU"
)
REM ==================================================
REM MOSTRAR HARDWARE
REM ==================================================
echo.
echo Hardware detectado:
echo %GPU_NAME%
echo.
if "%GPU_KIND%"=="NVIDIA" (
echo Backend selecionado: NVIDIA CUDA 12.8
)
if "%GPU_KIND%"=="INTEL" (
echo Backend selecionado: Intel XPU
)
if "%GPU_KIND%"=="AMD" (
echo GPU AMD detectada.
echo Backend GPU oficial do OmniVoice nao sera instalado.
echo Backend selecionado: CPU
)
if "%GPU_KIND%"=="OTHER" (
echo GPU nao suportada especificamente pelo instalador.
echo Backend selecionado: CPU
)
if "%GPU_KIND%"=="CPU" (
echo Nenhuma GPU compativel detectada.
echo Backend selecionado: CPU
)
REM ==================================================
REM 3. CRIAR AMBIENTE VIRTUAL
REM ==================================================
echo.
echo [3/7] Criando ambiente virtual...
if exist "%VPY%" (
echo Ambiente virtual ja existe.
echo Mantendo ambiente atual.
) else (
%PYTHON_CMD% -m venv "%VENV%"
if errorlevel 1 (
echo.
echo ERRO ao criar ambiente virtual.
echo.
pause
exit /b 1
)
echo Ambiente virtual criado.
)
if not exist "%VPY%" (
echo.
echo ERRO: Python do ambiente virtual nao foi encontrado.
echo.
pause
exit /b 1
)
REM ==================================================
REM 4. ATUALIZAR PIP
REM ==================================================
echo.
echo [4/7] Atualizando pip...
"%VPY%" -m pip install --upgrade pip
if errorlevel 1 (
echo.
echo ERRO ao atualizar pip.
echo.
pause
exit /b 1
)
REM ==================================================
REM 5. INSTALAR PYTORCH
REM ==================================================
echo.
echo [5/7] Instalando PyTorch...
if "%GPU_BACKEND%"=="CUDA" (
echo.
echo Instalando PyTorch CUDA 12.8...
"%VPY%" -m pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
if errorlevel 1 (
echo.
echo ERRO ao instalar PyTorch CUDA.
echo.
pause
exit /b 1
)
)
if "%GPU_BACKEND%"=="XPU" (
echo.
echo Instalando PyTorch para Intel XPU...
"%VPY%" -m pip install torch torchaudio --index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/
if errorlevel 1 (
echo.
echo ERRO ao instalar PyTorch XPU.
echo.
pause
exit /b 1
)
)
if "%GPU_BACKEND%"=="CPU" (
echo.
echo Instalando PyTorch para CPU...
"%VPY%" -m pip install torch==2.8.0 torchaudio==2.8.0
if errorlevel 1 (
echo.
echo ERRO ao instalar PyTorch CPU.
echo.
pause
exit /b 1
)
)
REM ==================================================
REM 6. INSTALAR OMNIVOICE
REM ==================================================
echo.
echo [6/7] Instalando OmniVoice...
"%VPY%" -m pip install omnivoice
if errorlevel 1 (
echo.
echo ERRO ao instalar OmniVoice.
echo.
pause
exit /b 1
)
echo.
echo ==================================================
echo TESTANDO PYTORCH
echo ==================================================
echo.
"%VPY%" -c "import torch; print('PyTorch:', torch.__version__); print('CUDA:', torch.cuda.is_available()); print('XPU:', hasattr(torch,'xpu') and torch.xpu.is_available() if hasattr(torch,'xpu') else False); print('GPU CUDA:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A')"
if errorlevel 1 (
echo.
echo ERRO ao testar PyTorch.
echo.
pause
exit /b 1
)
if "%GPU_BACKEND%"=="CUDA" (
"%VPY%" -c "import torch,sys; sys.exit(0 if torch.cuda.is_available() else 1)"
if errorlevel 1 (
echo.
echo ==================================================
echo ERRO: CUDA NAO ESTA FUNCIONANDO.
echo ==================================================
echo.
echo GPU detectada:
echo %GPU_NAME%
echo.
echo O PyTorch nao conseguiu acessar a GPU.
echo Verifique o driver NVIDIA.
echo.
pause
exit /b 1
)
echo.
echo CUDA funcionando corretamente.
)
if "%GPU_BACKEND%"=="XPU" (
"%VPY%" -c "import torch,sys; sys.exit(0 if hasattr(torch,'xpu') and torch.xpu.is_available() else 1)"
if errorlevel 1 (
echo.
echo ==================================================
echo ERRO: INTEL XPU NAO ESTA FUNCIONANDO.
echo ==================================================
echo.
echo GPU detectada:
echo %GPU_NAME%
echo.
echo Verifique o driver Intel.
echo.
pause
exit /b 1
)
echo.
echo Intel XPU funcionando corretamente.
)
echo.
echo Verificando OmniVoice...
if not exist "%VENV%\Scripts\omnivoice-demo.exe" (
echo.
echo ERRO: omnivoice-demo.exe nao foi encontrado.
echo.
pause
exit /b 1
)
echo OmniVoice instalado corretamente.
REM ==================================================
REM 7. CRIAR INICIAR.BAT
REM ==================================================
echo.
echo [7/7] Criando iniciar.bat...
(
echo @echo off
echo setlocal
echo cd /d "%%~dp0"
echo title OmniVoice
echo.
echo echo ========================================
echo echo OMNIVOICE
echo echo ========================================
echo echo.
echo echo Hardware:
echo echo %GPU_NAME%
echo echo.
echo echo Iniciando...
echo echo.
echo call "%%~dp0venv\Scripts\activate.bat"
echo omnivoice-demo --ip 127.0.0.1 --port 8001
echo.
echo pause
) > "%ROOT%iniciar.bat"
if not exist "%ROOT%iniciar.bat" (
echo.
echo ERRO ao criar iniciar.bat.
echo.
pause
exit /b 1
)
echo.
echo ==================================================
echo INSTALACAO CONCLUIDA
echo ==================================================
echo.
echo GPU:
echo %GPU_NAME%
echo.
echo Backend:
echo %GPU_BACKEND%
echo.
echo Ambiente:
echo %VENV%
echo.
echo OmniVoice instalado com sucesso.
echo.
echo Para iniciar:
echo iniciar.bat
echo.
echo Servidor:
echo http://127.0.0.1:8001
echo.
echo ==================================================
echo.
pause
endlocal
Eu também fiz uma correção importante em relação ao texto original: não colocaria “o OmniVoice é AGPL”. Isso mistura o modelo com algumas aplicações que usam o modelo. O OmniVoice original está sob Apache 2.0, enquanto o OmniVoice Studio que aparece atualmente em alguns repositórios tem licença própria; há inclusive versões/repositórios com termos diferentes.
Se o seu post é especificamente sobre o instalador que você criou para o OmniVoice original, essa distinção deixa o artigo muito mais seguro e profissional.
0 Comentários