docs.rodeo

MDN Web Docs mirror

SpeechSynthesisUtterance

{{APIRef("Web Speech API")}} 

The SpeechSynthesisUtterance interface of the Web Speech API represents a speech request. It contains the content the speech service should read and information about how to read it (e.g. language, pitch and volume.)

{{InheritanceDiagram}} 

Constructor

Instance properties

SpeechSynthesisUtterance also inherits properties from its parent interface, {{domxref("EventTarget")}} .

Events

Listen to these events using addEventListener() or by assigning an event listener to the oneventname property of this interface.

Examples

In our basic Speech synthesizer demo, we first grab a reference to the SpeechSynthesis controller using window.speechSynthesis. After defining some necessary variables, we retrieve a list of the voices available using {{domxref("SpeechSynthesis.getVoices()")}}  and populate a select menu with them so the user can choose what voice they want.

Inside the inputForm.onsubmit handler, we stop the form submitting with {{domxref("Event.preventDefault","preventDefault()")}} , use the {{domxref("SpeechSynthesisUtterance.SpeechSynthesisUtterance()", "constructor")}}  to create a new utterance instance containing the text from the text {{htmlelement("input")}} , set the utterance’s {{domxref("SpeechSynthesisUtterance.voice","voice")}}  to the voice selected in the {{htmlelement("select")}}  element, and start the utterance speaking via the {{domxref("SpeechSynthesis.speak()")}}  method.

const synth = window.speechSynthesis;

const inputForm = document.querySelector("form");
const inputTxt = document.querySelector("input");
const voiceSelect = document.querySelector("select");

let voices;

function loadVoices() {
  voices = synth.getVoices();
  for (let i = 0; i < voices.length; i++) {
    const option = document.createElement("option");
    option.textContent = `${voices[i].name} (${voices[i].lang})`;
    option.value = i;
    voiceSelect.appendChild(option);
  }
}

// in Google Chrome the voices are not ready on page load
if ("onvoiceschanged" in synth) {
  synth.onvoiceschanged = loadVoices;
} else {
  loadVoices();
}

inputForm.onsubmit = (event) => {
  event.preventDefault();

  const utterThis = new SpeechSynthesisUtterance(inputTxt.value);
  utterThis.voice = voices[voiceSelect.value];
  synth.speak(utterThis);
  inputTxt.blur();
};

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN