Xamarin.Essentials: Sintesi vocale
La classe TextToSpeech consente a un'applicazione di usare i motori di sintesi vocale predefiniti pronunciare il testo dal dispositivo, nonché per recuperare le lingue disponibili supportate dal motore.
Operazioni preliminari
Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.
Per accedere alla funzionalità TextToSpeech è necessaria la configurazione specifica della piattaforma seguente.
Se la versione di Android di destinazione del progetto è impostata su Android 11 (API R 30) è necessario aggiornare il manifesto Android con query usate con i nuovi requisiti di visibilità del pacchetto.
Aprire il file AndroidManifest.xml nella cartella Proprietà e aggiungere quanto segue all'interno del nodo manifest:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Uso della sintesi vocale
Aggiungere un riferimento a Xamarin.Essentials nella classe :
using Xamarin.Essentials;
La sintesi vocale funziona chiamando il metodo SpeakAsync
con testo e parametri facoltativi e restituisce il controllo al termine della riproduzione vocale.
public async Task SpeakNowDefaultSettings()
{
await TextToSpeech.SpeakAsync("Hello World");
// This method will block until utterance finishes.
}
public void SpeakNowDefaultSettings2()
{
TextToSpeech.SpeakAsync("Hello World").ContinueWith((t) =>
{
// Logic that will run after utterance finishes.
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Questo metodo accetta un CancellationToken
facoltativo per arrestare la riproduzione vocale dopo l'avvio.
CancellationTokenSource cts;
public async Task SpeakNowDefaultSettings()
{
cts = new CancellationTokenSource();
await TextToSpeech.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.Run(async () =>
{
await TextToSpeech.SpeakAsync("Hello World 1");
await TextToSpeech.SpeakAsync("Hello World 2");
await TextToSpeech.SpeakAsync("Hello World 3");
isBusy = false;
});
// or you can query multiple without a Task:
Task.WhenAll(
TextToSpeech.SpeakAsync("Hello World 1"),
TextToSpeech.SpeakAsync("Hello World 2"),
TextToSpeech.SpeakAsync("Hello World 3"))
.ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}
Impostazioni della sintesi vocale
Per un maggiore controllo sul modo in cui l'audio viene pronunciato, usare in combinazione con SpeechOptions
che consente di impostare il volume, la tonalità e le impostazioni locali.
public async Task SpeakNow()
{
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Di seguito sono riportati i valori supportati per questi parametri:
Parametro | Minimo | Massimo |
---|---|---|
Beccheggio | 0 | 2.0 |
Volume | 0 | 1.0 |
Impostazioni locali per la voce
Ogni piattaforma supporta impostazioni locali diverse, per pronunciare il testo in lingue e con accenti diversi. Le piattaforme hanno codici e modi diversi per specificare le impostazioni locali, motivo per cui Xamarin.Essentials fornisce una classe multipiattaforma Locale
e un modo per eseguire query con GetLocalesAsync
.
public async Task SpeakNow()
{
var locales = await TextToSpeech.GetLocalesAsync();
// Grab the first locale
var locale = locales.FirstOrDefault();
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f,
Locale = locale
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Limiti
- L'accodamento delle riproduzioni vocali non è garantito in caso di chiamata su più thread.
- La riproduzione di audio in background non è ufficialmente supportata.
API
Video correlato
Altri video di Xamarin sono disponibili su Channel 9 e YouTube.