Sintesi vocale
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). ITextToSpeech Questa interfaccia consente a un'applicazione di utilizzare i motori predefiniti di sintesi vocale per pronunciare il testo dal dispositivo. È anche possibile usarlo per eseguire query per i linguaggi disponibili.
L'implementazione predefinita dell'interfaccia ITextToSpeech
è disponibile tramite la TextToSpeech.Default proprietà . Sia l'interfaccia che TextToSpeech
la ITextToSpeech
classe sono contenute nello spazio dei Microsoft.Maui.Media
nomi .
Operazioni preliminari
Per accedere alla funzionalità di sintesi vocale, è necessaria la configurazione specifica della piattaforma seguente.
Se la versione di Android di destinazione del progetto è impostata su Android 11 (API R 30) o versione successiva, è necessario aggiornare il manifesto Android con un filtro finalità per il motore di sintesi vocale (TTS). Per altre informazioni sulle finalità, vedere la documentazione di Android sulle finalità e sui filtri finalità.
Nel file Platforms/Android/AndroidManifest.xml aggiungere i nodi seguenti queries/intent
al manifest
nodo:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Uso della sintesi vocale
La sintesi vocale funziona chiamando il SpeakAsync metodo con il testo da pronunciare, come illustrato nell'esempio di codice seguente:
public async void Speak() =>
await TextToSpeech.Default.SpeakAsync("Hello World");
Questo metodo accetta un CancellationToken
facoltativo per arrestare la riproduzione vocale dopo l'avvio.
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();
}
La sintesi vocale accoda automaticamente le richieste vocali dallo stesso 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());
}
Impostazione
Per controllare il volume, l'inclinazione e le impostazioni locali della voce, usare la SpeechOptions classe . Passare un'istanza di tale classe al SpeakAsync(String, SpeechOptions, CancellationToken) metodo . Il GetLocalesAsync() metodo recupera una raccolta delle impostazioni locali fornite dal sistema operativo.
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);
}
Di seguito sono riportati i valori supportati per questi parametri:
Parametro | Minimo | Massimo |
---|---|---|
Pitch |
0 | 2.0 |
Volume |
0 | 1.0 |
Limiti
- L'accodamento delle espressioni non è garantito se viene chiamato tra più thread.
- La riproduzione audio in background non è ufficialmente supportata.