TOC

This article has been localized into Portuguese by the community.

Áudio e Vídeo:

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!

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!