Aller au contenu

Tâche Text To Speech

Résumé

  • Nom interne : TextToSpeech
  • Catégorie : Notifications
  • Objectif : Lire un texte à voix haute via le moteur de synthèse vocale de l'appareil. La tâche attend la fin de la lecture.
  • Type de tâche : Normale

Compatibilité

  • Version AndroMate minimale : 1.1.0

  • Version AndroMate maximale : 1.1.0

  • Android minimum : Android 13 (API 33)

  • Android testé maximum : Android 16 (API 36)

  • Permissions requises : Aucune


Description détaillée

La tâche Text To Speech lit un texte à voix haute via le moteur Android TextToSpeech. Elle fonctionne en arrière-plan (foreground service) — c'est une sortie audio, pas de l'UI, et ne nécessite aucune permission runtime spéciale.

Le moteur TTS a un cycle de vie asynchrone (init → speak → done). La tâche gère cela en interne et bloque jusqu'à la fin de la lecture (ou expiration du timeout), puis libère le moteur. L'attente est obligatoire : libérer le moteur trop tôt couperait la parole.

Si le moteur échoue à s'initialiser, si les données de la langue choisie sont absentes, ou si le timeout expire, la tâche lève TTS-TASK-001.


Paramètres d'entrée

Paramètre Type Requis Valeurs possibles / Règles Compatibilité Android Compatibilité AndroMate Défaut
tts_text String Oui Texte à lire (interpolation supportée) Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""
language Enum / String Non Tag BCP-47 (en, fr, ar, …) ; vide → langue de l'appareil Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""
timeout_s Integer Non Timeout de sécurité pour init + lecture (secondes) Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 30

Paramètres de sortie

Cette tâche ne produit aucune variable de sortie. Elle retourne un VoidResult en cas de succès.


Exceptions

Code Condition de déclenchement
TTS-TASK-001 Échec d'init du moteur TTS, langue indisponible, ou timeout expiré

Diagramme d'exécution

flowchart TD
    Start([▶ TextToSpeech]) --> Resolve[🔧 Résolution texte & langue]

    Resolve --> Init[⚙️ Init moteur TTS\nattente onInit]

    Init --> Ok{Init réussie ?}

    Ok -->|Non| Throw([❌ TTS-TASK-001])
    Ok -->|Oui| Lang[🌐 Définir la langue\nfallback défaut]

    Lang --> Speak[🗣️ speak QUEUE_FLUSH]

    Speak --> Wait[⏳ Attente onDone / timeout]

    Wait --> Shutdown[🧹 libération moteur]

    Shutdown --> Success([✅ VoidResult])

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Throw fill:#ffcdd2
    style Init fill:#fff9c4
    style Speak fill:#f3e5f5
    style Wait fill:#fff9c4

Fonctionnement :

  1. Résolution : tts_text et language sont résolus avec le contexte AndroMate
  2. Init : le moteur TTS est initialisé ; la tâche attend le callback onInit (jusqu'à timeout_s)
  3. Langue : la langue demandée est définie ; si non supportée, fallback sur la langue de l'appareil
  4. Lecture : le texte est lu avec QUEUE_FLUSH
  5. Attente : la tâche bloque jusqu'au callback onDone (ou le timeout)
  6. Libération : le moteur est libéré
  7. Résultat : retourne VoidResult, ou lève TTS-TASK-001 en cas d'échec

Exemples de code

Exemple 1 — Lire un message en anglais

{
  "TextToSpeech": [
    {
      "id": "1",
      "title": "Parler",
      "tts_text": "Test completed successfully",
      "language": "en",
      "timeout_s": 30
    }
  ]
}

Exemple 2 — Lire une variable dans la langue de l'appareil

{
  "TextToSpeech": [
    {
      "id": "2",
      "title": "Annoncer résultat",
      "tts_text": "La vitesse est de $speed_kmh kilomètres par heure",
      "language": ""
    }
  ]
}

Détails des paramètres d'entrée

tts_text — Texte à lire

Le texte lu à voix haute. Supporte l'interpolation $variable et ${SPECIAL_VAR}.

language — Langue

Un tag de langue BCP-47 sélectionnant la langue de la voix :

Valeur Langue
"" Langue de l'appareil
en Anglais
fr Français
ar Arabe
es Espagnol
de Allemand
it Italien

Si la langue choisie n'est pas disponible sur l'appareil, le moteur retombe sur la langue par défaut.

timeout_s — Timeout de sécurité

Temps maximum (en secondes) d'attente pour l'init du moteur et la lecture. Évite que le workflow ne bloque indéfiniment si le moteur se fige. Défaut 30.


Détails des paramètres de sortie

Cette tâche ne produit aucune variable de sortie.


Exemple JSON complet

{
  "TextToSpeech": [
    {
      "id": "1",
      "title": "Text To Speech",
      "tts_text": "Workflow terminé",
      "language": "fr",
      "timeout_s": 30
    }
  ]
}