Skip to main content
PDQ.com mobilePDQ.com desktop
Support

PowerShell: Text-to-Speech Examples

Kris PowellKris Powell
·

This is a fun way to utilize Text to Speed (TTS) with PowerShell for Halloween. This is a fun little prank you can use to turn your users computers into “haunted” computers as long as they’ve got their speakers on. 

We use the cmdlet Add-Type to add a .NET framework type to a PowerShell session. We can then instantiate a SpeechSynthesizer object to turn our text into audio output. It’s pretty exciting.

The easiest way to try this is like so:

Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speak.Speak('Hello...')

You can even jazz it up a bit by modifying the speed of speech by modifying the rate property of the object. Here’s a good resource to see the different properties/methods of this object – link (scroll towards the bottom).

Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$tts.Rate   = -5  # -10 to 10; -10 is slowest, 10 is fastest
$speak.Speak('Hello...')

From there, we can start having some fun. For example, we could place a list of phrases into an array or a separate text file and pull a phrase at random to be synthesized. Be sure to choose which method you’d like to use.

Add-Type -AssemblyName System.speech
$tts = New-Object System.Speech.Synthesis.SpeechSynthesizer

# Importing from text file
$PhraseLocation = "C:\SomeFolder\ListOfPhrases.csv"
$Phrase         = (Get-Content $PhraseLocation) | Get-Random

# Using an array
$Phrase2 = @("I'm a robot.", 
    "Help, I'm stuck in the machine!", 
    "What are you doing, $env:USERNAME") | Get-Random

$tts.Rate   = 0  # -10 is slowest, 10 is fastest
$tts.Speak($Phrase)

Hopefully, this gives you some fun ideas for Halloween tomorrow!

Bonus:

Those of you who want to experiment with even more control over TTS can make use of Speech Synthesis Markup Language (SSML).

Here’s an example:

Add-Type -AssemblyName System.speech
$tts = New-Object System.Speech.Synthesis.SpeechSynthesizer

$Phrase = '
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" 
    xml:lang="en-US">
    <voice xml:lang="en-US">
    <prosody rate="1">
        <p>Normal pitch. </p>
        <p><prosody pitch="x-high"> High Pitch. </prosody></p>
    </prosody>
    </voice>
</speak>
'
$tts.SpeakSsml($Phrase)

Did you know that PDQ Deploy has a PowerShell step you can use to deploy your scripts?


This blog post is part of a series on PowerShell:

Ready to put the PowerShell Scanner through its paces?

Take our 14-day Free Trial. Feel the power of the PowerShell scanner.
Start a Trial

Don't miss the next post!

Advanced Filtering - Webcast Transcript

Stay with me on this. Alright. First, let's just do some basics. So we're all on the same page, how do you find data in PDQ inventory

webcast
PDQ.com
© 2021 PDQ.com Corporation

Products

  • PDQ Deploy ®
  • PDQ Inventory ®
  • Enterprise SL
  • Pricing
  • Downloads
  • Licensing
  • Buy