Conversão de Texto em Fala

Procurar amostra. Procurar no exemplo

Este artigo descreve como você pode usar a interface do usuário do aplicativo .NET multiplataforma (.NET MAUI) ITextToSpeech. Essa interface permite que um aplicativo utilize os mecanismos internos de conversão de texto em fala para ler o texto do dispositivo. Você também pode usá-la para consultar os idiomas disponíveis.

A implementação padrão da interface ITextToSpeech está disponível por meio da propriedade TextToSpeech.Default. A interface ITextToSpeech e a classe TextToSpeech estão contidas no namespace Microsoft.Maui.Media.

Introdução

Para acessar a funcionalidade de conversão de texto em fala, a configuração específica da plataforma a seguir é necessária.

Se a versão de destino do Android do projeto estiver definida como Android 11 (API R 30) ou mais recente, você deverá atualizar o manifesto do Android com um filtro de intent para o mecanismo de TTS (conversão de texto em fala). Para mais informações sobre intenções, consulte a documentação do Android sobre Intenções e Filtros de Intenção.

No arquivo Platforms/Android/AndroidManifest.xml, adicione os seguintes nós queries/intent ao nó manifest:

<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Uso da Conversão de Texto em Fala

A conversão de texto em fala funciona chamando o método SpeakAsync com o texto a ser falado, como demonstra o exemplo de código a seguir:

public async void Speak() =>
    await TextToSpeech.Default.SpeakAsync("Hello World");

Esse método usa um recurso opcional CancellationToken para interromper a expressão após ela ser iniciada.

CancellationTokenSource cts;

public async Task SpeakNowDefaultSettingsAsync()
{
    cts = new CancellationTokenSource();
    await TextToSpeech.Default.SpeakAsync("Hello World", cancelToken: cts.Token);

    // This method will block until utterance finishes.
}

// Cancel speech if a cancellation token exists & hasn't been already requested.
public void CancelSpeech()
{
    if (cts?.IsCancellationRequested ?? true)
        return;
    
    cts.Cancel();
}

A Conversão de Texto em Fala automaticamente enfileirará as solicitações de voz do mesmo thread.

bool isBusy = false;

public void SpeakMultiple()
{
    isBusy = true;

    Task.WhenAll(
        TextToSpeech.Default.SpeakAsync("Hello World 1"),
        TextToSpeech.Default.SpeakAsync("Hello World 2"),
        TextToSpeech.Default.SpeakAsync("Hello World 3"))
        .ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}

Configurações

Para controlar o volume, o tom e a localidade da voz, use a classe SpeechOptions. Passe uma instância da classe para o método SpeakAsync(String, SpeechOptions, CancellationToken). O método GetLocalesAsync() recupera uma coleção das localidades fornecidas pelo sistema operacional.

public async void SpeakSettings()
{
    IEnumerable<Locale> locales = await TextToSpeech.Default.GetLocalesAsync();

    SpeechOptions options = new SpeechOptions()
    {
        Pitch = 1.5f,   // 0.0 - 2.0
        Volume = 0.75f, // 0.0 - 1.0
        Locale = locales.FirstOrDefault()
    };

    await TextToSpeech.Default.SpeakAsync("How nice to meet you!", options);
}

Veja a seguir os valores com suporte para esses parâmetros:

Parâmetro Mínimo Máximo
Pitch 0 2,0
Volume 0 1.0

Limitações

  • A fila de expressão não terá garantia se for chamada em vários threads.
  • Oficialmente, a reprodução de áudio em segundo plano não é suportada.