Condividi tramite


Sintesi vocale

Sfogliare l'esempio. Esplorare l'esempio

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.