browser.tts

Beschrijving

Gebruik de chrome.tts API om gesynthetiseerde tekst-naar-spraak (TTS) af te spelen. Bekijk 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 ChromeOS, met de mogelijkheden voor spraaksynthese van het besturingssysteem. Op alle platforms kan de gebruiker extensies installeren die zichzelf registreren als alternatieve spraakengines.

Rechten

tts

Concepten en gebruik

Spraak genereren

Bel speak() vanaf je extensie om te spreken. Voorbeeld:

browser.tts.speak('Hello, world.');

Als je meteen wilt stoppen met praten, bel je stop():

browser.tts.stop();

Je kunt opties bieden die verschillende eigenschappen van de spraak bepalen, zoals de snelheid en toonhoogte. Voorbeeld:

browser.tts.speak('Hello, world.', {'rate': 2.0});

Het is ook een goed idee om de taal te specificeren, zodat een synthesizer wordt gekozen die die taal (en het regionale dialect, indien van toepassing) ondersteunt.

browser.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});

Standaard onderbreekt elke aanroep van speak() de lopende spraak en spreekt onmiddellijk. Als je wilt weten of een gesprek iets onderbreekt, kun je isSpeaking() bellen. Daarnaast kun je de optie enqueue gebruiken om deze uiting toe te voegen aan een wachtrij met uitingen die worden uitgesproken nadat de huidige uiting is afgerond.

browser.tts.speak('Speak this first.');
browser.tts.speak(
    'Speak this next, when the first sentence is done.', {'enqueue': true});

Een volledige beschrijving van alle opties vindt u onder tts.speak(). Niet alle spraakengines ondersteunen alle opties.

Als je fouten wilt opsporen en wilt zorgen dat je speak() correct aanroept, geef je een callbackfunctie door die geen argumenten accepteert. Controleer in de callback runtime.lastError om te zien of er fouten zijn.

browser.tts.speak(
  utterance,
  options,
  function() {
    if (browser.runtime.lastError) {
      console.log('Error: ' + browser.runtime.lastError.message);
    }
  }
);

De callback wordt meteen geretourneerd, voordat de engine is begonnen met het genereren van spraak. Het doel van de callback is om je te waarschuwen voor syntaxisfouten in je gebruik van de TTS API, niet om alle mogelijke fouten op te vangen die kunnen optreden tijdens het proces van spraaksynthese en -uitvoer. Als u deze fouten ook wilt onderscheppen, moet u een gebeurtenislistener gebruiken, zoals beschreven in het volgende gedeelte.

Luisteren naar gebeurtenissen

Als je meer realtime informatie wilt over de status van gesynthetiseerde spraak, geef je een gebeurtenislistener door in de opties voor speak(), zoals hier:

browser.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 optionele foutmelding. De gebeurtenistypen zijn:

  • 'start': De engine is begonnen met de uiting uit te spreken.
  • 'word': Er is een woordgrens bereikt. Gebruik event.charIndex om de huidige spraakpositie te bepalen.
  • 'sentence': Er is een zinsgrens bereikt. Gebruik event.charIndex om de huidige spraakpositie te bepalen.
  • 'marker': Er is een SSML-markering bereikt. Gebruik event.charIndex om de huidige spraakpositie te bepalen.
  • 'end': De engine is klaar met de uiting.
  • 'interrupted': Deze uiting werd onderbroken door een andere aanroep van speak() of stop() en is niet afgerond.
  • 'cancelled': Deze uiting is in de wachtrij geplaatst, maar daarna geannuleerd door een andere aanroep naar speak() of stop() en is nooit begonnen met spreken.
  • 'error': Er is een enginespecifieke fout opgetreden en deze uiting kan niet worden uitgesproken. Ga naar event.errorMessage voor meer informatie.

4 van de gebeurtenistypen ('end', 'interrupted', 'cancelled' en 'error') zijn definitief. Nadat een van die gebeurtenissen is ontvangen, wordt deze uiting niet meer uitgesproken en worden er geen nieuwe gebeurtenissen van deze uiting meer ontvangen.

Sommige stemmen ondersteunen misschien niet alle gebeurtenistypen en sommige stemmen sturen misschien helemaal geen gebeurtenissen. Als je een stem alleen wilt gebruiken als deze bepaalde gebeurtenissen stuurt, geef je de vereiste gebeurtenissen door in het lid requiredEventTypes van het optieobject of gebruik je getVoices() om een stem te kiezen die aan je vereisten voldoet. Beide worden hieronder beschreven.

SSML-opmaak

Uitingen die in deze API worden gebruikt, kunnen opmaak bevatten die gebruikmaakt van de Speech Synthesis Markup Language (SSML). Als je 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, geen documentfragment.

Voorbeeld:

browser.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 helemaal niet, maar alle engines moeten SSML die ze niet ondersteunen negeren en de onderliggende tekst nog steeds uitspreken.

Een stem kiezen

Chrome kiest standaard de meest geschikte stem voor elke uiting 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 minstens één taal uitspreken. Sommige gebruikers hebben misschien verschillende stemmen beschikbaar via hun besturingssysteem en via spraakengines die zijn geïmplementeerd door andere Chrome-extensies. In die gevallen kun je aangepaste code implementeren om de juiste stem te kiezen of de gebruiker een lijst met keuzes te tonen.

Als je een lijst met alle stemmen wilt krijgen, roep je getVoices() aan en geef je een functie door die een array van TtsVoice-objecten als argument krijgt:

browser.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

Chrome 54+ browser.* sinds Chrome 148

Enum

"start"

"end"

"word"

"sentence"

"marker"

"interrupted"

"cancelled"

"error"

'pauzeren'

"resume"

TtsEvent

Een gebeurtenis van de TTS-engine om de status van een uiting te communiceren.

Eigenschappen

  • charIndex

    number optioneel

    De index van het huidige teken in de uiting. Voor woordgebeurtenissen wordt de gebeurtenis geactiveerd aan het einde van een woord en vóór het begin van het volgende woord. De charIndex staat voor een punt in de tekst aan het begin van het volgende woord dat wordt uitgesproken.

  • errorMessage

    tekenreeks optioneel

    De foutbeschrijving, als het gebeurtenistype error is.

  • lengte

    number optioneel

    Chrome 74 of hoger browser.* sinds Chrome 148

    De lengte van het volgende deel van de uiting. In een word-gebeurtenis is dit bijvoorbeeld de lengte van het woord dat als volgende wordt uitgesproken. De waarde wordt ingesteld op -1 als deze niet is ingesteld door de spraakengine.

  • type

    Het type kan start zijn zodra de spraak is gestart, word als een woordgrens is bereikt, sentence als een zingrens is bereikt, marker als een SSML-markeringselement is bereikt, end als het einde van de uiting is bereikt, interrupted als de uiting wordt gestopt of onderbroken voordat het einde is bereikt, cancelled als de uiting uit de wachtrij wordt verwijderd voordat deze wordt gesynthetiseerd of error als er een andere fout optreedt. Als spraak wordt gepauzeerd, wordt een pause-gebeurtenis geactiveerd als een bepaalde uiting in het midden wordt gepauzeerd en resume als een uiting de spraak hervat. Gebeurtenissen voor onderbreken en hervatten worden misschien niet geactiveerd als de spraak tussen uitingen wordt onderbroken.

TtsOptions

Chrome 77 of hoger browser.* sinds Chrome 148

De spraakopties voor de TTS-engine.

Eigenschappen

  • desiredEventTypes

    string[] optioneel

    De TTS-gebeurtenistypen waarnaar je wilt luisteren. Als deze ontbreekt, kunnen alle gebeurtenistypen worden gestuurd.

  • in de wachtrij plaatsen

    booleaans optioneel

    Als dit waar is, wordt deze uiting in de wachtrij geplaatst als TTS al bezig is. Als deze waarde onwaar is (de standaardwaarde), wordt de huidige spraak onderbroken en wordt de spraakwachtrij gewist voordat deze nieuwe uiting wordt uitgesproken.

  • extensionId

    tekenreeks optioneel

    De extensie-ID van de spraakengine die moet worden gebruikt, indien bekend.

  • gender

    VoiceGender optioneel

    Beëindigd sinds Chrome 77

    Gender is beëindigd en wordt genegeerd.

    Gender van de stem voor gesynthetiseerde spraak.

  • lang

    tekenreeks optioneel

    De taal die moet worden gebruikt voor synthese, in de vorm taal-regio. Voorbeelden: 'en', 'en-US', 'en-GB', 'zh-CN'.

  • pitch

    number optioneel

    Spreektoonhoogte tussen 0 en 2, waarbij 0 de laagste en 2 de hoogste is. 1.0 komt overeen met de standaardtoonhoogte van een stem.

  • reactiesnelheid

    number optioneel

    Spreeksnelheid ten opzichte van de standaardsnelheid voor deze stem. 1.0 is de standaardsnelheid, normaal gesproken ongeveer 180 tot 220 woorden per minuut. 2.0 is 2 keer zo snel en 0.5 is half zo snel. Waarden onder 0,1 of boven 10,0 zijn strikt niet toegestaan, maar veel stemmen beperken de minimale en maximale snelheden verder. Een bepaalde stem spreekt bijvoorbeeld misschien niet sneller dan 3 keer normaal, zelfs niet als je een waarde groter dan 3,0 invoert.

  • requiredEventTypes

    string[] optioneel

    De TTS-gebeurtenistypen die de stem moet ondersteunen.

  • voiceName

    tekenreeks optioneel

    De naam van de stem die moet worden gebruikt voor synthese. Als dit veld leeg is, wordt een beschikbare stem gebruikt.

  • volume

    number optioneel

    Spreekvolume tussen 0 en 1 inclusief, waarbij 0 het laagst is en 1 het hoogst, met een standaardwaarde van 1,0.

  • onEvent

    void optioneel

    Deze functie wordt aangeroepen met gebeurtenissen die plaatsvinden tijdens het uitspreken van de uiting.

    De functie onEvent ziet er zo uit:

    (event: TtsEvent) => {...}

    • gebeurtenis

      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

  • eventTypes

    EventType[] optioneel

    Alle typen callbackgebeurtenissen die deze stem kan sturen.

  • extensionId

    tekenreeks optioneel

    De ID van de extensie die deze stem biedt.

  • gender

    VoiceGender optioneel

    Beëindigd sinds Chrome 70

    Gender is beëindigd en wordt genegeerd.

    Het gender van deze stem.

  • lang

    tekenreeks optioneel

    De taal die deze stem ondersteunt, in de vorm taal-regio. Voorbeelden: 'en', 'en-US', 'en-GB', 'zh-CN'.

  • afstandsbediening

    booleaans optioneel

    Als dit waar is, is de synthese-engine een externe netwerkbron. Dit kan een hogere latentie hebben en bandbreedtekosten met zich meebrengen.

  • voiceName

    tekenreeks optioneel

    De naam van de stem.

VoiceGender

Chrome 54+ browser.* sinds Chrome 148 Beëindigd sinds Chrome 70

Gender is beëindigd en wordt genegeerd.

Enum

"male"

"female"

Methoden

getVoices()

browser.tts.getVoices(): Promise<TtsVoice[]>

Haalt een array van alle beschikbare stemmen op.

Retourzendingen

  • Promise<TtsVoice[]>

    Chrome 101+ browser.* sinds Chrome 148

isSpeaking()

browser.tts.isSpeaking(): Promise<boolean>

Controleert of de engine op dit moment spreekt. In Mac OS X is het resultaat waar wanneer de spraakengine van het systeem spreekt, zelfs als de spraak niet is gestart door Chrome.

Retourzendingen

  • Promise<boolean>

    Chrome 101+ browser.* sinds Chrome 148

pause()

browser.tts.pause(): void

Onderbreekt de spraaksynthese, mogelijk midden in een uiting. Een aanroep om te hervatten of te stoppen, heft de pauze van de spraak op.

resume()

browser.tts.resume(): void

Als de spraak is onderbroken, wordt de spraak hervat waar deze is gestopt.

speak()

browser.tts.speak(
  utterance: string,
  options?: TtsOptions,
)
: Promise<void>

Spreekt tekst uit met een tekst-naar-spraak-engine.

Parameters

  • uiting

    tekenreeks

    De tekst die moet worden uitgesproken, als platte tekst of als een compleet, goed opgemaakt 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.

Retourzendingen

  • Promise<void>

    Chrome 101+ browser.* sinds Chrome 148

    Wordt meteen opgelost, voordat de spraak is afgelopen. Als er een fout optreedt, wordt de promise afgewezen. Gebruik options.onEvent voor gedetailleerdere feedback.

stop()

browser.tts.stop(): void

Stopt de huidige spraak en wist de wachtrij met uitingen die in behandeling zijn. Als de spraak was onderbroken, wordt deze nu hervat voor het volgende gesprek.

Evenementen

onVoicesChanged

Chrome 124+ browser.* sinds Chrome 148
browser.tts.onVoicesChanged.addListener(
  callback: function,
)

Wordt aangeroepen als de lijst met tts.TtsVoice die wordt geretourneerd door getVoices is gewijzigd.

Parameters

  • callback

    functie

    De parameter callback ziet er zo uit:

    () => void