Convertendo texto para fala com Azure AI Speech e .NET

Convertendo texto para fala com Azure AI Speech e .NET

O que é Síntese de Fala (Speech)

A Síntese de Fala faz parte dos Speech Services do Azure, um conjunto de serviços de inteligência artificial da Microsoft projetado para fornecer recursos avançados de fala e linguagem natural em aplicativos. Ela é uma tecnologia que converte texto em fala humana artificial, permitindo que os computadores “falem” ao transformar palavras escritas em uma voz audível e natural. A síntese de fala é comumente usada em aplicativos de assistentes virtuais, sistemas de navegação por voz, leitores de tela para pessoas com deficiência visual, entre outros.

Como Funciona a Síntese de Fala

A tecnologia de síntese de fala utiliza modelos de aprendizado profundo para gerar uma voz que soa natural. Esses modelos são treinados com grandes volumes de dados de fala e texto, permitindo que a tecnologia aprenda as nuances da pronúncia, entonação e ritmo da fala humana. O Azure oferece diferentes vozes personalizáveis, permitindo que os desenvolvedores escolham a voz que melhor se adapte às necessidades do seu aplicativo. Em nosso projeto de exemplo utilizaremos a voz da Brenda.

Aplicações Comuns

São diversas as possibilidades de aplicação da síntese de fala. Abaixo listamos algumas delas:

      • Assistentes Virtuais: Assistentes como Cortana, Siri e Alexa usam síntese de fala para interagir com os usuários de maneira natural e intuitiva.

      • Sistemas de Navegação por Voz: Aplicativos de navegação, como o Google Maps e o Waze, utilizam síntese de fala para fornecer direções em tempo real.

      • Leitores de Tela: Ferramentas como o NVDA ajudam pessoas com deficiência visual a acessar conteúdos digitais, convertendo texto em fala.

      • Serviços de Atendimento ao Cliente: Bots de atendimento ao cliente podem usar síntese de fala para oferecer suporte automatizado e eficiente aos clientes.

    Benefícios da Síntese de Fala

    Assim como as possibilidades de uso, os benefícios também são vários e dependem do tipo de aplicação.

        • Acessibilidade: Melhora a acessibilidade para pessoas com deficiências visuais ou dificuldades de leitura.

        • Multilinguismo: Suporta múltiplos idiomas, permitindo a criação de aplicativos globais.

        • Personalização: As vozes podem ser personalizadas para refletir a marca ou o estilo desejado.

        • Engajamento: Proporciona uma interação mais natural e envolvente com os usuários.

      Criando o Serviço de Síntese de Fala na Azure

      Para utilizar o serviço de síntese de fala, é necessário que você possua uma assinatura ativa do Azure. Então, acesse o portal do Azure  e clique em Criar um novo recurso. Procure por “Speech”. 

      Clique no item “Speech” ou “Fala” e, em seguida, aparecerá uma tela semelhante à imagem abaixo. Clique em “Criar”.

      Preencha as seguintes informações:

          • Assinatura

          • Grupo de Recursos

          • Região do grupo de recursos (se estiver criando um novo Grupo de Recursos)

          • Região

          • Nome

          • Tipo de preço

        Na imagem abaixo, mostro as configurações que utilizei.

        Após preencher todas as informações, clique em Examinar + criar e, em seguida, em Criar.

        Depois, aparecerá a tela da sua aplicação, onde você encontrará as duas chaves de acesso e a localização e região. Estas duas informações serão importantes quando precisarmos configurar a nossa API.

        Criando o projeto Demo

        Para demonstrar o uso do Azure AI Speech, vamos criar uma API em ASP.NET Core que irá receber um texto e retornar um arquivo de áudio. Então, com um projeto ASP.NET Core Web API criado, instale o seguinte pacote:

        				
        					dotnet add package Microsoft.CognitiveServices.Speech
        				
        			

        Crie em seguida um controller chamado TextToSpeechController, que será responsável por receber o texto a ser convertido e retornar o arquivo de áudio com o resultado da síntese. A estrutura inicial desse controller pode ser vista abaixo:

        				
        					using Microsoft.AspNetCore.Mvc;
        namespace TextToTalk.Controllers
        {
            [ApiController]
            [Route("[controller]")]
            public class TextToSpeechController : ControllerBase
            {
        
               [HttpPost]
               public async Task<IActionResult> TextToSpeech(string text)
               {
                    try
                    {
                        //Nosso código.          	
                    }
                    catch (Exception ex)
                    {
                      	return BadRequest(ex.Message);
                    }
                }
           }
        }
        				
        			

        Agora, dentro do nosso bloco try, vamos adicionar os dados e configurações necessários para nos conectarmos com a API de conversão.

        				
        					string speechKey = "Sua Chave 1 ou Chave 2"; 
        string speechRegion = "brazilsouth"; 
        var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);
        speechConfig.SpeechSynthesisVoiceName = "pt-BR-BrendaNeural";
        				
        			
        No código acima, criamos a variável speechKey para armazenar a nossa chave 1 ou chave 2 e speechRegion para armazenar a região do serviço de Síntese de Fala da Azure, ambas informações obtidas no portal anteriormente. Em seguida, utilizamos as informações repassadas nas variáveis speechKey e speechRegion para iniciar uma configuração na variável speechConfig. Feito isso, podemos escolher o idioma e tipo de voz que desejamos. Para este tutorial, nós usamos "pt-BR-BrendaNeural", uma voz em português do Brasil, que oferece uma qualidade de fala natural.

        Caso queira utilizar outras vozes, até o momento existem 16: Francisca, Antonio, Brenda, Donato, Elza, Fabo, Giovanna, Humberto, Julio, Leika, Laticia, Manuela, Nicolau, Valerio, Yara, Thalita. Para utilizar, basta colocar “pt-BR-NomeDaVozNeural”. Ex: “pt-BR-ManuelaNeural”.

        Logo após o bloco de código anterior um SpeechSynthesizer com a configuração especificada (speechConfig) que ficará na variável synthesizer. A instrução using garante que todos os recursos não gerenciados sejam liberados corretamente após o uso do sintetizador:

        				
        					using (var synthesizer = new SpeechSynthesizer(speechConfig))
        {
            var result = await synthesizer.SpeakTextAsync(text);
        
            if (result.Reason == ResultReason.SynthesizingAudioCompleted)
            {
                var audioByte = result.AudioData;
                return File(audioByte, "audio/wav" , "output.wav");
            }
            else
            {
                throw new Exception($"Falha ao sintetizar áudio: {result.Reason}");
            }
        }
        				
        			

        O método SpeakTextAsync recebe o texto enviado pelo usuário, converte o texto em áudio de forma assíncrona e armazena na variável result, que guardará o resultado da operação, incluindo o áudio gerado e informações sobre o estado da operação. Em seguida, verificamos se a síntese de fala foi concluída com sucesso (result.Reason == ResultReason.SynthesizingAudioCompleted). Se sim, extraímos os dados de áudio (result.AudioData) e os retornamos como um arquivo WAV com o tipo de conteúdo "audio/wav" e o nome "output.wav".  Caso contrário, lançamos uma exceção com uma mensagem de erro que descreve o motivo da falha.

        Neste ponto já podemos executar nossa API e fazer uma requisição HTTP POST para o endpoint TextToSpeech. O resultado deve ser um arquivo de áudio disponível para download.

        Acelere a sua carreira conosco!

        Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui

        Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui

        Conclusão

        Neste tutorial, demonstramos como implementar a conversão de texto para fala (Text-to-Speech) utilizando os Speech Services da Azure em uma aplicação ASP.NET Core. Com esse conhecimento, você pode expandir essa implementação para incluir funcionalidades adicionais, como suporte a diferentes idiomas e vozes, personalização do formato de saída de áudio, e melhorias na interface do usuário para uma experiência mais rica.

        Para aprofundar seu entendimento e explorar mais recursos, recomendamos consultar a documentação oficial dos Serviços de IA do Azure para fala. Lá você encontrará exemplos avançados, melhores práticas e possibilidades de personalização para tornar sua aplicação ainda mais robusta e adaptada às necessidades dos usuários.

        Seguindo essas diretrizes, você estará bem equipado para desenvolver soluções inovadoras que aproveitam o poder da conversão de texto para fala, melhorando a acessibilidade e a experiência do usuário em suas aplicações.