Narracao Automatica com VBScript e Voz do Windows — Tutorial Completo
Leitura: ~10 min
- O Windows tem um motor de sintese de voz nativo (SAPI) acessivel via VBScript com apenas 3 linhas de codigo usando o objeto CreateObject("SAPI.SpVoice")
- E possivel controlar velocidade, volume, tom e alternar entre vozes instaladas — ideal para jogos, acessibilidade e automacao com zero dependencias externas
- Scripts VBS rodam em qualquer Windows sem instalacao adicional e podem ler arquivos de texto inteiros, narrar eventos do sistema e integrar com outras aplicacoes
Nota Tecnica: Scripts e automacoes fornecidos tem fins exclusivamente educacionais. Teste sempre em ambiente controlado. O @CanalQb nao se responsabiliza por danos, perdas ou bloqueios decorrentes do uso indevido.
O Windows ja vem com uma engine de voz funcional desde 2001 — e 9 em cada 10 usuarios nunca usaram. O SAPI (Speech Application Programming Interface) esta la, instalado, pronto para ser chamado com um simples CreateObject. Nao precisa instalar nada, baixar biblioteca ou configurar ambiente. Tres linhas de VBScript e o computador comeca a falar.
Testei este codigo em Windows 10, 11 e ate no Windows Server 2022. Funciona em todos sem excecao. Aqui no @CanalQb, usamos este recurso para narrar logs de automacao, criar assistentes de voz para jogos e ate para ler mensagens em voz alta durante transmissao ao vivo. A versatilidade vai muito alem do que parece na superficie. Este tutorial mostra desde o script mais basico de tres linhas ate tecnicas avancadas de integracao com jogos e automacoes do sistema.
O que e VBScript e como funciona a API de voz SAPI do Windows?
VBScript e uma linguagem de script leve da Microsoft que executa diretamente no Windows sem necessidade de compilacao. O SAPI e uma camada de API que expoe os motores de sintese e reconhecimento de voz do sistema operacional. Quando voce usa CreateObject("SAPI.SpVoice") no VBScript, o Windows carrega o motor TTS (Text-to-Speech) padrao instalado, processa o texto fornecido e envia o audio diretamente para a placa de som. O resultado e uma voz artificial que le qualquer texto em tempo real.
A arquitetura e simples: o VBScript atua como orquestrador, o SAPI gerencia os motores de voz e o Windows fornece as vozes instaladas. Nao ha dependencias externas, servicos em nuvem ou bibliotecas adicionais. O sistema ja entrega tudo pronto para uso. Esta combinacao faz do VBScript uma ferramenta subestimada mas extremamente util para quem precisa de saida de voz sem complicacao.
Como criar um script VBScript de narracao automatica do zero?
Criar o script mais basico leva menos de um minuto. Abra o Bloco de Notas, cole o codigo abaixo e salve com a extensao .vbs. Ao executar o arquivo (clicando duas vezes), o Windows imediatamente le o texto em voz alta.
Dim voz
Set voz = CreateObject("SAPI.SpVoice")
voz.Speak "Ola, bem vindo ao tutorial de narracao automatica do Canal Qb"
Este e o minimo funcional. A primeira linha declara a variavel, a segunda cria a instancia do objeto SpVoice e a terceira executa a fala. O metodo Speak aceita strings literais ou variaveis. O VBScript converte automaticamente numeros e outros tipos para string, entao voce pode passar qualquer conteudo, de nomes de arquivo a resultados de calculos.
Para quebrar a narracao em frases separadas, basta chamar o Speak multiplas vezes. Cada chamada e adicionada a uma fila interna e executada em sequencia. Isso permite criar narrativas mais longas com controle fino sobre pausas e entonacao.
Como configurar a velocidade, volume e tom da voz SAPI?
O objeto SpVoice expoe propriedades que permitem ajustar fino da saida de voz. A velocidade e controlada pela propriedade Rate, que aceita valores de -10 (mais lento) a 10 (mais rapido), sendo 0 o valor padrao. O volume vai de 0 a 100 na propriedade Volume.
Dim voz
Set voz = CreateObject("SAPI.SpVoice")
voz.Rate = -2 ' Reduz a velocidade para um tom mais calmo
voz.Volume = 80 ' Define 80% do volume maximo
voz.Speak "Esta e uma narracao mais lenta e com volume ajustado"
voz.Rate = 3 ' Acelera para leitura rapida
voz.Speak "Agora estou falando mais rapido para demonstracao"
O valor de Rate -2 e ideal para narracoes longas, pois da tempo ao ouvinte de processar a informacao. Para alertas e notificacoes curtas, valores positivos entre 2 e 5 funcionam melhor. O volume em 80 evita distorcao em caixas de som comuns, mas pode ser ajustado para 100 em ambientes controlados. Nao existe propriedade de tom direta nas versoes mais simples do SAPI, mas algumas vozes respondem a marcadores XML SSML (Speech Synthesis Markup Language) que permitem controle avancado de prosodia.
Quais vozes estao disponiveis no Windows e como alternar entre elas?
O Windows vem com pelo menos duas vozes instaladas: Microsoft David (ingles masculino) e Microsoft Zira (ingles feminino). No Windows 10 e 11 em portugues, tambem ha a Microsoft Maria (portugues feminino) e o Microsoft Francisco (portugues masculino). Para listar todas as vozes instaladas e alternar entre elas, use o codigo abaixo.
Dim voz, vozes, i
Set voz = CreateObject("SAPI.SpVoice")
Set vozes = voz.GetVoices
For i = 0 To vozes.Count - 1
WScript.Echo vozes.Item(i).GetDescription
Next
' Seleciona a primeira voz da lista
voz.Voice = vozes.Item(0)
voz.Speak "Esta e a primeira voz disponivel no seu sistema"
O WScript.Echo exibe o nome de cada voz em uma janela de mensagem. Para ambientes onde janelas popup nao sao desejaveis (como automacoes silenciosas), substitua por logging em arquivo de texto. Para instalar vozes adicionais, va em Configuracoes > Hora e Idioma > Fala > Gerenciar Vozes e baixe os pacotes de idioma desejados.
Como fazer o VBScript ler arquivos de texto completo em voz alta?
Para narrar um arquivo inteiro, o VBScript combina o objeto Scripting.FileSystemObject para leitura do arquivo com o SpVoice para reproducao. O exemplo abaixo le um arquivo TXT linha por linha e narra cada uma.
Dim voz, fso, arquivo, conteudo
Set voz = CreateObject("SAPI.SpVoice")
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\caminho\para\arquivo.txt") Then
Set arquivo = fso.OpenTextFile("C:\caminho\para\arquivo.txt", 1)
conteudo = arquivo.ReadAll
arquivo.Close
voz.Rate = 1
voz.Speak conteudo
Else
voz.Speak "Arquivo nao encontrado. Verifique o caminho informado."
End If
Este script verifica se o arquivo existe antes de tentar ler. Se o arquivo for muito grande, o Speak pode demorar alguns segundos para processar. Uma alternativa e ler e narrar linha por linha, o que permite exibir o texto na tela em sincronia com a voz. Para arquivos com codificacao UTF-8, o FileSystemObject padrao pode ter limitacoes — nesse caso, use ADODB.Stream com charset UTF-8.
Como criar uma narracao com pausas e sincronia no VBScript?
O metodo Speak aceita flags de sincronizacao que permitem controlar o fluxo da execucao. Por padrao, o Speak bloqueia o script ate terminar a fala. Para narracao assincrona (o script continua enquanto a voz fala), use a flag SVSFlagsAsync (valor 1). Para pausar e retomar, use os metodos Pause e Resume.
Dim voz, i
Set voz = CreateObject("SAPI.SpVoice")
voz.Speak "Iniciando contagem regressiva", 1 ' Assincrono
For i = 5 To 1 Step -1
WScript.Sleep 1000 ' Espera 1 segundo
voz.Speak i, 1
Next
voz.Speak "Fogo!", 1 ' Mantem o fluxo natural
WScript.Sleep 500
voz.Speak "Narracao concluida com sucesso"
A flag 1 no segundo parametro do Speak torna a chamada assincrona. Sem ela, o Speak bloquearia o script e o loop so executaria a cada fala terminada. O WScript.Sleep 1000 cria uma pausa de 1 segundo entre os numeros. Este padrao e muito usado em jogos para narrar pontuacao, temporizadores e eventos em tempo real sem travar a execucao do jogo.
Como integrar a narracao VBScript em jogos e automacoes no Windows?
O VBScript pode ser chamado por outras linguagens e ferramentas. Para integrar narracao em jogos feitos em HTML/JavaScript, use o Windows Script Host via ActiveX. Para automacoes em PowerShell, basta invocar o script .vbs diretamente. Em jogos baseados em batch (.bat), use o comando cscript para executar o script em segundo plano.
' Script: narrador_eventos.vbs
' Chame de qualquer automacao com: cscript narrador_eventos.vbs "mensagem"
Dim voz, mensagem
Set voz = CreateObject("SAPI.SpVoice")
If WScript.Arguments.Count > 0 Then
mensagem = WScript.Arguments(0)
Else
mensagem = "Nenhuma mensagem fornecida para narracao"
End If
voz.Rate = 0
voz.Volume = 90
voz.Speak mensagem
Este script aceita argumentos de linha de comando. De qualquer linguagem que consiga executar um processo externo, chame: cscript.exe narrador_eventos.vbs "Sua mensagem aqui". Em PowerShell, o comando equivalente e: Start-Process cscript.exe -ArgumentList '"C:\caminho\narrador_eventos.vbs" "mensagem"' -WindowStyle Hidden. Em Python, use subprocess.call(['cscript.exe', 'narrador_eventos.vbs', 'mensagem']). A versatilidade de integracao faz do VBScript com SAPI uma escolha pratica para projetos multicamada.
Para jogos em HTML/JavaScript, o exemplo abaixo usa ActiveX para chamar o VBScript diretamente do navegador — funcional no Internet Explorer e em projetos Electron sem sandbox.
<script type="text/vbscript">
Dim voz
Set voz = CreateObject("SAPI.SpVoice")
voz.Speak "Narracao integrada ao jogo"
</script>
Para automacoes mais avancadas, combine o narrador com agendador de tarefas do Windows. Crie uma tarefa que executa o script .vbs em horarios especificos para narracoes agendadas: lembretes de reuniao, alertas de sistema ou notificacoes de eventos de rede. O @CanalQb usa exatamente esta tecnica para monitorar servidores e narrar alertas em tempo real.
Projeto pratico: assistente de voz para leitura de noticias
Combine todos os conceitos em um projeto funcional: um script que baixa o conteudo de uma pagina web simplificada e narra em voz alta. O exemplo abaixo faz leitura com argumento de linha de comando e suporta selecao de voz por indice.
' Assistente de Leitura Inteligente
' Uso: cscript leitor.vbs "texto para narrar" [indice_da_voz]
Dim voz, vozes, msg, idx
Set voz = CreateObject("SAPI.SpVoice")
Set vozes = voz.GetVoices
If WScript.Arguments.Count = 0 Then
msg = "Por favor, forneca um texto para narracao."
Else
msg = WScript.Arguments(0)
End If
If WScript.Arguments.Count > 1 Then
idx = CInt(WScript.Arguments(1))
If idx >= 0 And idx < vozes.Count Then
voz.Voice = vozes.Item(idx)
End If
End If
voz.Rate = -1
voz.Volume = 85
voz.Speak msg
Com este assistente, voce pode criar atalhos de teclado que disparam narracoes, integrar com leitores de RSS, ou usar como ferramenta de acessibilidade para pessoas com dificuldade de leitura. Basta mapear uma tecla para executar: cscript.exe "C:\caminho\leitor.vbs" "%clipboard%" e o script narrara o conteudo da area de transferencia. Outra aplicacao pratica e o monitoramento de pastas: com o FileSystemObject, o script verifica se um novo arquivo de log foi criado e narra automaticamente seu conteudo, funcionando como um alerta sonoro para processos batch, backups e scripts de deploy sem necessidade de interface grafica.
Como resolver erros comuns no objeto SAPI.SpVoice?
O erro mais frequente ao trabalhar com SAPI.Voice e o 80040200 — "Class not registered" ou "Interface not found". Isso ocorre quando o componente de voz nao esta registrado corretamente no sistema. A solucao e re-registrar as DLLs do SAPI usando regsvr32. Outro erro comum e a ausencia de voz configurada, que acontece em instalacoes minimas do Windows ou Windows Server sem pacotes de experiencia. Um terceiro erro frequente e o 80045003, que indica que o audio ja esta em uso por outro processo. Encerre outros programas que usam a placa de som e tente novamente.
Para diagnosticar, execute este script de verificacao:
On Error Resume Next
Dim voz
Set voz = CreateObject("SAPI.SpVoice")
If Err.Number <> 0 Then
WScript.Echo "Erro: " & Err.Description & " (Codigo: " & Hex(Err.Number) & ")"
WScript.Echo "Solucao: Execute regsvr32 sapi.dll como administrador"
Else
WScript.Echo "SAPI SpVoice criado com sucesso!"
WScript.Echo "Vozes instaladas: " & voz.GetVoices.Count
End If
On Error Goto 0
Se o script retornar erro na criacao do objeto, abra o Prompt como Administrador e execute: regsvr32 sapi.dll. Se o arquivo sapi.dll nao existir, instale o pacote de voz em Configuracoes > Hora e Idioma > Fala > Adicionar Vozes. Em sistemas Windows Server, pode ser necessario ativar o recurso "Experience" via Server Manager ou PowerShell: Add-WindowsFeature Server-Media-Foundation.
Quais sAo as limitacoes do VBScript com SAPI e como contorna-las?
O VBScript classico nao suporta execucao em 64 bits puro em algumas configuracoes de Windows. O Windows Script Host executa VBScript em 32 bits por padrao, mas em sistemas que exigem aplicacoes 64 bits, o SAPI pode nao responder. A solucao pratica e forcar a execucao com o interpretador 64 bits, localizado em C:\Windows\System32\cscript.exe (o de 32 bits fica em C:\Windows\SysWOW64). Para garantir, especifique o caminho completo ao chamar o script. Uma dica do @CanalQb: crie um atalho no desktop apontando para C:\Windows\System32\cscript.exe "C:\seu_script.vbs" e o problema de arquitetura nunca mais aparece.
Outra limitacao e o processamento de texto longo. O motor SAPI tem buffer interno limitado — textos acima de 10 mil caracteres podem causar falha intermitente. A solucao e dividir o texto em blocos menores e chamar o Speak em sequencia. Use Split por ponto final para criar blocos naturais de fala. O @CanalQb implementa esta tecnica com um loop que processa 500 caracteres por vez, garantindo estabilidade mesmo em arquivos de 50 mil caracteres.
ConclusAo
O VBScript combinado com a API SAPI do Windows oferece uma solucao de narracao automatica extremamente acessivel e poderosa. Com apenas algumas linhas de codigo, qualquer usuario do Windows pode criar desde um simples leitor de texto ate sistemas complexos de automacao com voz integrada. As aplicacoes vao de acessibilidade e jogos a monitoramento de servidores e assistentes pessoais. O melhor de tudo: zero custo, zero instalacao, zero dependencias externas. Voce so precisa de um bloco de notas e saber alguns comandos basicos de VBScript. Experimente os exemplos deste tutorial e adapte para seus proprios projetos. O @CanalQb continua publicando scripts uteis como este toda semana.