Compartir a través de


Text-to-Speech

Examinar ejemplo. Examinar el ejemplo

En este artículo se describe cómo puedes usar la interfaz ITextToSpeech de .NET Multi-platform App UI (.NET MAUI). Esta interfaz permite a una aplicación usar los motores integrados de texto a voz para devolver texto desde el dispositivo. También puede usarlo para consultar los idiomas disponibles.

La implementación predeterminada de la interfaz ITextToSpeech está disponible a través de la propiedad TextToSpeech.Default. Tanto la interfaz ITextToSpeech como la clase TextToSpeech están contenidas en el espacio de nombres Microsoft.Maui.Media.

Introducción

Para acceder a la función de texto a voz, se requiere la siguiente configuración específica para la plataforma.

Si la versión de Android de destino del proyecto está establecida en Android 11 (R API 30) o una versión superior, debes actualizar tu Manifiesto de Android con un filtro de intención para el motor de texto a voz (TTS). Para obtener más información sobre las intenciones, consulta la documentación sobre Intents y filtros de intents de Android.

En el archivo Platforms/Android/AndroidManifest.xml, agrega los siguientes nodos queries/intent al nodo manifest:

<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Uso de texto a voz

El texto a voz funciona llamando al método SpeakAsync con el texto que se va a hablar, como se muestra en el ejemplo de código siguiente:

public async void Speak() =>
    await TextToSpeech.Default.SpeakAsync("Hello World");

Este método toma un elemento CancellationToken opcional para detener la declaración una vez que se inicia.

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 función texto a voz pondrá automáticamente en la cola las solicitudes de voz del mismo subproceso.

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());
}

Configuración

Para controlar el volumen, el tono y la configuración regional de la voz, usa la clase SpeechOptions. Pasa una instancia de la clase al método SpeakAsync(String, SpeechOptions, CancellationToken). El método GetLocalesAsync() recupera una colección de las configuraciones regionales proporcionadas por el 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);
}

Los siguientes son los valores compatibles para estos parámetros:

Parámetro Mínima Máximo
Pitch 0 2.0
Volume 0 1.0

Limitaciones

  • No se garantiza la cola de declaraciones si se llama a través de varios subprocesos.
  • La reproducción de audio en segundo plano no se admite de manera oficial.