chrome.ttsEngine

Description

Utilisez l'API chrome.ttsEngine pour implémenter un moteur de synthèse vocale à l'aide d'une extension. Si votre extension s'enregistre à l'aide de cette API, elle reçoit des événements contenant un énoncé à prononcer et d'autres paramètres lorsqu'une extension ou une application Chrome utilise l'API tts pour générer du contenu vocal. Votre extension peut ensuite utiliser n'importe quelle technologie Web disponible pour synthétiser et générer la voix, puis renvoyer des événements à la fonction appelante pour indiquer l'état.

Autorisations

ttsEngine

Concepts et utilisation

Une extension peut s'enregistrer en tant que moteur de synthèse vocale. Ainsi, il peut intercepter une partie ou la totalité des appels à des fonctions telles que tts.speak() et tts.stop(), et fournir une autre implémentation. Les extensions sont libres d'utiliser n'importe quelle technologie Web disponible pour diffuser des contenus vocaux, y compris le streaming audio à partir d'un serveur et du contenu audio HTML5. Une extension peut même faire quelque chose de différent avec les énoncés, comme afficher des sous-titres dans un pop-up ou les envoyer sous forme de messages de journal à un serveur distant.

Pour implémenter un moteur de synthèse vocale, une extension doit déclarer l'autorisation "ttsEngine", puis toutes les voix qu'elle fournit dans le fichier manifeste de l'extension, comme suit:

{
  "name": "My TTS Engine",
  "version": "1.0",
  "permissions": ["ttsEngine"],
  "tts_engine": {
    "voices": [
      {
        "voice_name": "Alice",
        "lang": "en-US",
        "event_types": ["start", "marker", "end"]
      },
      {
        "voice_name": "Pat",
        "lang": "en-US",
        "event_types": ["end"]
      }
    ]
  },
  "background": {
    "page": "background.html",
    "persistent": false
  }
}

Une extension peut spécifier un nombre illimité de voix.

Le paramètre voice_name est obligatoire. Ce nom doit être suffisamment descriptif pour identifier le nom de la voix et le moteur utilisé. Dans le cas peu probable où deux extensions enregistreraient des voix portant le même nom, un client peut spécifier l'ID de l'extension devant effectuer la synthèse.

Le paramètre lang est facultatif, mais vivement recommandé. Presque toujours, une voix peut synthétiser un discours dans une seule langue. Lorsqu'un moteur accepte plusieurs langues, il peut facilement enregistrer une voix distincte pour chaque langue. Dans les rares cas où une seule voix peut gérer plusieurs langues, il est plus facile de n'énumérer que deux voix distinctes et de les gérer à l'aide de la même logique en interne. Toutefois, si vous souhaitez créer une voix capable de gérer les énoncés dans n'importe quelle langue, omettez le paramètre lang du fichier manifeste de votre extension.

Enfin, le paramètre event_types est obligatoire si le moteur peut envoyer des événements pour mettre à jour le client sur la progression de la synthèse vocale. Il est fortement recommandé de prendre en charge le type d'événement 'end' pour indiquer la fin de la parole, sinon Chrome ne peut pas programmer les énoncés en file d'attente.

Une fois chargée, une extension peut remplacer la liste des voix déclarées en appelant chrome.ttsEngine.updateVoices. Notez que les paramètres utilisés dans l'appel programmatique de updateVoices sont en Camel Case ("casse de chameau"), par exemple : voiceName, contrairement au fichier manifeste qui utilise voice_name.)

Les types d'événements possibles que vous pouvez envoyer correspondent aux types d'événements reçus par la méthode speak():

  • 'start': le moteur a commencé à énoncer l'énoncé.
  • 'word': une limite de mot a été atteinte. Utilisez event.charIndex pour déterminer la position actuelle de la voix.
  • 'sentence': une limite de phrase a été atteinte. Utilisez event.charIndex pour déterminer la position actuelle de la voix.
  • 'marker': un repère SSML a été atteint. Utilisez event.charIndex pour déterminer la position actuelle de la voix.
  • 'end': le moteur a fini de prononcer l'énoncé.
  • 'error': une erreur spécifique au moteur s'est produite et cet énoncé ne peut pas être énoncé. Transmettez plus d'informations dans event.errorMessage.

Les événements 'interrupted' et 'cancelled' ne sont pas envoyés par le moteur de synthèse vocale. Ils sont générés automatiquement par Chrome.

Les clients de synthèse vocale peuvent obtenir les informations vocales à partir du fichier manifeste de votre extension en appelant tts.getVoices, en supposant que vous avez enregistré des écouteurs d'événements vocaux comme décrit ci-dessous.

Gérer les événements vocaux

Pour générer du contenu vocal à la demande des clients, votre extension doit enregistrer des écouteurs pour onSpeak et onStop, comme suit:

const speakListener = (utterance, options, sendTtsEvent) => {
  sendTtsEvent({type: 'start', charIndex: 0})

  // (start speaking)

  sendTtsEvent({type: 'end', charIndex: utterance.length})
};

const stopListener = () => {
  // (stop all speech)
};

chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);

La décision d'envoyer ou non une requête vocale donnée à une extension dépend uniquement de la compatibilité de l'extension avec les paramètres vocaux donnés dans son fichier manifeste et de l'enregistrement d'écouteurs pour onSpeak et onStop. En d'autres termes, il n'existe aucun moyen pour une extension de recevoir une requête vocale et de décider de manière dynamique de la gérer ou non.

Types

AudioBuffer

Chrome 92 et versions ultérieures

Paramètres contenant un tampon audio et les données associées.

Propriétés

  • audioBuffer

    ArrayBuffer

    Tampon audio du moteur de synthèse vocale. Il doit avoir une longueur exacte, audioStreamOptions.bufferSize et encodé en mono, à audioStreamOptions.sampleRate, et en valeur flottante signée pcm linéaire, c'est-à-dire un float 32 bits de type Float32Array en JavaScript.

  • charIndex

    numéro facultatif

    Index de caractères associé à ce tampon audio.

  • isLastBuffer

    Booléen facultatif

    "True" si ce tampon audio est le dernier du texte énoncé.

AudioStreamOptions

Chrome 92 et versions ultérieures

Contient le format de flux audio censé être produit par un moteur.

Propriétés

  • bufferSize

    number

    Nombre d'échantillons dans un tampon audio.

  • sampleRate

    number

    Taux d'échantillonnage attendu dans un tampon audio.

SpeakOptions

Chrome 92 et versions ultérieures

Options spécifiées dans la méthode tts.speak()

Propriétés

  • gender (genre)

    VoiceGender facultatif

    Obsolète depuis Chrome 92

    Le critère de sexe est obsolète et sera ignoré.

    Genre de la voix pour la synthèse vocale.

  • lang

    string facultatif

    Langue à utiliser pour la synthèse, au format langue-région. Exemples: "en", "en-US", "en-GB", "zh-CN".

  • lancer

    numéro facultatif

    Le ton de la voix doit être compris entre 0 et 2 inclus, 0 représentant le niveau le plus bas et 2 le plus élevé. 1,0 correspond à la hauteur par défaut de cette voix.

  • vitesse de réaction

    numéro facultatif

    Débit par rapport au débit par défaut de cette voix. 1,0 est la vitesse par défaut, normalement de 180 à 220 mots par minute. La valeur 2,0 est deux fois plus rapide et la valeur 0,5 est deux fois moins rapide. Cette valeur est comprise entre 0,1 et 10,0 inclus. Si une voix n'est pas compatible avec cette gamme complète de tarifs, ne renvoyez pas d'erreur. Ajustez plutôt le débit à la plage prise en charge par la voix.

  • voiceName

    string facultatif

    Nom de la voix à utiliser pour la synthèse.

  • volume

    numéro facultatif

    Volume d'élocution compris entre 0 et 1 inclus, 0 étant le plus bas et 1 le plus élevé, avec une valeur par défaut de 1.

VoiceGender

Chrome 54 ou version ultérieure Obsolète depuis Chrome 70

Le critère de sexe est obsolète et sera ignoré.

Enum

"male"

Méthodes

updateVoices()

Chrome 66 et versions ultérieures
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

Appelée par un moteur pour mettre à jour sa liste de voix. Cette liste remplace toutes les voix déclarées dans le fichier manifeste de cette extension.

Paramètres

  • voix

    Tableau d'objets tts.TtsVoice représentant les voix disponibles pour la synthèse vocale.

Événements

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

Facultatif: si un moteur accepte l'événement de pause, il doit mettre en pause l'énoncé en cours, le cas échéant, jusqu'à ce qu'il reçoive un événement de reprise ou d'arrêt. Notez qu'un événement d'arrêt doit également annuler l'état "Mis en pause".

Paramètres

  • rappel

    function

    Le paramètre callback se présente comme suit :

    ()=>void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

Facultatif: si un moteur accepte l'événement de mise en pause, il doit également accepter l'événement de reprise, afin de poursuivre l'énoncé de l'énoncé actuel, le cas échéant. Notez qu'un événement d'arrêt doit également annuler l'état "Mis en pause".

Paramètres

  • rappel

    function

    Le paramètre callback se présente comme suit :

    ()=>void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

Appelée lorsque l'utilisateur appelle tts.speak() et que l'une des voix du fichier manifeste de cette extension est la première à correspondre à l'objet d'options.

Paramètres

  • rappel

    function

    Le paramètre callback se présente comme suit :

    (utterance: string,options: SpeakOptions,sendTtsEvent: function)=>void

    • énoncé

      chaîne

    • options
    • sendTtsEvent

      function

      Le paramètre sendTtsEvent se présente comme suit :

      (event: tts.TtsEvent)=>void

      • event

        Événement du moteur de synthèse vocale indiquant l'état de cet énoncé.

onSpeakWithAudioStream

Chrome 92 et versions ultérieures
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Appelée lorsque l'utilisateur appelle tts.speak() et que l'une des voix du fichier manifeste de cette extension est la première à correspondre à l'objet d'options. À la différence de ttsEngine.onSpeak, dans la mesure où Chrome fournit des services de lecture audio et gère l'envoi des événements tts.

Paramètres

  • rappel

    function

    Le paramètre callback se présente comme suit :

    (utterance: string,options: SpeakOptions,audioStreamOptions: AudioStreamOptions,sendTtsAudio: function,sendError: function)=>void

    • énoncé

      chaîne

    • options
    • audioStreamOptions
    • sendTtsAudio

      function

      Le paramètre sendTtsAudio se présente comme suit :

      (audioBufferParams: AudioBuffer)=>void

      • audioBufferParams

        Paramètres contenant un tampon audio et les données associées.

    • sendError

      function

      Chrome 94 et versions ultérieures

      Le paramètre sendError se présente comme suit :

      (errorMessage?: string)=>void

      • errorMessage

        string facultatif

        Chaîne décrivant l'erreur.

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

Déclenché lorsqu'un appel est passé à tts.stop et que cette extension est peut-être en train de parler. Si une extension reçoit un appel à la fonction onStop et que la voix est déjà arrêtée, elle ne doit rien faire (et ne pas générer d'erreur). Si la voix est en pause, celle-ci devrait être annulée.

Paramètres

  • rappel

    function

    Le paramètre callback se présente comme suit :

    ()=>void