This article has been localized into Portuguese by the community.
Sintetizador de fala (fazendo o WPF falar)
Na montagem System.Speech, a Microsoft adicionou algo muito legal: Síntese de Fala, a capacidade de transformar texto em palavras faladas e Reconhecimento de Fala, a capacidade de traduzir palavras faladas em texto. Vamos nos concentrar na síntese de fala neste artigo e, em seguida, entrar no reconhecimento de fala no próximo.
Para transformar o texto em palavras faladas, usaremos a classe SpeechSynthesizer . Essa classe reside no assembly System.Speech, que precisaremos adicionar para usá-la em nosso aplicativo. Dependendo de qual versão do Visual Studio você usa, o processo é algo como isto:
Com a montagem apropriada adicionada, agora podemos usar a classe SpeechSynthesizer do namespace System.Speech.Synthesis. Com isso, vamos começar com mais um simples "Olá, mundo!" exemplo inspirado, desta vez em palavras faladas:
<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!");
}
}
}
Isso é muito simples, e como a captura de tela realmente não ajuda muito na demonstração da síntese de fala, sugiro que você tente criar o exemplo, para vivenciá-la.
Pronúncia de controle
O SpeechSynthesizer pode fazer mais do que isso. Através do uso da classe PromptBuilder, podemos obter muito mais controle de como uma frase é falada. Este próximo exemplo, que é uma extensão do primeiro exemplo, ilustrará que:
<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);
}
}
}
É aqui que fica interessante. Tente executar o exemplo e veja como isso funciona bem. Fornecendo o SpeechSynthesizer com algo mais do que apenas uma cadeia de texto, podemos obter muito controle de como as várias partes da frase são faladas. Nesse caso, o aplicativo dirá o seguinte:
Olá mundo e olá universo também. Neste dia, <o dia de hoje>, nós vamos pegar tudo que aprendemos sobre WPF.
Agora tente enviar isso diretamente para o SpeechSynthesizer e você provavelmente vai rir um pouco do resultado. O que fazemos ao invés disso é guiar o método Speak () em como as várias partes da sentença devem ser usadas. Em primeiro lugar, pedimos ao WPF que fale também o "e oi ao universo" - participe num volume mais baixo e num ritmo mais lento, como se fosse sussurrado.
A próxima parte que não usa apenas a pronúncia padrão é a data. Usamos a enumeração especial SayAs para especificar que a data deve ser lida como uma data real e não apenas um conjunto de números, espaços e caracteres especiais.
Também pedimos que a palavra "todos" seja dita com uma ênfase mais forte, para tornar a sentença mais dinâmica, e no final, pedimos que a palavra "WPF" seja explicitada (WPF) em vez de ser pronunciada como uma palavra real .
Tudo somado, isso nos permite tornar o SpeechSynthesizer muito mais fácil de entender!
Resumo
Fazer o seu aplicativo WPF falar é muito fácil, e usando a classe PromptBuilder, você pode até ter muito controle de como suas palavras são faladas. Esse é um recurso muito poderoso, mas pode não ser relevante para muitos aplicativos atuais. Ainda é muito legal!