Syntéza řeči v .NET

Zkoušeli jste někdy syntézu řeči (tedy vyslovování textu počítačem)? Je to překvapivě jednoduché.

Následující triviální příklad oznámí aktuální čas (jazyk: PowerShell):

Add-Type -AssemblyName System.Speech
$synthesizer = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$synthesizer.Speak("It's {0:H m}" -f (Get-Date))

Lze také udělat třeba hlasové oznamování výjimek:

$nullReference.ToString()
trap
{
    Add-Type -AssemblyName System.Speech
    $synthesizer = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
    $synthesizer.SpeakAsync($_)
}

Měli byste uslyšet “You cannot call a method on a null-valued expression”, tedy alespoň v anglickém jazykovém prostředí. Všimněte si také, že teď jde o asynchronní volání.

Samozřejmě jsou podporovány i mnohem složitější scénáře, například různé hlasy, hláskování, změny rychlosti řeči a podobně. Předmětem tohoto příspěvku je ale jen stručná ukázka, ne zacházení do detailů.

Poslední příklad je malinko komplexnější a naznačuje možné “užitečnější” využití. (Jazyk je C#.)

using System.Speech.Synthesis;
 
PromptBuilder builder = new PromptBuilder();
builder.AppendText("Your number is");
builder.AppendBreak(TimeSpan.FromMilliseconds(200));
builder.AppendTextWithHint("1234567", SayAs.SpellOut);
 
builder.AppendBreak(TimeSpan.FromMilliseconds(500));
builder.AppendText("Thank you for your order.");
 
builder.AppendBreak(TimeSpan.FromMilliseconds(100));
builder.AppendText("Live long and prosper.");
 
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
synthesizer.Rate = -3;
synthesizer.Speak(builder);

Jediná špatná zpráva je ta, že čeština (alespoň pokud vím) podporována není.