diff --git a/Data/scripts.csv b/Data/scripts.csv index 2322418a..2e6e6648 100644 --- a/Data/scripts.csv +++ b/Data/scripts.csv @@ -80,6 +80,7 @@ speak-date.ps1, speaks the current date by text-to-speech (TTS) speak-english.ps1, speaks the given text with an English text-to-speech (TTS) voice speak-epub.ps1, speaks the content of the given Epub file by text-to-speech (TTS) speak-file.ps1, speaks the content of the given text file by text-to-speech (TTS) +speak-german.ps1, speaks the given text with a German text-to-speech (TTS) voice speak-joke.ps1, speaks the next joke by text-to-speech (TTS) speak-test.ps1, performs a speak test by text-to-speech (TTS) speak-text.ps1, speaks the given text by text-to-speech (TTS) diff --git a/README.md b/README.md index d484948a..1938e604 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ The following PowerShell scripts can be found in the [Scripts/](Scripts/) subfol * [speak-english.ps1](Scripts/speak-english.ps1) - speaks the given text with an English text-to-speech (TTS) voice * [speak-epub.ps1](Scripts/speak-epub.ps1) - speaks the content of the given Epub file by text-to-speech (TTS) * [speak-file.ps1](Scripts/speak-file.ps1) - speaks the content of the given text file by text-to-speech (TTS) +* [speak-german.ps1](Scripts/speak-german.ps1) - speaks the given text with a German text-to-speech (TTS) voice * [speak-joke.ps1](Scripts/speak-joke.ps1) - speaks the next joke by text-to-speech (TTS) * [speak-test.ps1](Scripts/speak-test.ps1) - performs a speak test by text-to-speech (TTS) * [speak-text.ps1](Scripts/speak-text.ps1) - speaks the given text by text-to-speech (TTS) diff --git a/Scripts/speak-date.ps1 b/Scripts/speak-date.ps1 index 458f6a3b..ced3c13d 100755 --- a/Scripts/speak-date.ps1 +++ b/Scripts/speak-date.ps1 @@ -6,24 +6,9 @@ .NOTES Author: Markus Fleschutz / License: CC0 #> -function Speak { param([string]$Text) - write-progress "$Text" - $Voice = new-object -ComObject SAPI.SPVoice - $Voices = $Voice.GetVoices() - foreach ($OtherVoice in $Voices) { - $Description = $OtherVoice.GetDescription() - if ($Description -like "*- English (United States)") { - $Voice.Voice = $OtherVoice - break - } - } - [void]$Voice.Speak($Text) - write-progress -complete "$Text" -} - try { [system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US" - Speak("Today is $((Get-Date).ToShortDateString())") + & ./speak-english.ps1 "Today is $((Get-Date).ToShortDateString())" exit 0 } catch { write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" diff --git a/Scripts/speak-english.ps1 b/Scripts/speak-english.ps1 index 5ab3f8c5..b4b76b36 100755 --- a/Scripts/speak-english.ps1 +++ b/Scripts/speak-english.ps1 @@ -20,7 +20,7 @@ try { write-progress "$Text" $Voice.Voice = $OtherVoice [void]$Voice.Speak($Text) - write-progress -complete "" + write-progress -complete "$Text" exit 0 } } diff --git a/Scripts/speak-german.ps1 b/Scripts/speak-german.ps1 new file mode 100644 index 00000000..bac86f78 --- /dev/null +++ b/Scripts/speak-german.ps1 @@ -0,0 +1,32 @@ +#!/snap/bin/powershell +<# +.SYNTAX ./speak-german.ps1 [] +.DESCRIPTION speaks the given text with a German text-to-speech (TTS) voice +.LINK https://github.com/fleschutz/PowerShell +.NOTES Author: Markus Fleschutz / License: CC0 +#> + +param($Text = "") + +try { + $Voice = new-object -ComObject SAPI.SPVoice + $Voices = $Voice.GetVoices() + foreach ($OtherVoice in $Voices) { + $Description = $OtherVoice.GetDescription() + if ($Description -like "*- German*") { + if ($Text -eq "") { + $Text = read-host "Enter the text to speak" + } + write-progress "$Text" + $Voice.Voice = $OtherVoice + [void]$Voice.Speak($Text) + write-progress -complete "$Text" + exit 0 + } + } + write-error "Sorry, no German text-to-speech (TTS) voice found" + exit 1 +} catch { + write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" + exit 1 +} diff --git a/Scripts/speak-joke.ps1 b/Scripts/speak-joke.ps1 index 2cbea3fb..14fcd4a9 100755 --- a/Scripts/speak-joke.ps1 +++ b/Scripts/speak-joke.ps1 @@ -6,21 +6,6 @@ .NOTES Author: Markus Fleschutz / License: CC0 #> -function Speak { param([string]$Text) - write-progress "$Text" - $Voice = new-object -ComObject SAPI.SPVoice - $Voices = $Voice.GetVoices() - foreach ($OtherVoice in $Voices) { - $Description = $OtherVoice.GetDescription() - if ($Description -like "*- English (United States)") { - $Voice.Voice = $OtherVoice - break - } - } - [void]$Voice.Speak($Text) - write-progress -complete "$Text" -} - try { $PathToRepo = "$PSScriptRoot/.." @@ -31,8 +16,7 @@ try { $Joke = $Table[$Index].Joke - [system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US" - Speak $Joke + & ./speak-english.ps1 "$Joke" exit 0 } catch { write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" diff --git a/Scripts/speak-time.ps1 b/Scripts/speak-time.ps1 index 21f767fb..3126c8d5 100755 --- a/Scripts/speak-time.ps1 +++ b/Scripts/speak-time.ps1 @@ -6,24 +6,9 @@ .NOTES Author: Markus Fleschutz / License: CC0 #> -function Speak { param([string]$Text) - write-progress "$Text" - $Voice = new-object -ComObject SAPI.SPVoice - $Voices = $Voice.GetVoices() - foreach ($OtherVoice in $Voices) { - $Description = $OtherVoice.GetDescription() - if ($Description -like "*- English (United States)") { - $Voice.Voice = $OtherVoice - break - } - } - [void]$Voice.Speak($Text) - write-progress -complete "$Text" -} - try { [system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US" - Speak("It's now $((Get-Date).ToShortTimeString())") + & ./speak-english.ps1 "It's now $((Get-Date).ToShortTimeString())" exit 0 } catch { write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"