DEV Community

1

Ensinando o terminal a falar

Dessa vez vamos fazer uma coisa um pouco mais divertida, utilizar o Powershell para sintetizar voz ou seja, vamos fazer nosso script falar.

Conseguimos fazer isso utilizando um recurso do sistema, então é importante lembrar que a qualidade da pronuncia vai depender da linguagem instalada no sistema. Exemplo, eu estou usando meu Windows em ingles e passando texto em português para ele ler, o que deixa tudo bem engraçado devido a pronuncia.

Existem alguns usos interessantes para esse recurso, como deixar os retornos dos nossos scripts mais acessíveis, ao não depender unicamente de ler uma tela para saber o que aconteceu.
Um outro que já utilizei, é usar isso em conjunto com formas de se comunicar com outros computadores, criando uma espécie de "radio", podemos trabalhar nessa ideia no futuro.

Inicialmente, vamos trabalhar no script base para o recurso:

# Adiciona biblioteca
Add-Type -AssemblyName System.speech
# Cria narrador
$narrador = New-Object System.Speech.Synthesis.SpeechSynthesizer
# Recebe o texto
$texto = Read-Host "Informe o que deseja ouvir"
# Lê o texto
$narrador.Speak("$texto")
view raw narrador.ps1 hosted with ❤ by GitHub

Com esse script, pode passar como parâmetro uma mensagem para que o terminal leia. Mas vamos tentar colocar isso num cenário mais pratico, utilizando ele para uma resposta em um script nosso.

Vamos basicamente pegar nosso script que simula a configuração de um repositório GIT local e vamos adicionar aos retornos escritos, o narrador.

# Configuracoes
$urlDownload = "https://github.com/IGDEXE/MLSA-Powershell/archive/main.zip"
$pastaMyGIT = "C:\MyGIT"
$arquivoDownload = "$env:LOCALAPPDATA/GIT.zip"
# Configurando o Narrador
Add-Type -AssemblyName System.speech # Adiciona biblioteca
$narrador = New-Object System.Speech.Synthesis.SpeechSynthesizer # Cria narrador
# Funcao para criar pastas
function Validar-Pasta {
param (
# Aqui definimos qual a posicao e se é obrigatorio ou nao o parametro
# O contador de posicoes comeca em 0, é importante lembrar disso
[parameter(position=0,Mandatory=$True)]
$caminhoPasta
)
# Validamos se o caminho existe, salvando a resposta em uma variavel
$pastaValidacao = Test-Path -Path "$caminhoPasta"
# Se ela já existe, exibimos uma mensagem de erro
if ($pastaValidacao) {
# Recebendo o nome da pasta com base no caminho
$infoPasta = Get-ItemProperty $caminhoPasta
$nomePasta = $infoPasta.Name
# Informamos que a pasta já existe
Write-Host "Já existe o diretorio: $nomePasta"
$narrador.Speak("Já existe o diretorio: $nomePasta")
}
# Se a pasta existe, executamos o bloco de codigo
else {
# Executar o comando de criação de pasta
$esconderRetorno = New-Item -Path "$caminhoPasta" -ItemType "Directory" # Vamos jogar isso numa variavel para nao aparecer o retorno padrao na tela
# Recebendo o nome da pasta com base no caminho
$infoPasta = Get-ItemProperty $caminhoPasta
$nomePasta = $infoPasta.Name
# Mostrar mensagem de confirmação na tela
Write-Host "Criado diretorio: $nomePasta"
$narrador.Speak("Criado diretorio: $nomePasta")
}
}
# Para limpar a tela
Clear-Host
try {
# Cria a pasta na raiz do sistema
Validar-Pasta $pastaMyGIT
# Faz o download do arquivo
Write-Host "Fazendo o download"
$narrador.Speak("Fazendo o download")
Invoke-WebRequest -Uri "$urlDownload" -OutFile "$arquivoDownload"
# Descompacta para a pasta que criamos
Write-Host "Descompactando.."
$narrador.Speak("Descompactando..")
Expand-Archive -Path "$arquivoDownload" -DestinationPath "$pastaMyGIT" -Force
# Limpa a instalacao
Write-Host "Otimizando armazenamento.."
$narrador.Speak("Otimizando armazenamento..")
Remove-Item -Path "$arquivoDownload" -Force
# Conclui o processo
Write-Host "Configuração concluida"
$narrador.Speak("Configuração concluida")
Write-Host "Disponivel em: $pastaMyGIT"
$narrador.Speak("Disponivel em: $pastaMyGIT")
}
catch {
$ErrorMessage = $_.Exception.Message # Recebe o erro
Write-Host "Ocorreu um problema" # Mostra a mensagem
$narrador.Speak("Ocorreu um problema")
Write-Host "Erro: $ErrorMessage"
$narrador.Speak("Erro: $ErrorMessage")
}

Com isso, tornamos nosso script mais inclusivo e divertido.
Eu só não gostei muito da repetição de código com os textos, mas vamos cuidar disso na próxima postagem.

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay