PSVoice

Fast jede Windows Version hat mittlerweile einen Sprach Synthesizer eingebaut, mit dem Windows Texte auch "vorlesen" kann. Die Funktion gibt es schon Seit Windows 98 und mit dem .NET-Framework 3.0 ist es sehr einfach auch per PowerShell diese Funktion zu nutzen.

"Hello" per Sprache

Genau genommen reicht ein Dreizeiler, um dem PC die ersten Töne zu entlocken

Add-Type -AssemblyName System.speech
$voice = New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Speak("Hallo, This is your Computer")

Auf ihrem PC können mehrere "Personas" installiert sein. Normalerweise spricht "Microsoft Anna". Das können Sie einfach ermitteln

PS C:\> $voice.voice.Name
Microsoft Anna

Anna ist natürlich mit einer amerikanischen Aussprache gesegnet. Deutsche Texte hören sich entsprechend unnatürlich an.

Methoden und Properties von System.Speech.Synthesis.SpeechSynthesizer

Wenn man nun mal in "$voice" die Klasse instanziert hat, kann ein Blick in die Eigenschaften schon aufschlussreich sein

PS C:\> $voice | gm

   TypeName: System.Speech.Synthesis.SpeechSynthesizer

Name                          MemberType Definition
----                          ---------- ----------
BookmarkReached               Event      System.EventHandler`1[System.Speech...
PhonemeReached                Event      System.EventHandler`1[System.Speech...
SpeakCompleted                Event      System.EventHandler`1[System.Speech...
SpeakProgress                 Event      System.EventHandler`1[System.Speech...
SpeakStarted                  Event      System.EventHandler`1[System.Speech...
StateChanged                  Event      System.EventHandler`1[System.Speech...
VisemeReached                 Event      System.EventHandler`1[System.Speech...
VoiceChange                   Event      System.EventHandler`1[System.Speech...
AddLexicon                    Method     void AddLexicon(uri uri, string med...
Dispose                       Method     void Dispose(), void IDisposable.Di...
Equals                        Method     bool Equals(System.Object obj)
GetCurrentlySpokenPrompt      Method     System.Speech.Synthesis.Prompt GetC...
GetHashCode                   Method     int GetHashCode()
GetInstalledVoices            Method     System.Collections.ObjectModel.Read...
GetType                       Method     type GetType()
Pause                         Method     void Pause()
RemoveLexicon                 Method     void RemoveLexicon(uri uri)
Resume                        Method     void Resume()
SelectVoice                   Method     void SelectVoice(string name)
SelectVoiceByHints            Method     void SelectVoiceByHints(System.Spee...
SetOutputToAudioStream        Method     void SetOutputToAudioStream(System....
SetOutputToDefaultAudioDevice Method     void SetOutputToDefaultAudioDevice()
SetOutputToNull               Method     void SetOutputToNull()
SetOutputToWaveFile           Method     void SetOutputToWaveFile(string pat...
SetOutputToWaveStream         Method     void SetOutputToWaveStream(System.I...
Speak                         Method     void Speak(string textToSpeak), voi...
SpeakAsync                    Method     System.Speech.Synthesis.Prompt Spea...
SpeakAsyncCancel              Method     void SpeakAsyncCancel(System.Speech...
SpeakAsyncCancelAll           Method     void SpeakAsyncCancelAll()
SpeakSsml                     Method     void SpeakSsml(string textToSpeak)
SpeakSsmlAsync                Method     System.Speech.Synthesis.Prompt Spea...
ToString                      Method     string ToString()
Rate                          Property   int Rate {get;set;}
State                         Property   System.Speech.Synthesis.Synthesizer...
Voice                         Property   System.Speech.Synthesis.VoiceInfo V...
Volume                        Property   int Volume {get;set;}

Sie sehen eine ganze Menge von Methoden aber auch ein paar Properties. Einige Properties kann man verändern, wie z.B. "Rate" (Default 2) und "Volume" (Default =100). Andere Properties wie "Voice" können direkt nur gelesen werden.

PS C:\> $voice.Voice

Gender                : Female
Age                   : Adult
Name                  : Microsoft Anna
Culture               : en-US
Id                    : MS-Anna-1033-20-DSK
Description           : Microsoft Anna - English (United States)
SupportedAudioFormats : {System.Speech.AudioFormat.SpeechAudioFormatInfo}
AdditionalInfo        : {[Age, Adult], [AudioFormats, 18], [Gender, Female],
                        [Language, 409]...}

Auf meinen Windows 7 Desktop war aber auch nur "Microsoft Anna" installiert

Weitere TTS-Engines addieren

Es gibt aber durchaus weitere Text to Speech (TTS)-Engines. Über die Systemsteuerung können Sie diese einsehen und auch erweitern. Interessanterweise ist das entsprechende Icon im ControlPanel nicht sichtbar. Sie können es aber direkt aufrufen

C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl

Allerdings hat Microsoft nur eine TTS-Engine bei Windows 7 mitgeliefert. Auf einem Windows 2012 Server mit Lync sind es schon drei Stimmen:

Weitere TTS-Engines können Sie von Drittherstellern erwerben. für erste PowerShell-Experimente ist aber auch Anna schon ganz nützlich.

Weitere Links