Tra le tante possibilità di PowerShell vi è anche quella del System.Speech, cioè possiamo far parlare il computer e leggere il contenuto di un file di testo TXT. Facciamo un paio di esempi pratici di applicazione di questa funzione. E’ arrivata quella lunghissima relazione del vostro capo, che non avete nessuna voglia di leggere, ma con poche righe di codice possiamo utilizzare PowerShell che la legga al nostro posto e noi l’ascoltiamo facendo altro. Il far parlare il computer, tramite PowerShell, lo possiamo usare per fare uno scherzo a qualcuno, oppure per dare un messaggio di benvenuto all’accensione del computer o in determinati orari.
Come prima cosa ci serve sapere quali sono le voci presenti nel sistema operativo, se non ci bastano, e vogliamo qualche voce particolare straniera, le possiamo aggiungere. Incollando queste tre righe di codice in PowerShell otteniamo la lista delle voci presenti:
Add-Type -AssemblyName System.Speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speak.GetInstalledVoices().VoiceInfo
Leggere un breve messaggio
Con queste tre righe possiamo far leggere un piccolo messaggio a PowerShell utilizzando una delle voci presenti.
Add-Type –AssemblyName System.Speech
$SpeechSynthesizer = New-Object –TypeName System.Speech.Synthesis.SpeechSynthesizer
$SpeechSynthesizer.Speak('Ciao TurboLab.it')
Lo script lo possiamo pianificare perché venga eseguito all’avvio del computer così da dare un saluto di benvenuto a chi lo utilizza, oppure, perché siamo dispettosi, per fargli uno scherzo.
- Nelle ricerche fatte su Internet ho trovato anche questo script, leggermente più complesso del precedente, dove possiamo variare la velocità di lettura,
$speechSyn.Rate
, oppure cambiare la voce utilizzata,$speechSyn.SelectVoice
. Se volete alleggerire il codice, tutte le righe che iniziano con il # le potreste eliminare. Add-Type -AssemblyName System.speech
#create speech synthesizer
$speechSyn = ([System.Speech.Synthesis.SpeechSynthesizer]::New())
#-10 slow to 10 fast, cambio velocità lettura
$speechSyn.Rate = -0
#find available voices
#$speechSyn.GetInstalledVoices() | foreach {
# write-host ($_.VoiceInfo).Name
# write-host ($_.VoiceInfo).Culture
# write-host ($_.VoiceInfo).Age
# write-host ($_.VoiceInfo).Gender
# write-host ($_.VoiceInfo).Description
# write-host ($_.VoiceInfo).Id
# write-host ($_.VoiceInfo).AdditionalInfo
#}
#select an available voice
$speechSyn.SelectVoice("Microsoft Elsa")
#say something
$speechSyn.Speak('Benvenuti su TurboLab.it.')
#dispose
$speechSyn.Dispose()
Leggere un file di testo
Come ultimo script che vi posso segnalare è questo, per la lettura di un file di testo TXT, dove possiamo cambiare la voce utilizzata, $Narrator.SelectVoice
, e la velocità di lettura, $Narrator.Rate
.
Add-Type -AssemblyName System.speech
$Narrator = New-Object System.Speech.Synthesis.SpeechSynthesizer $Narrator.SelectVoice('Microsoft Cosimo')
$Narrator.Rate = 0
$Location = "d:\test.txt"
$Contents = Get-Content
$Location $Narrator.Speak($Contents)
Al momento non ho trovato modo di fargli leggere altri formati di file che non siano i TXT.