Xamarin.Essentials: Synthèse vocaleXamarin.Essentials: Text-to-Speech

La classe Synthèse vocale permet à une application d’utiliser les moteurs de synthèse vocale intégrés pour énoncer le texte à partir de l’appareil et également pour interroger les langages disponibles pris en charge par le moteur.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.

Prise en mainGet started

Pour commencer à utiliser cette API, lisez le Guide de prise en main de Xamarin.Essentials pour vérifier que la bibliothèque est correctement installée et configurée dans vos projets.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.

Utilisation de Synthèse vocaleUsing Text-to-Speech

Ajoutez une référence à Xamarin.Essentials dans votre classe :Add a reference to Xamarin.Essentials in your class:

using Xamarin.Essentials;

La Synthèse vocale fonctionne en appelant la méthode SpeakAsync avec du texte et des paramètres facultatifs, et retourne à la fin de l’énoncé.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());
}

Cette méthode prend un CancellationToken facultatif pour arrêter l’énoncé lors de son démarrage.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.
}

// Cancel speech if a cancellation token exists & hasn't been already requested.
public void CancelSpeech()
{
    if (cts?.IsCancellationRequested ?? true)
        return;

    cts.Cancel();
}

La Synthèse vocale met automatiquement en file d’attente les requêtes de parole à partir du même thread.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());
}

Paramètres de la paroleSpeech Settings

Pour mieux contrôler la façon dont l’audio est prononcé avec SpeechOptions qui permet de définir le volume, la tonalité et les paramètres régionaux.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);
}

Les valeurs prises en charge pour ces paramètres sont les suivantes :The following are supported values for these parameters:

ParamètreParameter MinimumMinimum MaximumMaximum
TonalitéPitch 00 2.02.0
VolumeVolume 00 1.01.0

Paramètres régionaux de la paroleSpeech Locales

Chaque plateforme prend en charge des paramètres régionaux différents, pour énoncer du texte dans différentes langues et avec différents accents.Each platform supports different locales, to speak back text in different languages and accents. Les plateformes ont des codes différents et des façons variées de spécifier les paramètres régionaux, c’est pourquoi Xamarin.Essentials fournit une classe Locale inter-plateformes et un moyen de les interroger avec 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);
}

LimitationsLimitations

  • La file d’attente de l’énoncé n’est pas garantie si elle est appelée sur plusieurs threads.Utterance queue is not guaranteed if called across multiple threads.
  • La lecture audio en arrière-plan n’est pas officiellement prise en charge.Background audio playback is not officially supported.

APIAPI