Conversão de Texto em Fala
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.