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 recevra des événements contenant une expression à prononcer et d'autres paramètres lorsqu'une extension ou une application Chrome utilisera l'API tts
pour générer de la parole. Votre extension peut ensuite utiliser n'importe quelle technologie Web disponible pour synthétiser et générer la parole, puis renvoyer des événements à la fonction appelante pour signaler l'état.
Autorisations
ttsEngine
Concepts et utilisation
Une extension peut s'enregistrer en tant que moteur de synthèse vocale. Il peut ainsi intercepter tout ou partie des appels de fonctions telles que tts.speak()
et tts.stop()
, et fournir une autre implémentation.
Les extensions peuvent utiliser n'importe quelle technologie Web disponible pour fournir de la parole, y compris l'audio en streaming à partir d'un serveur et l'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 en tant que messages de journal à un serveur distant.
Pour implémenter un moteur TTS, 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. Le nom doit être suffisamment descriptif pour identifier le nom de la voix et le moteur utilisé. Dans le cas peu probable où deux extensions enregistrent des voix portant le même nom, un client peut spécifier l'ID de l'extension qui doit effectuer la synthèse.
Le paramètre lang
est facultatif, mais vivement recommandé. Dans la plupart des cas, une voix ne peut synthétiser la parole que dans une seule langue. Lorsqu'un moteur est compatible avec plusieurs langues, il peut facilement enregistrer une voix distincte pour chaque langue. Dans de rares cas où une seule voix peut gérer plusieurs langues, il est plus simple de simplement lister deux voix distinctes et de les gérer en interne à l'aide de la même logique. Toutefois, si vous souhaitez créer une voix qui gérera les énoncés dans n'importe quelle langue, laissez de côté le paramètre lang
dans le fichier manifeste de votre extension.
Enfin, le paramètre event_types
est obligatoire si le moteur peut envoyer des événements pour informer le client de la progression de la synthèse vocale. Il est fortement recommandé de prendre en charge au minimum le type d'événement 'end'
pour indiquer quand la parole est terminée, sinon Chrome ne peut pas planifier les énoncés mis 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 à updateVoices
sont en Camel Case: par exemple, voiceName
, contrairement au fichier manifeste qui utilise voice_name
.)
Les types d'événements que vous pouvez envoyer correspondent aux types d'événements reçus par la méthode speak()
:
'start'
: le moteur a commencé à énoncer la requête.'word'
: une limite de mot a été atteinte. Utilisezevent.charIndex
pour déterminer la position de la parole actuelle.'sentence'
: une limite de phrase a été atteinte. Utilisezevent.charIndex
pour déterminer la position actuelle de la parole.'marker'
: un repère SSML a été atteint. Utilisezevent.charIndex
pour déterminer la position de la parole actuelle.'end'
: le moteur a terminé de prononcer l'énoncé.'error'
: une erreur spécifique au moteur s'est produite et cette expression ne peut pas être prononcée. Transmettez plus d'informations dansevent.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 du fichier manifeste de votre extension en appelant tts.getVoices
, à condition que vous ayez enregistré des écouteurs d'événements de synthèse vocale comme décrit ci-dessous.
Gérer les événements vocaux
Pour générer de la parole à 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 la présence d'écouteurs enregistrés pour onSpeak
et onStop
. En d'autres termes, il n'est pas possible pour une extension de recevoir une requête vocale et de décider de manière dynamique de la gérer.
Types
AudioBuffer
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. Sa longueur doit être exactement audioStreamOptions.bufferSize et encodée en mono, à audioStreamOptions.sampleRate, et en PCM linéaire, en virgule flottante 32 bits signée, c'est-à-dire le type Float32Array en JavaScript.
-
charIndex
number facultatif
Indice de caractère associé à ce tampon audio.
-
isLastBuffer
booléen facultatif
"True" si ce tampon audio est le dernier pour le texte lu.
AudioStreamOptions
Indique le format de flux audio attendu par un moteur.
Propriétés
-
bufferSize
Nombre
Nombre d'échantillons dans un tampon audio.
-
sampleRate
Nombre
Taux d'échantillonnage attendu dans un tampon audio.
LanguageInstallStatus
État de l'installation d'une voix.
Énumération
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
État d'installation d'une langue.
Propriétés
-
erreur
chaîne facultatif
Détails sur les échecs d'installation. Peut être renseigné si l'installation de la langue a échoué.
-
installStatus
État de l'installation.
-
lang
chaîne
Chaîne de langue au format code de langue-code de région, où la région peut être omise. Exemples : en, en-AU, zh-CH.
LanguageUninstallOptions
Options de désinstallation d'une langue donnée.
Propriétés
-
uninstallImmediately
booléen
"True" si le client TTS souhaite que la langue soit immédiatement désinstallée. Le moteur peut choisir de désinstaller ou non la langue, et à quel moment, en fonction de ce paramètre et des informations sur le demandeur. Si la valeur est "false", d'autres critères, tels que l'utilisation récente, peuvent être utilisés pour déterminer le moment de la désinstallation.
SpeakOptions
Options spécifiées pour la méthode tts.speak().
Propriétés
-
gender (genre)
VoiceGender facultatif
Obsolète depuis Chrome 92Le genre est obsolète et sera ignoré.
Genre de la voix pour la synthèse vocale.
-
lang
chaîne facultatif
Langue à utiliser pour la synthèse, au format langue-région. Exemples: "en", "en-US", "en-GB", "zh-CN".
-
suggestion
number facultatif
Ton de la voix compris entre 0 et 2 (inclus), où 0 correspond à la tonalité la plus basse et 2 à la plus élevée. 1,0 correspond à la hauteur par défaut de cette voix.
-
vitesse de réaction
number facultatif
Débit vocal par rapport au débit par défaut de cette voix. La vitesse par défaut est de 1,0, soit environ 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 garantie comprise entre 0,1 et 10,0 inclus. Lorsqu'une voix n'est pas compatible avec cette plage complète de tarifs, ne renvoyez pas d'erreur. Limitez plutôt le débit à la plage compatible avec la voix.
-
voiceName
chaîne facultatif
Nom de la voix à utiliser pour la synthèse.
-
volume
number facultatif
Volume de la voix compris entre 0 et 1 (inclus), où 0 correspond au volume le plus faible et 1 au volume le plus élevé.La valeur par défaut est 1, 0.
TtsClient
Identifiant du client qui demande l'état.
Propriétés
-
id
chaîne
Client effectuant une requête de gestion des langues. Pour une extension, il s'agit de l'ID unique de l'extension. Pour les fonctionnalités Chrome, il s'agit du nom lisible de la fonctionnalité.
-
source
Type de demandeur.
TtsClientSource
Type de demandeur.
Énumération
"chromefeature"
"extension"
VoiceGender
Le genre est obsolète et sera ignoré.
Énumération
"male"
"female"
Méthodes
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
)
Appelé par un moteur lors d'une tentative d'installation d'une langue et lors d'une désinstallation d'une langue. Appelé également en réponse à une requête d'état d'un client. Lorsqu'une voix est installée ou désinstallée, le moteur doit également appeler ttsEngine.updateVoices pour l'enregistrer.
Paramètres
-
état
État de l'installation de la langue.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Appelé 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
TtsVoice[]
Tableau d'objets
tts.TtsVoice
représentant les voix disponibles pour la synthèse vocale.
Événements
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Déclenché lorsqu'un client TTS demande à installer une nouvelle langue. Le moteur doit essayer de télécharger et d'installer la langue, puis appeler ttsEngine.updateLanguage avec le résultat. En cas de réussite, le moteur doit également appeler ttsEngine.updateVoices pour enregistrer les voix nouvellement disponibles.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(requestor: TtsClient, lang: string) => void
-
demandeur
-
lang
chaîne
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Généré lorsqu'un client TTS demande l'état d'installation d'une langue.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(requestor: TtsClient, lang: string) => void
-
demandeur
-
lang
chaîne
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Facultatif: si un moteur prend en charge l'événement de pause, il doit suspendre l'énoncé en cours de lecture, 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 effacer l'état de mise en veille.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Facultatif: Si un moteur prend en charge l'événement de pause, il doit également prendre en charge l'événement de reprise pour continuer à prononcer l'énoncé en cours, le cas échéant. Notez qu'un événement d'arrêt doit également effacer l'état de mise en veille.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Appelé 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
fonction
Le paramètre
callback
se présente comme suit :(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
énoncé
chaîne
-
options
-
sendTtsEvent
fonction
Le paramètre
sendTtsEvent
se présente comme suit :(event: tts.TtsEvent) => void
-
événement
Événement du moteur de synthèse vocale indiquant l'état de cette expression.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Appelé 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. Diffère de ttsEngine.onSpeak en ce que Chrome fournit des services de lecture audio et gère l'envoi des événements tts.
Paramètres
-
rappel
fonction
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
fonction
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
fonction
Chrome 94 ou version ultérieureLe paramètre
sendError
se présente comme suit :(errorMessage?: string) => void
-
errorMessage
chaîne facultatif
Chaîne décrivant l'erreur.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Déclenché lorsqu'un appel est effectué à tts.stop et que cette extension est peut-être en train de parler. Si une extension reçoit un appel à onStop et que la synthèse vocale est déjà arrêtée, elle ne doit rien faire (pas d'erreur). Si la parole est mise en pause, cette action devrait annuler la mise en pause.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Déclenché lorsqu'un client TTS indique qu'une langue n'est plus nécessaire.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
demandeur
-
lang
chaîne
-
uninstallOptions
-