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.