Compartilhar via


Conversão de Texto em Fala

Browse sample. Navegue pelo exemplo

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 integrados de conversão de texto em fala para falar de volta do texto do dispositivo. Você também pode usá-lo para consultar os idiomas disponíveis.

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

Introdução

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

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

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

<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 SpeakAsync método com o texto para falar, 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 SpeechOptions classe. Passe uma instância dessa classe para o SpeakAsync(String, SpeechOptions, CancellationToken) método. O GetLocalesAsync() método 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 emissão não é garantida se chamada em vários threads.
  • A reprodução de áudio em segundo plano não é oficialmente suportada.