This article has been localized into Czech by the community.
Syntéza řeči (přimějte WPF mluvit)
V knihovně System.Speech, Microsoft přidal něco opravdu skvělého: Syntézu řeči, schopnost převádět text na mluvená slova, a rozpoznávání řeči, schopnost překládat mluvená slova do textu. V tomto článku se budeme zaměřovat na syntézu řeči a poté se v dalším článku budeme věnovat rozpoznávání řeči.
Pro převod textu na mluvená slova budeme používat třídu SpeechSynthesizer. Tato třída se nachází v sestavení System.Speech, které budeme muset přidat, abychom ji mohli použít v naší aplikaci. V závislosti na tom, kterou verzi Visual Studia používáte, proces vypadá nějak takto:
S přidaným odpovídajícím sestavením můžeme nyní použít třídu SpeechSynthesizer z oboru názvů System.Speech.Synthesis. S tímto nastavením začneme opět velmi jednoduchým příkladem inspirovaným "Hello, world!", tentokrát ve formě mluveného slova:
<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SpeechSynthesisSample" Height="150" Width="150">
<Grid>
<Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
</Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;
namespace WpfTutorialSamples.Audio_and_Video
{
public partial class SpeechSynthesisSample : Window
{
public SpeechSynthesisSample()
{
InitializeComponent();
}
private void btnSayHello_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
speechSynthesizer.Speak("Hello, world!");
}
}
}
Je to prakticky tak jednoduché, jak to jen může být, a protože snímek obrazovky opravdu nepomáhá příliš v demonstraci syntézy řeči, doporučuji, abyste si příklad sestavili sami, abyste to zažili.
Ovládání výslovnosti
SpeechSynthesizer ale dokáže více než to. Použitím třídy PromptBuilder můžeme získat mnohem větší kontrolu nad tím, jak se věta vyslovuje. Následující příklad, který je rozšířením prvního příkladu, to ilustruje:
<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisPromptBuilderSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SpeechSynthesisPromptBuilderSample" Height="150" Width="150">
<Grid>
<Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
</Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;
namespace WpfTutorialSamples.Audio_and_Video
{
public partial class SpeechSynthesisPromptBuilderSample : Window
{
public SpeechSynthesisPromptBuilderSample()
{
InitializeComponent();
}
private void btnSayHello_Click(object sender, RoutedEventArgs e)
{
PromptBuilder promptBuilder = new PromptBuilder();
promptBuilder.AppendText("Hello world");
PromptStyle promptStyle = new PromptStyle();
promptStyle.Volume = PromptVolume.Soft;
promptStyle.Rate = PromptRate.Slow;
promptBuilder.StartStyle(promptStyle);
promptBuilder.AppendText("and hello to the universe too.");
promptBuilder.EndStyle();
promptBuilder.AppendText("On this day, ");
promptBuilder.AppendTextWithHint(DateTime.Now.ToShortDateString(), SayAs.Date);
promptBuilder.AppendText(", we're gathered here to learn");
promptBuilder.AppendText("all", PromptEmphasis.Strong);
promptBuilder.AppendText("about");
promptBuilder.AppendTextWithHint("WPF", SayAs.SpellOut);
SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
speechSynthesizer.Speak(promptBuilder);
}
}
}
Zde to začíná být zajímavé. Zkuste si příklad spustit a uvidíte, jak pěkně to funguje. Dodáním něčeho více než jen textového řetězce SpeechSynthesizeru můžeme získat velkou kontrolu nad tím, jak se různé části věty vyslovují. V tomto případě aplikace řekne následující:
Anglicky mluvený text: Hello world and hello to the universe too. On this day, <today's date>, we're gathered here to learn all about WPF.
Nyní to zkuste poslat přímo do SpeechSynthesizeru a pravděpodobně se u výsledku trochu zasmějete. Místo toho řídíme metodu Speak() ve způsobu, jak by měly být použity různé části věty. Především požádáme WPF, aby řeklo "and hello to the universe too (a také pozdrav vesmíru)" s nižším objemem a pomalejším tempem, jako by to bylo šeptáno.
Další část, která nepoužívá jen výchozí výslovnost, je datum. Používáme speciální výčtový typ SayAs, abychom určili, že se má datum číst jako skutečné datum, a ne jen jako sada čísel, mezer a speciálních znaků.
Také požadujeme, aby se slovo "všichni" vyslovovalo s větším důrazem, aby věta byla dynamičtější, a nakonec žádáme, aby se slovo "WPF" hláskovalo (W-P-F) místo toho, aby bylo vyslovováno jako skutečné slovo.
Celkově nám to umožňuje udělat SpeechSynthesizer mnohem srozumitelnějším!
Shrnutí
Přimět vaši aplikaci WPF mluvit je velmi snadné a s použitím třídy PromptBuilder dokonce můžete získat velkou kontrolu nad tím, jak jsou vaše slova vyslovována. Je to velmi silná vlastnost, ale nemusí být relevantní pro mnoho dnešních aplikací. Přesto je to stále velmi úžasné!