While setting up a lab environment today I had some time to kill and thought I would check out more recent methods for speech automation from within PowerShell. Some of the interesting aspects involved in this script are:
Get-Random - Used to select random members from the object
ArrayList object type - Used to allow the removal of array members
Get-Random - Used to select random members from the object
ArrayList object type - Used to allow the removal of array members
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | if ( $VerbosePreferenceOrig .length -eq 0) { $VerbosePreferenceOrig = $VerbosePreference ;} $VerbosePreference = "Continue" ; Add -Type -AssemblyName System.Speech $Speech = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer $Speech .Volume = 100; #create temp copies to work with $Voices = New-Object System.Collections.ArrayList; $Words = New-Object System.Collections.ArrayList; #fill the arrays which will be static Foreach ( $Item in $Speech .GetInstalledVoices().VoiceInfo.Name) { $Idx = $Voices .Add( $Item ); } $Idx = $Words .Add( "Hello, welcome to PowerShell 4.0 Part 1" ); $Idx = $Words .Add( "Did you know PowerShell rocks!" ); $Idx = $Words .Add( "What you are hearing, is written in PowerShell" ); $Idx = $Words .Add( "We are going to have some fun this week" ); $Idx = $Words .Add( "With dot net we can do a great deal" ); $Idx = $Words .Add( "Don't worry, use Get-Help" ); #create temp copies to work with $TmpVoices = New-Object System.Collections.ArrayList; $TmpWords = New-Object System.Collections.ArrayList; #fill the temporary arrays foreach ( $item in $Voices ) { $Idx = $TmpVoices .Add( $item );} foreach ( $item in $Words ) { $Idx = $TmpWords .Add( $item );} For ( $loop =0; $loop -lt 10; $loop ++) { Write -Verbose "Starting loop $loop" ; #make sure we don't completely empty the arrays if ( $TmpVoices .Count -le 0) { foreach ( $item in $Voices ) { $Idx = $TmpVoices .Add( $item );};} if ( $TmpWords .Count -le 0) { foreach ( $item in $Words ) { $Idx = $TmpWords .Add( $item );};} #randomly get the voice and words to say $Voice = Get -Random -InputObject $TmpVoices ; $Word = Get -Random -InputObject $TmpWords ; #remove these from the selection for less repetition ( $TmpVoices .Remove( $Voice ); $TmpWords .Remove( $Word ); Write -Verbose "Voice: $($Voice)" ; Write -Verbose "Words: $($Word)" ; $Speech .SelectVoice( $Voice ); $Speech .Speak( $Word ); Start-Sleep -Seconds 3; } Write-Host "Script Done!" ; $VerbosePreference = $VerbosePreferenceOrig ; |