Description
Utiliser l'API chrome.tts
pour écouter la synthèse vocale. Consultez également l'API ttsEngine
associée, qui permet à une extension d'implémenter un moteur de synthèse vocale.
Chrome offre cette fonctionnalité sous Windows (avec SAPI 5), Mac OS X et ChromeOS grâce aux fonctionnalités de synthèse vocale fournies par le système d'exploitation. Sur toutes les plates-formes, l'utilisateur peut installer des extensions qui s'enregistrent en tant que moteurs de synthèse vocale.
Autorisations
tts
Concepts et utilisation
Générer la voix
Appelez le speak()
depuis votre extension pour parler. Exemple :
chrome.tts.speak('Hello, world.');
Pour arrêter de parler immédiatement, appelez simplement stop()
:
chrome.tts.stop();
Vous pouvez fournir des options qui contrôlent diverses propriétés de la voix, telles que sa vitesse, son ton, etc. Exemple :
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Il est également judicieux de spécifier la langue afin de choisir un synthétiseur prenant en charge cette langue (et le dialecte régional, le cas échéant).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Par défaut, chaque appel au speak()
interrompt les discussions en cours et parle immédiatement. Pour déterminer si un appel risque d'interrompre quelque chose, vous pouvez appeler isSpeaking()
. En outre, vous pouvez utiliser l'option enqueue
pour ajouter cet énoncé à une file d'attente d'énoncés qui seront prononcés à la fin de l'énoncé actuel.
chrome.tts.speak('Speak this first.');
chrome.tts.speak(
'Speak this next, when the first sentence is done.', {'enqueue': true});
Vous trouverez une description complète de toutes les options dans la section tts.speak()
. Tous les moteurs de synthèse vocale n'acceptent pas toutes les options.
Pour détecter les erreurs et vous assurer que vous appelez speak()
correctement, transmettez une fonction de rappel qui n'accepte aucun argument. Dans le rappel, vérifiez runtime.lastError
pour voir si des erreurs se sont produites.
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
Le rappel est renvoyé immédiatement, avant que le moteur ait commencé à générer des paroles. L'objectif du rappel est de vous alerter en cas d'erreurs de syntaxe dans votre utilisation de l'API de synthèse vocale, et non de détecter toutes les erreurs possibles qui pourraient se produire lors de la synthèse et de la sortie vocale. Pour détecter ces erreurs également, vous devez utiliser un écouteur d'événements, décrit dans la section suivante.
Écouter des événements
Pour obtenir plus d'informations en temps réel sur l'état de la voix synthétisée, transmettez un écouteur d'événements dans les options à speak()
, comme ceci:
chrome.tts.speak(
utterance,
{
onEvent: function(event) {
console.log('Event ' + event.type + ' at position ' + event.charIndex);
if (event.type == 'error') {
console.log('Error: ' + event.errorMessage);
}
}
},
callback
);
Chaque événement inclut un type d'événement, l'index de caractères de la voix actuelle par rapport à l'énoncé et, pour les événements d'erreur, un message d'erreur facultatif. Les types d'événements sont les suivants:
'start'
: le moteur a commencé à énoncer l'énoncé.'word'
: une limite de mot a été atteinte. Utilisezevent.charIndex
pour déterminer la position actuelle de la voix.'sentence'
: une limite de phrase a été atteinte. Utilisezevent.charIndex
pour déterminer la position actuelle de la voix.'marker'
: un repère SSML a été atteint. Utilisezevent.charIndex
pour déterminer la position actuelle de la voix.'end'
: le moteur a fini de prononcer l'énoncé.'interrupted'
: cet énoncé a été interrompu par un autre appel àspeak()
oustop()
et n'a pas abouti.'cancelled'
: cet énoncé a été mis en file d'attente, puis annulé par un autre appel àspeak()
oustop()
et n'a jamais commencé à parler.'error'
: une erreur spécifique au moteur s'est produite et cet énoncé ne peut pas être énoncé. Pour en savoir plus, consultezevent.errorMessage
.
Quatre types d'événements ('end'
, 'interrupted'
, 'cancelled'
et 'error'
) sont finalisés. Une fois que l'un de ces événements a été reçu, cet énoncé n'est plus parlé et aucun nouvel énoncé ne sera reçu.
Certaines voix ne sont pas compatibles avec tous les types d'événements, et d'autres n'en envoient aucun. Si vous ne souhaitez utiliser une voix que si elle envoie certains événements, transmettez les événements dont vous avez besoin dans le membre requiredEventTypes
de l'objet d'options, ou utilisez getVoices()
pour choisir une voix répondant à vos besoins. Les deux sont décrits ci-dessous.
Balisage SSML
Les énoncés utilisés dans cette API peuvent inclure un balisage à l'aide du langage de balisage de synthèse vocale (SSML). Si vous utilisez SSML, le premier argument de speak()
doit être un document SSML complet avec un en-tête XML et une balise <speak>
de premier niveau, et non un fragment de document.
Exemple :
chrome.tts.speak(
'<?xml version="1.0"?>' +
'<speak>' +
' The <emphasis>second</emphasis> ' +
' word of this sentence was emphasized.' +
'</speak>'
);
Tous les moteurs de synthèse vocale n'acceptent pas toutes les balises SSML, et certains ne sont pas forcément compatibles avec le SSML. Toutefois, tous les moteurs doivent ignorer les balises SSML non compatibles et doivent continuer à énoncer le texte sous-jacent.
Sélectionner une voix
Par défaut, Chrome choisit la voix la plus appropriée pour chaque énoncé que vous souhaitez énoncer, en fonction de la langue. Sur la plupart des systèmes Windows, Mac OS X et ChromeOS, la synthèse vocale fournie par le système d'exploitation doit pouvoir énoncer tout type de texte dans au moins une langue. Certains utilisateurs disposent toutefois de diverses voix provenant de leur système d'exploitation et de moteurs de synthèse vocale mis en œuvre par d'autres extensions Chrome. Dans ce cas, vous pouvez implémenter du code personnalisé pour choisir la voix appropriée ou pour présenter à l'utilisateur une liste de choix.
Pour obtenir la liste de toutes les voix, appelez getVoices()
et transmettez-lui une fonction qui reçoit un tableau d'objets TtsVoice
en tant qu'argument:
chrome.tts.getVoices(
function(voices) {
for (var i = 0; i < voices.length; i++) {
console.log('Voice ' + i + ':');
console.log(' name: ' + voices[i].voiceName);
console.log(' lang: ' + voices[i].lang);
console.log(' extension id: ' + voices[i].extensionId);
console.log(' event types: ' + voices[i].eventTypes);
}
}
);
Types
EventType
Enum
"start"
"end"
"sentence"
"cancelled"
"error"
"pause"
TtsEvent
Événement provenant du moteur de synthèse vocale pour communiquer le statut d'un énoncé.
Propriétés
-
charIndex
numéro facultatif
Index du caractère actuel de l'énoncé. Pour les événements de type mot, l'événement se déclenche à la fin d'un mot et avant le début du suivant.
charIndex
représente un point dans le texte au début du mot suivant à énoncer. -
errorMessage
string facultatif
Description de l'erreur, si le type d'événement est
error
. -
length
numéro facultatif
Chrome 74 et versions ultérieuresLongueur de la partie suivante de l'énoncé. Par exemple, dans un événement
word
, il s'agit de la longueur du mot qui sera prononcé ensuite. Si ce n'est pas le cas, elle est définie sur -1. -
Type
Le type peut être
start
dès que la voix commence,word
lorsqu'une limite de mot est atteinte,sentence
lorsqu'une limite de phrase est atteinte,marker
lorsqu'un élément de marque SSML est atteint,end
lorsque la fin de l'énoncé est atteinte,interrupted
lorsque l'énoncé est arrêté ou interrompu avant la fin,cancelled
lorsqu'il est supprimé de la file d'attente avant d'être synthétisé ouerror
lorsqu'une autre erreur se produit. Lorsque vous suspendez un énoncé, un événementpause
est déclenché si un énoncé particulier est mis en pause au milieu, etresume
si un énoncé reprend la parole. Notez que les événements de pause et de reprise peuvent ne pas se déclencher si les paroles sont mises en pause entre les énoncés.
TtsOptions
Options vocales pour le moteur de synthèse vocale.
Propriétés
-
desiredEventTypes
string[] facultatif
Types d'événements de synthèse vocale que vous souhaitez écouter. Si ce champ n'est pas renseigné, tous les types d'événements peuvent être envoyés.
-
mettre en file d'attente
Booléen facultatif
Si la valeur est "true", cet énoncé est mis en file d'attente si la synthèse vocale est déjà en cours. Si la valeur est "false" (valeur par défaut), toutes les conversations en cours sont interrompues et la file d'attente est vide avant d'énoncer le nouvel énoncé.
-
extensionId
string facultatif
ID d'extension du moteur de synthèse vocale à utiliser, s'il est connu.
-
gender (genre)
VoiceGender facultatif
Obsolète depuis Chrome 77Le 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 d'une 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. Les valeurs inférieures à 0,1 ou supérieures à 10,0 sont strictement interdites, mais de nombreuses voix limitent davantage les débits minimal et maximal. Par exemple, il est possible qu'une voix spécifique ne parle pas plus de trois fois la normale, même si vous spécifiez une valeur supérieure à 3,0.
-
requiredEventTypes
string[] facultatif
Types d'événements de synthèse vocale que la voix doit accepter.
-
voiceName
string facultatif
Nom de la voix à utiliser pour la synthèse. Si ce champ est vide, toute voix disponible est utilisée.
-
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,0.
-
onEvent
vide facultatif
Cette fonction est appelée avec des événements qui se produisent au cours du processus de prononciation de l'énoncé.
La fonction
onEvent
se présente comme suit :(event: TtsEvent) => {...}
-
event
Événement de mise à jour du moteur de synthèse vocale indiquant l'état de cet énoncé.
-
TtsVoice
Description d'une voix disponible pour la synthèse vocale.
Propriétés
-
eventTypes
EventType[] facultatif
Tous les types d'événements de rappel que cette voix peut envoyer.
-
extensionId
string facultatif
ID de l'extension fournissant cette voix.
-
gender (genre)
VoiceGender facultatif
Obsolète depuis Chrome 70Le critère de sexe est obsolète et sera ignoré.
Genre de cette voix.
-
lang
string facultatif
Langue que cette voix prend en charge, au format langue-région. Exemples: "en", "en-US", "en-GB", "zh-CN".
-
télécommande
Booléen facultatif
Si la valeur est "true", le moteur de synthèse est une ressource réseau distante. La latence peut être plus élevée, ce qui peut entraîner des coûts liés à la bande passante.
-
voiceName
string facultatif
Nom de la voix.
VoiceGender
Le critère de sexe est obsolète et est ignoré.
Enum
"male"
Méthodes
getVoices()
chrome.tts.getVoices(
callback?: function,
)
Récupère un tableau de toutes les voix disponibles.
Paramètres
-
rappel
fonction facultative
Le paramètre
callback
se présente comme suit :(voices: TtsVoice[]) => void
-
voix
TtsVoice[]
Tableau d'objets
tts.TtsVoice
représentant les voix disponibles pour la synthèse vocale.
-
Renvoie
-
Promise<TtsVoice[]>
Chrome 101 et versions ultérieuresLes promesses sont compatibles avec Manifest V3 et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse est résolue avec le même type que celui transmis au rappel.
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
Vérifie si le moteur parle. Sous Mac OS X, le résultat est vrai chaque fois que le moteur de synthèse vocale du système parle, même si la voix n'a pas été lancée par Chrome.
Paramètres
-
rappel
fonction facultative
Le paramètre
callback
se présente comme suit :(speaking: boolean) => void
-
parler
boolean
"True" en cas d'élocution, "false" dans le cas contraire.
-
Renvoie
-
Promise<boolean>
Chrome 101 et versions ultérieuresLes promesses sont compatibles avec Manifest V3 et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse est résolue avec le même type que celui transmis au rappel.
pause()
chrome.tts.pause()
Met en pause la synthèse vocale, potentiellement au milieu d'un énoncé. Si vous appelez pour reprendre ou arrêter, la parole reprendra.
resume()
chrome.tts.resume()
Si la voix a été mise en pause, elle reprend là où elle s'était arrêtée.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
Énonce le texte à l'aide d'un moteur de synthèse vocale.
Paramètres
-
énoncé
chaîne
Texte à prononcer, soit en texte brut, soit sous la forme d'un document SSML complet et bien structuré. Les moteurs de reconnaissance vocale qui ne sont pas compatibles avec SSML suppriment les balises et énoncent le texte. La longueur maximale du texte est de 32 768 caractères.
-
options
TtsOptions facultatif
Options vocales.
-
rappel
fonction facultative
Le paramètre
callback
se présente comme suit :() => void
Renvoie
-
Promise<void>
Chrome 101 et versions ultérieuresLes promesses sont compatibles avec Manifest V3 et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse est résolue avec le même type que celui transmis au rappel.
stop()
chrome.tts.stop()
Arrête toute voix en cours et vide la file d'attente des énoncés en attente. De plus, si la voix a été mise en pause, elle sera réactivée lors du prochain appel vocal.
Événements
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Appelée lorsque la liste de tts.TtsVoice
qui serait renvoyée par getVoices a changé.
Paramètres
-
rappel
function
Le paramètre
callback
se présente comme suit :() => void