Synthèse vocale

Browse sample.Parcourez l’exemple. Parcourir l'exemple

Dans cet article, vous découvrirez comment utiliser l'interface .NET Multi-platform App UI (.NET MAUI) ITextToSpeech. L’interface permet à une application d’utiliser les moteurs intégrés de conversion de texte par synthèse vocale pour restituer oralement du texte à partir de l’appareil. Vous pouvez également l’utiliser pour rechercher des langues disponibles.

L’implémentation par défaut de l’interface ITextToSpeech est disponible via la propriété TextToSpeech.Default. L'interface ITextToSpeech et la classe TextToSpeech sont contenues dans l'espace de noms Microsoft.Maui.Media.

Démarrage

Pour accéder à la fonctionnalité de conversion de texte par synthèse vocale, la configuration suivante spécifique à la plateforme est requise.

Si la version Android cible de votre projet est définie sur Android 11 (R API 30) ou une version ultérieure, vous devez mettre à jour votre manifeste Android avec un filtre d’intention pour le moteur de conversion de texte par synthèse vocale (TTS). Pour plus d’informations sur les intentions, consultez la documentation d’Android sur les intentions et les filtres d’intention.

Dans le fichier Platforms/Android/AndroidManifest.xml, ajoutez les nœuds suivants au nœud :

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

Utiliser la synthèse vocale

La synthèse vocale fonctionne en appelant la méthode SpeakAsync avec le texte à prononcer, comme le montre l’exemple de code suivant :

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

Cette méthode prend un facultatif pour arrêter l'énoncé une fois qu'il commence.

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

Paramètres

Pour contrôler le volume, la hauteur et la langue de la voix, utilisez la classe SpeechOptions. Passez une instance de cette classe à la méthode . La méthode GetLocalesAsync() récupère une collection des locales fournies par le système d’exploitation.

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

Les valeurs prises en charge pour ces paramètres sont les suivantes :

Paramètre Minimum Maximale
Pitch 0 2.0
Volume 0 1.0

Pour contrôler le volume, la hauteur, la vitesse et les paramètres régionaux de la voix, utilisez la classe SpeechOptions. Passez une instance de cette classe à la méthode . La méthode GetLocalesAsync() récupère une collection des locales fournies par le système d’exploitation.

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

Les valeurs prises en charge pour ces paramètres sont les suivantes :

Paramètre Minimum Maximale
Pitch 0 2.0
Volume 0 1.0
Rate 0.1 2.0

Limites

  • La mise en file d'attente des énoncés n'est pas assurée en cas d'appel depuis plusieurs threads.
  • La lecture audio en arrière-plan n’est pas officiellement prise en charge.