Beschrijving
Gebruik de chrome.tts
API om gesynthetiseerde tekst-naar-spraak (TTS) af te spelen. Zie ook de gerelateerde ttsEngine
API, waarmee een extensie een spraakengine kan implementeren.
Chrome biedt deze mogelijkheid op Windows (met SAPI 5), Mac OS X en Chrome OS, met behulp van de spraaksynthesemogelijkheden van het besturingssysteem. Op alle platforms kan de gebruiker extensies installeren die zichzelf registreren als alternatieve spraakengines.
Machtigingen
tts
Begrippen en gebruik
Spraak genereren
Roep speak()
aan vanuit uw extensie om te spreken. Bijvoorbeeld:
chrome.tts.speak('Hello, world.');
Om onmiddellijk te stoppen met spreken, roept u gewoon stop()
aan:
chrome.tts.stop();
U kunt opties bieden waarmee u verschillende eigenschappen van de spraak kunt regelen, zoals de snelheid, toonhoogte en meer. Bijvoorbeeld:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Het is ook een goed idee om de taal te specificeren, zodat er een synthesizer wordt gekozen die die taal ondersteunt (en eventueel een regionaal dialect).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Standaard onderbreekt elke aanroep van speak()
alle lopende spraak en spreekt direct. Om te bepalen of een aanroep iets zou onderbreken, kunt u isSpeaking()
aanroepen. Daarnaast kunt u de optie enqueue
gebruiken om deze uiting toe te voegen aan een wachtrij met uitingen die worden uitgesproken wanneer de huidige uiting is afgelopen.
chrome.tts.speak('Speak this first.'); chrome.tts.speak( 'Speak this next, when the first sentence is done.', {'enqueue': true});
Een volledige beschrijving van alle opties is te vinden onder tts.speak()
. Niet alle spraakengines ondersteunen alle opties.
Om fouten op te sporen en ervoor te zorgen dat je speak()
correct aanroept, geef je een callbackfunctie door die geen argumenten accepteert. Controleer binnen de callback runtime.lastError
om te zien of er fouten zijn opgetreden.
chrome.tts.speak( utterance, options, function() { if (chrome.runtime.lastError) { console.log('Error: ' + chrome.runtime.lastError.message); } } );
De callback retourneert direct, voordat de engine spraak begint te genereren. Het doel van de callback is om u te waarschuwen voor syntaxisfouten in uw gebruik van de TTS API, niet om alle mogelijke fouten op te sporen die kunnen optreden tijdens het synthetiseren en uitvoeren van spraak. Om ook deze fouten op te sporen, moet u een event listener gebruiken, die in de volgende sectie wordt beschreven.
Luister naar evenementen
Om meer realtime informatie over de status van gesynthetiseerde spraak te krijgen, kunt u een gebeurtenislistener in de opties van speak()
doorgeven, zoals deze:
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 );
Elke gebeurtenis bevat een gebeurtenistype, de tekenindex van de huidige spraak ten opzichte van de uiting en, voor foutgebeurtenissen, een optioneel foutbericht. De gebeurtenistypen zijn:
-
'start'
: De engine is begonnen met het uitspreken van de uiting. -
'word'
: Er is een woordgrens bereikt. Gebruikevent.charIndex
om de huidige spraakpositie te bepalen. -
'sentence'
: Er is een zinsgrens bereikt. Gebruikevent.charIndex
om de huidige spreekpositie te bepalen. -
'marker'
: Er is een SSML-markering bereikt. Gebruikevent.charIndex
om de huidige spraakpositie te bepalen. -
'end'
: De engine is klaar met het uitspreken van de uiting. -
'interrupted'
: Deze uiting werd onderbroken door een andere aanroep vanspeak()
ofstop()
en is niet voltooid. -
'cancelled'
: Deze uiting werd in de wachtrij geplaatst, maar vervolgens geannuleerd door een andere aanroep vanspeak()
ofstop()
en is nooit meer begonnen met spreken. -
'error'
: Er is een engine-specifieke fout opgetreden en deze uiting kan niet worden uitgesproken. Raadpleegevent.errorMessage
voor meer informatie.
Vier van de gebeurtenistypen – 'end'
, 'interrupted'
, 'cancelled'
en 'error'
zijn definitief . Nadat een van deze gebeurtenissen is ontvangen, wordt deze uiting niet meer uitgesproken en worden er geen nieuwe gebeurtenissen van deze uiting meer ontvangen.
Sommige stemmen ondersteunen mogelijk niet alle gebeurtenistypen en sommige stemmen verzenden mogelijk helemaal geen gebeurtenissen. Als u een stem alleen wilt gebruiken als deze bepaalde gebeurtenissen verzendt, geeft u de gewenste gebeurtenissen door aan het lid requiredEventTypes
van het options-object of gebruikt u getVoices()
om een stem te kiezen die aan uw vereisten voldoet. Beide worden hieronder beschreven.
SSML-markering
Uitingen die in deze API worden gebruikt, kunnen markup bevatten met behulp van de Speech Synthesis Markup Language (SSML) . Als u SSML gebruikt, moet het eerste argument van speak()
een volledig SSML-document zijn met een XML-header en een <speak>
-tag op het hoogste niveau, en geen documentfragment.
Bijvoorbeeld:
chrome.tts.speak( '<?xml version="1.0"?>' + '<speak>' + ' The <emphasis>second</emphasis> ' + ' word of this sentence was emphasized.' + '</speak>' );
Niet alle spraakengines ondersteunen alle SSML-tags en sommige ondersteunen SSML zelfs helemaal niet. Maar alle engines moeten SSML negeren die ze niet ondersteunen en toch de onderliggende tekst uitspreken.
Kies een stem
Standaard kiest Chrome de meest geschikte stem voor elke uiting die u wilt uitspreken, op basis van de taal. Op de meeste Windows-, Mac OS X- en ChromeOS-systemen zou de spraaksynthese van het besturingssysteem elke tekst in ten minste één taal moeten kunnen uitspreken. Sommige gebruikers hebben echter mogelijk verschillende stemmen beschikbaar, zowel via hun besturingssysteem als via spraakengines die door andere Chrome-extensies zijn geïmplementeerd. In die gevallen kunt u aangepaste code implementeren om de juiste stem te kiezen of de gebruiker een lijst met keuzemogelijkheden te tonen.
Om een lijst met alle stemmen te krijgen, roept u getVoices()
aan en geeft u er een functie aan door die een reeks TtsVoice
objecten als argument ontvangt:
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); } } );
Typen
EventType
Enum
"begin" "einde" "woord" "zin" "marker" "onderbroken" "geannuleerd" "fout" "pauze" "cv"
TtsEvent
Een gebeurtenis van de TTS-engine om de status van een uiting te communiceren.
Eigenschappen
- tekenindex
nummer optioneel
De index van het huidige teken in de uiting. Bij woordgebeurtenissen wordt de gebeurtenis geactiveerd aan het einde van een woord en vóór het begin van het volgende. De
charIndex
vertegenwoordigt een punt in de tekst aan het begin van het volgende woord dat wordt uitgesproken. - foutbericht
string optioneel
De foutbeschrijving, als het gebeurtenistype
error
is. - lengte
nummer optioneel
Chroom 74+De lengte van het volgende deel van de uiting. Bijvoorbeeld, in een
word
is dit de lengte van het woord dat als volgende wordt uitgesproken. Deze wordt op -1 gezet als de spraakengine deze waarde niet heeft ingesteld. - type
Het type kan
start
zijn zodra de spraak is gestart,word
wanneer een woordgrens is bereikt,sentence
wanneer een zinsgrens is bereikt,marker
wanneer een SSML-markeerelement is bereikt,end
wanneer het einde van de uiting is bereikt,interrupted
wanneer de uiting wordt gestopt of onderbroken voordat het einde is bereikt,cancelled
wanneer deze uit de wachtrij wordt verwijderd voordat deze is gesynthetiseerd, oferror
wanneer er een andere fout optreedt. Bij het pauzeren van spraak wordt eenpause
-gebeurtenis geactiveerd als een bepaalde uiting middenin wordt gepauzeerd, enresume
als een uiting de spraak hervat. Let op: de 'pause'- en 'resume'-gebeurtenissen worden mogelijk niet geactiveerd als de spraak tussen uitingen wordt gepauzeerd.
TtsOptions
De spraakopties voor de TTS-engine.
Eigenschappen
- gewensteEventTypes
string[] optioneel
De TTS-gebeurtenistypen waarnaar u wilt luisteren. Indien deze ontbreken, kunnen alle gebeurtenistypen worden verzonden.
- in de wachtrij plaatsen
boolean optioneel
Indien true, wordt deze uiting in de wachtrij geplaatst als TTS al bezig is. Indien false (standaard), wordt alle huidige spraak onderbroken en wordt de wachtrij leeggemaakt voordat deze nieuwe uiting wordt uitgesproken.
- extensie-ID
string optioneel
De extensie-ID van de spraakengine die moet worden gebruikt, indien bekend.
- geslacht
VoiceGender optioneel
Verouderd sinds Chrome 77Geslacht is niet toegestaan en wordt genegeerd.
Geslacht van de stem voor synthetische spraak.
- lang
string optioneel
De taal die voor synthese gebruikt moet worden, in de vorm taal - regio . Voorbeelden: 'en', 'en-US', 'en-GB', 'zh-CN'.
- toonhoogte
nummer optioneel
Spreektoonhoogte tussen 0 en 2, waarbij 0 de laagste en 2 de hoogste toonhoogte is. 1,0 komt overeen met de standaardtoonhoogte van een stem.
- tarief
nummer optioneel
Spreeksnelheid ten opzichte van de standaardsnelheid voor deze stem. 1,0 is de standaardsnelheid, normaal gesproken rond de 180 tot 220 woorden per minuut. 2,0 is twee keer zo snel en 0,5 is half zo snel. Waarden onder 0,1 of boven 10,0 zijn absoluut niet toegestaan, maar veel stemmen beperken de minimum- en maximumsnelheid verder. Zo spreekt een bepaalde stem mogelijk niet sneller dan 3 keer de normale snelheid, zelfs niet als u een waarde hoger dan 3,0 opgeeft.
- vereiste gebeurtenistypen
string[] optioneel
De TTS-gebeurtenistypen die de stem moet ondersteunen.
- stemNaam
string optioneel
De naam van de stem die voor synthese wordt gebruikt. Indien leeg, wordt elke beschikbare stem gebruikt.
- volume
nummer optioneel
Spreekvolume tussen 0 en 1 (inclusief), waarbij 0 het laagst en 1 het hoogst is, met een standaardwaarde van 1,0.
- opEvenement
leeg optioneel
Deze functie wordt aangeroepen met gebeurtenissen die plaatsvinden tijdens het uitspreken van de uiting.
De
onEvent
-functie ziet er als volgt uit:(event: TtsEvent) => {...}
- evenement
De updategebeurtenis van de tekst-naar-spraak-engine die de status van deze uiting aangeeft.
TtsVoice
Een beschrijving van een stem die beschikbaar is voor spraaksynthese.
Eigenschappen
- gebeurtenistypen
EventType [] optioneel
Alle callbackgebeurtenistypen die deze stem kan verzenden.
- extensie-ID
string optioneel
De ID van de extensie die deze stem levert.
- geslacht
VoiceGender optioneel
Verouderd sinds Chrome 70Geslacht is niet toegestaan en wordt genegeerd.
Het geslacht van deze stem.
- lang
string optioneel
De taal die deze stem ondersteunt, in de vorm taal - regio . Voorbeelden: 'en', 'en-US', 'en-GB', 'zh-CN'.
- op afstand
boolean optioneel
Indien dit het geval is, is de synthese-engine een externe netwerkbron. Dit kan een hogere latentie en bandbreedtekosten met zich meebrengen.
- stemNaam
string optioneel
De naam van de stem.
VoiceGender
Geslacht is niet relevant en wordt genegeerd.
Enum
"mannelijk" "vrouwelijk"
Methoden
getVoices()
chrome.tts.getVoices(): Promise<TtsVoice[]>
Haalt een reeks op van alle beschikbare stemmen.
Retourneren
Belofte< TtsVoice []>
Chroom 101+
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
Controleert of de engine momenteel spreekt. Op Mac OS X is het resultaat waar wanneer de spraakengine van het systeem spreekt, zelfs als de spraak niet door Chrome is geïnitieerd.
Retourneren
Belofte<boolean>
Chroom 101+
pause()
chrome.tts.pause(): void
Pauzeert spraaksynthese, mogelijk midden in een uiting. Een oproep om te hervatten of te stoppen hervat de spraaksynthese.
resume()
chrome.tts.resume(): void
Als de spraak is gepauzeerd, wordt de spraak hervat waar deze was gebleven.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
Spreekt tekst uit met behulp van een tekst-naar-spraak-engine.
Parameters
- uiting
snaar
De uit te spreken tekst, hetzij platte tekst of een volledig, correct geformuleerd SSML-document. Spraakengines die SSML niet ondersteunen, verwijderen de tags en spreken de tekst uit. De maximale lengte van de tekst is 32.768 tekens.
- opties
TtsOptions optioneel
De spraakopties.
Retourneren
Belofte<leegte>
Chroom 101+
stop()
chrome.tts.stop(): void
Stopt alle huidige spraak en verwijdert alle uitingen uit de wachtrij. Bovendien wordt een eventueel onderbroken spraak nu hervat voor het volgende gesprek.
Evenementen
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Wordt aangeroepen wanneer de lijst met tts.TtsVoice
die door getVoices wordt geretourneerd, is gewijzigd.
Parameters
- terugbellen
functie
De
callback
ziet er als volgt uit:() => void