Compartilhar via


Conversão de Texto em Fala

Browse sample.Navegar na amostra. Navegar na amostra

Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.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.

Começar

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 30 R) ou mais recente, você deverá atualizar o Android Manifest 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 queries/intent nós 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 recebe um opcional CancellationToken para interromper a declaração assim que ela começar.

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();
}

Texto para Fala irá automaticamente enfileirar as solicitações de fala 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 o idioma da voz, use a classe SpeechOptions. Passe uma instância dessa classe para o método SpeakAsync(String, SpeechOptions, CancellationToken). O método mencionado 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

Para controlar o volume, o tom, a taxa e a localidade da voz, use a classe SpeechOptions. Passe uma instância dessa classe para o método SpeakAsync(String, SpeechOptions, CancellationToken). O método GetLocalesAsync() recupera uma coleção dos locais fornecidos 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
        Rate = 1.5f,    // 0.1 - 2.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
Rate 0.1 2,0

Limitações

  • Não há garantia de ordenação de comandos se for chamada em vários threads.
  • Oficialmente, a reprodução de áudio em segundo plano não é suportada.