Compartir a través de


Conversión de Texto a Voz

Browse sample.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 ITextToSpeech interfaz como la TextToSpeech clase están contenidas en el espacio de nombres Microsoft.Maui.Media.

Comenzar

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 los intents, consulta la documentación sobre Intents y filtros de intents de Android.

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

<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 demuestra en el siguiente ejemplo de código:

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

Este método toma un CancellationToken opcional para detener el enunciado 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, utiliza la clase SpeechOptions. Pasa una instancia de esa clase al método SpeakAsync(String, SpeechOptions, CancellationToken). El método GetLocalesAsync() recupera una colección de las localizaciones 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

Para controlar el volumen, el tono, la velocidad y la configuración regional de la voz, use la clase SpeechOptions. Pasa una instancia de esa clase al método SpeakAsync(String, SpeechOptions, CancellationToken). El GetLocalesAsync() método recupera una colección de los locales proporcionados 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
        Rate = 1.5f,    // 0.1 - 2.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
Rate 0.1 2.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.