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.
Toestemmingen
ttsOverzicht
Chrome biedt native ondersteuning voor spraak op Windows (met behulp van SAPI 5), Mac OS X en ChromeOS, door gebruik te maken van de spraaksynthesemogelijkheden van het besturingssysteem. Op alle platforms kan de gebruiker extensies installeren die zich registreren als alternatieve spraakengines.
Spraak genereren
Roep de speak() aan vanuit uw toestel om te spreken. Bijvoorbeeld:
chrome.tts.speak('Hello, world.');
Om direct te stoppen met spreken, roep je gewoon stop() aan:
chrome.tts.stop();
Je kunt opties opgeven waarmee je 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 raadzaam om de taal te specificeren, zodat een synthesizer wordt gekozen die die taal (en eventueel een regionaal dialect) ondersteunt.
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Standaard onderbreekt elke aanroep van speak() een 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 zodra de huidige uiting is voltooid.
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 in het onderstaande tts.speak . Niet alle spraakengines ondersteunen alle opties.
Om fouten op te sporen en ervoor te zorgen dat je speak() -functie correct aanroept, geef je een callbackfunctie mee die geen argumenten accepteert. Controleer binnen de callbackfunctie 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 attenderen op syntaxfouten in uw gebruik van de TTS API, niet om alle mogelijke fouten op te vangen die zich kunnen voordoen tijdens het synthetiseren en uitvoeren van spraak. Om ook deze fouten op te vangen, moet u een gebeurtenislistener gebruiken, zoals hieronder beschreven.
Luisteren naar evenementen
Om meer realtime informatie te krijgen over de status van de gesynthetiseerde spraak, kunt u een gebeurtenislistener doorgeven in de opties van de functie speak() , zoals dit:
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
);
Each event includes an event type, the character index of the current speech relative to the utterance, and for error events, an optional error message. The event types are:
-
'start': De motor is begonnen met het uitspreken van de zin. -
'word': Een woordgrens is bereikt. Gebruikevent.charIndexom de huidige spraakpositie te bepalen. -
'sentence': Er is een zinsgrens bereikt. Gebruikevent.charIndexom de huidige spraakpositie te bepalen. -
'marker': Er is een SSML-marker bereikt. Gebruikevent.charIndexom de huidige spraakpositie te bepalen. -
'end': De motor heeft zijn uitspraak beëindigd. -
'interrupted': Deze uiting werd onderbroken door een andere aanroep vanspeak()ofstop()en werd niet voltooid. -
'cancelled': Deze uiting werd in de wachtrij geplaatst, maar vervolgens geannuleerd door een andere aanroep vanspeak()ofstop()en is nooit begonnen met spreken. -
'error': Er is een enginespecifieke fout opgetreden en deze uiting kan niet worden uitgesproken. Raadpleegevent.errorMessagevoor meer informatie.
Vier van de gebeurtenistypen — 'end' , 'interrupted' , 'cancelled' en 'error' zijn definitief . Nadat een van deze gebeurtenissen is ontvangen, zal deze uiting niet langer spreken en zullen er geen nieuwe gebeurtenissen van deze uiting meer worden 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, kunt u de gewenste gebeurtenissen doorgeven in het lid requiredEventTypes van het options-object, of getVoices() gebruiken om een stem te kiezen die aan uw vereisten voldoet. Beide methoden worden hieronder beschreven.
SSML-opmaak
De in deze API gebruikte spraakfragmenten kunnen opmaak bevatten met behulp van de Speech Synthesis Markup Language (SSML) . Als u SSML gebruikt, moet het eerste argument voor 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 mogelijk helemaal niet, maar alle engines zijn verplicht om SSML-tags die ze niet ondersteunen te negeren en de onderliggende tekst toch voor te lezen.
Een stem kiezen
Standaard kiest Chrome de meest geschikte stem voor elke zin die je wilt uitspreken, op basis van de taal. Op de meeste Windows-, Mac OS X- en ChromeOS-systemen kan de spraaksynthese van het besturingssysteem elke tekst in ten minste één taal voorlezen. Sommige gebruikers hebben echter mogelijk meerdere stemmen tot hun beschikking, zowel van hun besturingssysteem als van spraakengines die door andere Chrome-extensies worden gebruikt. In die gevallen kun je aangepaste code schrijven om de juiste stem te kiezen of om de gebruiker een lijst met opties te presenteren.
Om een lijst van alle stemmen te krijgen, roep je getVoices() aan en geef je een functie mee die een array van 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);
}
}
);
Soorten
EventType
Enum
"begin" "einde" "woord" "zin" "marker" "onderbroken" "geannuleerd" "fout" "pauze" "cv"
TtsEvent
Een gebeurtenis van de TTS-engine om de status van een uitspraak te communiceren.
Eigenschappen
- charIndex
nummer optioneel
De index van het huidige teken in de uitspraak. Bij woordgebeurtenissen vindt de gebeurtenis plaats aan het einde van een woord en vóór het begin van het volgende. De
charIndexvertegenwoordigt een punt in de tekst aan het begin van het volgende woord dat uitgesproken moet worden. - foutmelding
string optioneel
De foutbeschrijving, indien het gebeurtenistype
erroris. - lengte
nummer optioneel
Chrome 74+De lengte van het volgende deel van de uitspraak. Bijvoorbeeld, bij een
wordis dit de lengte van het woord dat vervolgens wordt uitgesproken. Deze wordt ingesteld op -1 als deze niet door de spraakengine is ingesteld. - type
The type can be
startas soon as speech has started,wordwhen a word boundary is reached,sentencewhen a sentence boundary is reached,markerwhen an SSML mark element is reached,endwhen the end of the utterance is reached,interruptedwhen the utterance is stopped or interrupted before reaching the end,cancelledwhen it's removed from the queue before ever being synthesized, orerrorwhen any other error occurs. When pausing speech, apauseevent is fired if a particular utterance is paused in the middle, andresumeif an utterance resumes speech. Note that pause and resume events may not fire if speech is paused in-between utterances.
TtsOptions
De spraakopties voor de TTS-engine.
Eigenschappen
- gewenste gebeurtenistypen
string[] optioneel
De TTS-gebeurtenistypen waarnaar u wilt luisteren. Indien deze ontbreken, kunnen alle gebeurtenistypen worden verzonden.
- in de wachtrij plaatsen
boolean optioneel
Indien waar, wordt deze uitspraak in de wachtrij geplaatst als TTS al bezig is. Indien onwaar (de standaardwaarde), wordt de lopende spraak onderbroken en de spraakwachtrij geleegd voordat deze nieuwe uitspraak wordt gedaan.
- extensie-ID
string optioneel
De extensie-ID van de te gebruiken spraakengine, indien bekend.
- geslacht
Stemgeslacht optioneel
Niet meer bruikbaar sinds Chrome 77.Geslacht wordt afgekeurd en zal worden genegeerd.
Stemgeslacht voor synthetische spraak.
- lang
string optioneel
De taal die voor de 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 (inclusief), 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 lager dan 0,1 of hoger dan 10,0 zijn strikt verboden, maar veel stemmen beperken de minimum- en maximumsnelheid verder – zo spreekt een bepaalde stem mogelijk niet sneller dan drie keer de normale snelheid, zelfs 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 de synthese moet worden gebruikt. Indien leeg, wordt een willekeurige beschikbare stem gebruikt.
- volume
nummer optioneel
Spreekvolume tussen 0 en 1 (inclusief), waarbij 0 het laagste en 1 het hoogste volume is, met een standaardwaarde van 1,0.
- onEvent
void optioneel
Deze functie wordt aangeroepen bij gebeurtenissen die plaatsvinden tijdens het uitspreken van de zin.
De
onEventfunctie ziet er als volgt uit:(event: TtsEvent) => {...}
- evenement
De updategebeurtenis van de tekst-naar-spraakengine die de status van deze uitspraak aangeeft.
TtsVoice
Een beschrijving van een stem die beschikbaar is voor spraaksynthese.
Eigenschappen
- eventTypes
EventType [] optioneel
Alle soorten terugbelgebeurtenissen die deze stem kan verzenden.
- extensie-ID
string optioneel
De ID van de extensie die deze stem levert.
- geslacht
VoiceGender optional
Niet meer bruikbaar sinds Chrome 70.Geslacht wordt afgekeurd en zal worden 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 met zich meebrengen en bandbreedtekosten veroorzaken.
- stemnaam
string optioneel
De naam van de stem.
VoiceGender
Het genderaspect wordt afgekeurd en genegeerd.
Enum
"mannelijk" "vrouwelijk"
Methoden
getVoices()
chrome.tts.getVoices(
callback?: function,
): Promise<TtsVoice[]>
Krijgt een overzicht van alle beschikbare stemmen.
Parameters
- terugbelverzoek
functie optioneel
De
callbackparameter ziet er als volgt uit:(voices: TtsVoice[]) => void
- stemmen
TtsVoice []
Een array van
tts.TtsVoice-objecten die de beschikbare stemmen voor spraaksynthese vertegenwoordigen.
Retourneert
Promise< TtsVoice []>
Chrome 101+Promises worden alleen ondersteund voor Manifest V3 en later; voor andere platforms moeten callbacks worden gebruikt.
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
): Promise<boolean>
Controleert of de spraakengine momenteel aan het spreken is. Op Mac OS X is het resultaat waar wanneer de systeemspraakengine aan het spreken is, zelfs als de spraak niet door Chrome is geïnitieerd.
Parameters
- terugbelverzoek
functie optioneel
De
callbackparameter ziet er als volgt uit:(speaking: boolean) => void
- spreken
booleaans
Waar als er gesproken wordt, onwaar anders.
Retourneert
Belofte<boolean>
Chrome 101+Promises worden alleen ondersteund voor Manifest V3 en later; voor andere platforms moeten callbacks worden gebruikt.
pause()
chrome.tts.pause(): void
Pauzeert de spraaksynthese, mogelijk midden in een uitspraak. Een commando om te hervatten of te stoppen zal de spraak hervatten.
resume()
chrome.tts.resume(): void
Als de spraak werd onderbroken, wordt het spreken hervat vanaf het punt waar het was gebleven.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
): Promise<void>
Spreekt tekst uit met behulp van een tekst-naar-spraak-engine.
Parameters
- uitspraak
snaar
De tekst die moet worden voorgelezen, kan platte tekst zijn of een volledig, correct opgemaakt SSML-document. Spraakengines die geen SSML ondersteunen, verwijderen de tags en lezen de tekst voor. De maximale lengte van de tekst is 32.768 tekens.
- opties
TtsOptions optioneel
De spraakopties.
- terugbelverzoek
functie optioneel
De
callbackparameter ziet er als volgt uit:() => void
Retourneert
Promise<void>
Chrome 101+Wordt direct opgelost, voordat de spraak is voltooid. Als er een fout optreedt, wordt de belofte afgewezen. Gebruik options.onEvent voor meer gedetailleerde feedback.
Promises worden alleen ondersteund voor Manifest V3 en later; voor andere platforms moeten callbacks worden gebruikt.
stop()
chrome.tts.stop(): void
Stopt alle lopende spraak en leegt de wachtrij van alle openstaande uitspraken. Bovendien wordt spraak, indien gepauzeerd, nu hervat voor de volgende spreker.
Evenementen
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Wordt aangeroepen wanneer de lijst met tts.TtsVoice die door getVoices zou worden geretourneerd, is gewijzigd.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:() => void