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 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 diffuser la voix, et renvoyer des événements à la fonction appelante pour signaler l'état.
Autorisations
ttsEngineConcepts et utilisation
Une extension peut s'enregistrer en tant que moteur de synthèse vocale. Il peut ainsi intercepter tout ou partie des appels à des 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 du contenu audio, y compris le streaming audio à partir d'un serveur, l'audio HTML5. Une extension peut même effectuer une autre action 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 TTS, une extension doit déclarer l'autorisation "ttsEngine", puis déclarer 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 enregistreraient 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 les rares cas où une seule voix peut gérer plusieurs langues, il est plus simple de lister deux voix distinctes et de les gérer en utilisant la même logique en interne. Toutefois, si vous souhaitez créer une voix qui gérera 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 informer le client de la progression de la synthèse vocale. Il est vivement recommandé de prendre en charge au moins le type d'événement 'end' pour indiquer la fin de la synthèse vocale. Sinon, Chrome ne peut pas planifier les énoncés en file d'attente.
Une fois chargée, une extension peut remplacer la liste des voix déclarées en appelant browser.ttsEngine.updateVoices. (Notez que les paramètres utilisés dans l'appel programmatique à updateVoices sont en camelCase, 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 que la méthode speak() reçoit :
'start': le moteur a commencé à prononcer l'énoncé.'word': une limite de mot a été atteinte. Utilisezevent.charIndexpour déterminer la position actuelle de la synthèse vocale.'sentence': une limite de phrase a été atteinte. Utilisezevent.charIndexpour déterminer la position actuelle de la voix.'marker': un repère SSML a été atteint. Utilisezevent.charIndexpour déterminer la position actuelle de la synthèse vocale.'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 prononcé. 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 à partir du fichier manifeste de votre extension en appelant tts.getVoices, à condition que vous ayez enregistré des écouteurs d'événements vocaux comme décrit ci-dessous.
Gérer les événements vocaux
Pour générer des énoncés vocaux à 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)
};
browser.ttsEngine.onSpeak.addListener(speakListener);
browser.ttsEngine.onStop.addListener(stopListener);
La décision d'envoyer ou non une requête de synthèse 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, une extension ne peut pas recevoir une requête de synthèse vocale et décider de manière dynamique de la traiter ou non.
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. Il doit avoir une longueur correspondant exactement à audioStreamOptions.bufferSize et être encodé en mono, à audioStreamOptions.sampleRate, et en PCM linéaire, flottant signé 32 bits, c'est-à-dire le type Float32Array en JavaScript.
-
charIndex
number facultatif
Index de caractère associé à ce tampon audio.
-
isLastBuffer
boolean facultatif
"True" si ce tampon audio est le dernier pour le texte énoncé.
AudioStreamOptions
Contient 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 d'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. Champ renseigné si l'installation de la langue a échoué.
-
installStatus
État de l'installation.
-
lang
chaîne
Chaîne de langue sous la forme "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 peuvent être utilisés, comme l'utilisation récente, pour déterminer quand désinstaller l'application.
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".
-
argumentaire
number facultatif
Hauteur de la voix comprise entre 0 et 2 inclus, 0 étant la plus basse et 2 la plus haute. La valeur 1.0 correspond à la hauteur par défaut de cette voix.
-
vitesse de réaction
number facultatif
Débit d'élocution par rapport au débit par défaut pour cette voix. La valeur par défaut est 1.0, ce qui correspond généralement à un débit 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. Lorsqu'une voix n'est pas compatible avec cette plage complète de débits, ne renvoyez pas d'erreur. Au lieu de cela, limitez le débit à la plage acceptée par 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, 0 étant le plus bas et 1 le plus élevé, avec une valeur par défaut de 1,0.
TtsClient
Identifiant du client demandant l'état.
Propriétés
-
id
chaîne
Client effectuant une demande de gestion de la langue. Pour une extension, il s'agit de l'ID d'extension unique. Pour les fonctionnalités Chrome, il s'agit du nom lisible par l'humain 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()
browser.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Appelé par un moteur lorsqu'une installation de langue est tentée et lorsqu'une langue est désinstallée. Il est également appelé en réponse à une demande 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 d'installation de la langue.
updateVoices()
browser.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
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.TtsVoicereprésentant les voix disponibles pour la synthèse vocale.
Événements
onInstallLanguageRequest
browser.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Déclenché lorsqu'un client TTS demande l'installation d'une nouvelle langue. Le moteur doit tenter 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
-
callback
fonction
Le paramètre
callbackse présente comme suit :(requestor: TtsClient, lang: string) => void
-
demandeur
-
lang
chaîne
-
onLanguageStatusRequest
browser.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Déclenché lorsqu'un client TTS demande l'état d'installation d'une langue.
Paramètres
-
callback
fonction
Le paramètre
callbackse présente comme suit :(requestor: TtsClient, lang: string) => void
-
demandeur
-
lang
chaîne
-
onPause
browser.ttsEngine.onPause.addListener(
callback: function,
)
Facultatif : si un moteur est compatible avec l'événement de mise en pause, il doit mettre en pause 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 pause.
Paramètres
-
callback
fonction
Le paramètre
callbackse présente comme suit :() => void
onResume
browser.ttsEngine.onResume.addListener(
callback: function,
)
Facultatif : si un moteur est compatible avec l'événement de mise en pause, il doit également être compatible avec l'événement de reprise, pour continuer à prononcer l'énoncé actuel, le cas échéant. Notez qu'un événement d'arrêt doit également effacer l'état de pause.
Paramètres
-
callback
fonction
Le paramètre
callbackse présente comme suit :() => void
onSpeak
browser.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
-
callback
fonction
Le paramètre
callbackse présente comme suit :(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
énoncé
chaîne
-
options
-
sendTtsEvent
fonction
Le paramètre
sendTtsEventse présente comme suit :(event: tts.TtsEvent) => void
-
événement
Événement du moteur de synthèse vocale indiquant l'état de cet énoncé.
-
-
onSpeakWithAudioStream
browser.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 sens que Chrome fournit des services de lecture audio et gère l'envoi des événements TTS.
Paramètres
-
callback
fonction
Le paramètre
callbackse 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
sendTtsAudiose présente comme suit :(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Paramètres contenant un tampon audio et les données associées.
-
-
sendError
fonction
Chrome 94+ browser.* depuis Chrome 148Le paramètre
sendErrorse présente comme suit :(errorMessage?: string) => void
-
errorMessage
chaîne facultatif
Chaîne décrivant l'erreur.
-
-
onStop
browser.ttsEngine.onStop.addListener(
callback: function,
)
Se déclenche lorsqu'un appel est effectué vers 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 (ne pas générer d'erreur). Si la synthèse vocale est en pause, cela doit annuler l'état de pause.
Paramètres
-
callback
fonction
Le paramètre
callbackse présente comme suit :() => void
onUninstallLanguageRequest
browser.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Se déclenche lorsqu'un client TTS indique qu'une langue n'est plus nécessaire.
Paramètres
-
callback
fonction
Le paramètre
callbackse présente comme suit :(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
demandeur
-
lang
chaîne
-
uninstallOptions
-