Xamarin.Essentials: Texto a vozXamarin.Essentials: Text-to-Speech

La clase TextToSpeech permite que una aplicación utilice los motores de texto a voz para responder a texto del dispositivo y también para consultar los idiomas disponibles que el motor puede admitir.The TextToSpeech class enables an application to utilize the built-in text-to-speech engines to speak back text from the device and also to query available languages that the engine can support.

Primeros pasosGet started

Para empezar a usar esta API, lea la guía de introducción para Xamarin.Essentials con el fin de asegurarse de que la biblioteca está correctamente instalada y configurada en los proyectos.To start using this API, read the getting started guide for Xamarin.Essentials to ensure the library is properly installed and set up in your projects.

Uso de Text-to-SpeechUsing Text-to-Speech

Agregue una referencia a Xamarin.Essentials en su clase:Add a reference to Xamarin.Essentials in your class:

using Xamarin.Essentials;

Text-to-Speech funciona mediante una llamada al método SpeakAsync con parámetros opcionales y de texto y se devuelve una vez que finaliza la declaración.Text-to-Speech works by calling the SpeakAsync method with text and optional parameters, and returns after the utterance has finished.

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

Este método toma un elemento CancellationToken opcional para detener la declaración una vez que se inicia.This method takes in an optional CancellationToken to stop the utterance once it starts.

CancellationTokenSource cts;
public async Task SpeakNowDefaultSettings()
{
    cts = new CancellationTokenSource();
    await TextToSpeech.SpeakAsync("Hello World", cancelToken: cts.Token);

    // This method will block until utterance finishes.
}

public void CancelSpeech()
{
    if (cts?.IsCancellationRequested ?? false)
        return;

    cts.Cancel();
}

Text-to-Speech pondrá automáticamente en la cola las solicitudes de voz del mismo subproceso.Text-to-Speech will automatically queue speech requests from the same 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());
}

Configuración de vozSpeech Settings

Para más información sobre cómo se responde el audio, SpeechOptions permite ajustar el volumen, el tono y la configuración regional.For more control over how the audio is spoken back with SpeechOptions that allows setting the volume, pitch, and locale.

public async Task SpeakNow()
{
    var settings = new SpeechOptions()
        {
            Volume = .75f,
            Pitch = 1.0f
        };

    await TextToSpeech.SpeakAsync("Hello World", settings);
}

Los siguientes son los valores compatibles para estos parámetros:The following are supported values for these parameters:

ParámetroParameter MínimaMinimum MáximoMaximum
TonoPitch 00 2.02.0
VolumenVolume 00 1.01.0

Configuraciones regionales de vozSpeech Locales

Cada plataforma admite distintas configuraciones regionales para responder texto en distintos idiomas y acentos.Each platform supports different locales, to speak back text in different languages and accents. Las plataformas tienen distintos códigos y formas de especificar la configuración regional, que es la razón por la que Xamarin.Essentials proporciona una claseLocale multiplataforma y una manera de hacer consultas con GetLocalesAsync.Platforms have different codes and ways of specifying the locale, which is why Xamarin.Essentials provides a cross-platform Locale class and a way to query them with 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);
}

LimitacionesLimitations

  • No se garantiza la cola de declaraciones si se llama a través de varios subprocesos.Utterance queue is not guaranteed if called across multiple threads.
  • La reproducción de audio en segundo plano no se admite de manera oficial.Background audio playback is not officially supported.

APIAPI