Partager via


Synthèse vocale

Parcourez l’exemple. Parcourir l'exemple

Dans cet article, vous allez apprendre à utiliser l’interface ITextToSpeech de l’application multiplateforme .NET (.NET MAUI). 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’espace de noms Microsoft.Maui.Media contient à la fois l’interface ITextToSpeech et la classe TextToSpeech.

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 Plateformes/Android/AndroidManifest.xml, ajoutez les nœuds queries/intent suivants au nœud manifest :

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

Utilisation de Synthèse vocale

La conversion de texte par synthèse vocale fonctionne en appelant la méthode SpeakAsync avec le texte à restituer oralement, comme l’illustre l’exemple de code suivant :

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

Cette méthode prend un CancellationToken facultatif pour arrêter l’énoncé lors de son démarrage.

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 les paramètres régionaux de la voix, utilisez la classe SpeechOptions. Passez une instance de cette classe à la méthode SpeakAsync(String, SpeechOptions, CancellationToken). La méthode GetLocalesAsync() récupère une collection des paramètres régionaux fournis 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

Limites

  • La file d’attente de l’énoncé n’est pas garantie si elle est appelée sur plusieurs threads.
  • La lecture audio en arrière-plan n’est pas officiellement prise en charge.