André Alves de Lima

Talking about Software Development and more…

Síntese de voz em aplicativos para a Windows Store

Olá caro(a) leitor(a)!

Quem se inscreveu na minha newsletter sabe que o meu plano para a semana passada era escrever sobre reconhecimento de voz (“speech recognition“) e síntese de voz (“speech synthesis” ou “text-to-speech“) em aplicativos para a Windows Store (“metro style apps“). Porém, devido a alguns imprevistos relacionados à minha volta para casa depois das férias, não consegui escrever algo substancial na semana passada. Então, antes de tudo, se você quer ficar por dentro das novidades do meu blog, inscreva-se na minha newsletter.

Outro ponto de dificuldade que enfrentei é que a sistemática para reconhecimento de voz em aplicativos para a Windows Store mudou drasticamente. Agora temos que utilizar o controle “Bing Speech Recognition“, e eu não tinha conseguido fazer o exemplo funcionar até poucos dias atrás (no sábado eu finalmente consegui fazer funcionar com a ajuda de um outro MVP da Bélgica). Como são várias etapas para fazer esse controle funcionar de forma correta, resolvi dividir esses dois assuntos em dois artigos, um falando sobre reconhecimento de voz e outro falando sobre síntese de voz. No artigo dessa semana, vou abordar síntese de voz em aplicativos para a Windows Store.

O processo de habilitar síntese de voz no seu aplicativo para a Windows Store é muito simples e agrega um valor bem interessante, principalmente no quesito acessibilidade. Para demonstrar o funcionamento do sintetizador de voz, vamos criar uma Windows Store Blank App e, na MainPage, vamos adicionar um TextBox e um Button:

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Width="300"
                    Margin="50"
                    HorizontalAlignment="Left">
            <TextBox x:Name="TextoASintetizar" />
            <Button x:Name="Sintetizar"
                    HorizontalAlignment="Stretch"
                    Content="Sintetizar"
                    Click="Sintetizar_Click" />
        </StackPanel>
    </Grid>

No code-behind da MainPage, vamos adicionar o código para fazer a síntese do texto digitado no TextBox:

        private async void Sintetizar_Click(object sender, RoutedEventArgs e)
        {
            var synthesizer = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

            Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync(TextoASintetizar.Text);

            var mediaElement = new MediaElement();
            mediaElement.SetSource(stream, stream.ContentType);
            mediaElement.Play();
        }

Como vocês podem ver, o processo de síntese de voz em aplicativos para a Windows Store é muito simples. Basta criar uma instância da classe SpeechSynthesizer e chamar o seu método SynthesizeTextToStreamAsync passando o texto a ser sintetizado. Com isso temos uma Stream com o resultado da síntese e podemos utilizar um MediaElement para reproduzir o conteúdo dessa Stream.

Execute a aplicação, digite algo no TextBox, clique no botão “Sintetizar” e veja o resultado sendo reproduzido. Note que, caso o seu sistema operacional esteja em inglês, você deve digitar algo em inglês para ser sintetizado, uma vez que a voz instalada nesse caso só conseguirá fazer a síntese em inglês.

Escolhendo a voz a ser utilizada

Ao chamar o método SynthesizeTextToStreamAsync sem configurar uma voz para o SpeechSynthesizer, o sintetizador de voz utilizará a voz default do sistema. Caso o seu sistema operacional esteja configurado em inglês, a voz default é a “Microsoft David Desktop“.

Para escolher uma voz específica na síntese, basta alterar a propriedade Voice do SpeechSynthesizer para uma das vozes instaladas no sistema. E para saber quais vozes estão instaladas no sistema, basta acessar a propriedade estática AllVoices da classe SpeechSynthesizer.

Vamos melhorar um pouco o nosso exemplo, adicionando um ComboBox com as vozes disponíveis e utilizando a voz selecionada ao realizar a síntese. Adicione um ComboBox na MainPage com o nome de “Voz“:

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Width="300"
                    Margin="50"
                    HorizontalAlignment="Left">
            <TextBox x:Name="TextoASintetizar" />
            <ComboBox x:Name="Voz" />
            <Button x:Name="Sintetizar"
                    HorizontalAlignment="Stretch"
                    Content="Sintetizar"
                    Click="Sintetizar_Click" />
        </StackPanel>
    </Grid>

Depois vá até o code-behind da MainPage e adicione as etapas para preencher o ComboBox no construtor:

        public MainPage()
        {
            this.InitializeComponent();
            Voz.ItemsSource = Windows.Media.SpeechSynthesis.SpeechSynthesizer.AllVoices;
            Voz.DisplayMemberPath = "DisplayName";
            Voz.SelectedIndex = 0;
        }

E, finalmente, na ação de sintetizar, vamos configurar a propriedade Voice do SpeechSynthesizer com a voz selecionada no ComboBox:

        private async void Sintetizar_Click(object sender, RoutedEventArgs e)
        {
            var synthesizer = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

            if (Voz.SelectedItem != null)
                synthesizer.Voice = (Windows.Media.SpeechSynthesis.VoiceInformation) Voz.SelectedItem;

            Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync(TextoASintetizar.Text);

            var mediaElement = new MediaElement();
            mediaElement.SetSource(stream, stream.ContentType);
            mediaElement.Play();
        }

Instalando vozes de outros idiomas

Caso o seu sistema operacional esteja configurado em inglês, muito provavelmente você só terá disponível vozes que falam em inglês. Para adicionar suporte a outros idiomas, basta instalar o language pack do idioma desejado. Para verificar se você tem o language pack instalado, vá até a busca por configurações do Windows (tecla do Windows + “W” no Windows 8.1), digite “language” e escolha a opção “Edit language and keyboard options“:

Na tela que se abre, abaixo de cada idioma configurado, você tem a informação indicando se o language pack está instalado ou disponível para instalação. Por exemplo, no meu computador eu já tinha instalado o language pack para o idioma Português Brasil:

Se eu ainda não tivesse instalado (como é o caso do idioma alemão no meu computador), eu poderia clicar no idioma, e logo em seguida clicar no botão “Options“:

Na tela de detalhes do idioma escolhido, basta clicar em “Download” para que o language pack seja baixado e instalado:

Após a instalação, ao executarmos novamente o nosso exemplo, veremos que novas vozes foram adicionadas:

E você, já está utilizando síntese de voz nos seus aplicativos? Se não, por que? Se sim, o que você achou do esquema de síntese de voz em aplicativos para a Windows Store? Deixe um comentário logo abaixo!

Para finalizar, repito aqui novamente o meu convite para inscrever-se na minha newsletter. Dessa forma você fica sempre por dentro das novidades aqui do meu blog.

Até o próximo artigo!

André Lima

Image by Howard Lake used under Creative Commons
https://www.flickr.com/photos/howardlake/5540462170/

4 thoughts on “Síntese de voz em aplicativos para a Windows Store

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *