W3cubDocs

/Web APIs

SpeechSynthesisVoice

The SpeechSynthesisVoice interface of the Web Speech API represents a voice that the system supports. Every SpeechSynthesisVoice has its own relative speech service including information about language, name and URI.

Instance properties

SpeechSynthesisVoice.default Read only

A boolean value indicating whether the voice is the default voice for the current app language (true), or not (false.)

SpeechSynthesisVoice.lang Read only

Returns a BCP 47 language tag indicating the language of the voice.

SpeechSynthesisVoice.localService Read only

A boolean value indicating whether the voice is supplied by a local speech synthesizer service (true), or a remote speech synthesizer service (false.)

SpeechSynthesisVoice.name Read only

Returns a human-readable name that represents the voice.

SpeechSynthesisVoice.voiceURI Read only

Returns the type of URI and location of the speech synthesis service for this voice.

Examples

The following snippet is excerpted from our Speech synthesizer demo.

js

const synth = window.speechSynthesis;
function populateVoiceList() {
  voices = synth.getVoices();

  for (let i = 0; i < voices.length; i++) {
    const option = document.createElement("option");
    option.textContent = `${voices[i].name} (${voices[i].lang})`;

    if (voices[i].default) {
      option.textContent += " — DEFAULT";
    }

    option.setAttribute("data-lang", voices[i].lang);
    option.setAttribute("data-name", voices[i].name);
    voiceSelect.appendChild(option);
  }
}

populateVoiceList();
if (speechSynthesis.onvoiceschanged !== undefined) {
  speechSynthesis.onvoiceschanged = populateVoiceList;
}

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

  const utterThis = new SpeechSynthesisUtterance(inputTxt.value);
  const selectedOption =
    voiceSelect.selectedOptions[0].getAttribute("data-name");
  for (let i = 0; i < voices.length; i++) {
    if (voices[i].name === selectedOption) {
      utterThis.voice = voices[i];
    }
  }
  utterThis.pitch = pitch.value;
  utterThis.rate = rate.value;
  synth.speak(utterThis);

  utterThis.onpause = (event) => {
    const char = event.utterance.text.charAt(event.charIndex);
    console.log(
      `Speech paused at character ${event.charIndex} of "${event.utterance.text}", which is "${char}".`,
    );
  };

  inputTxt.blur();
};

Specifications

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
SpeechSynthesisVoice 33 14
49In Firefox, speech synthesis voices do not start loading until after the first call to window.speechSynthesis.getVoices(). A way to mitigate this issue is to call the method at the beginning of page load, then wait a few seconds before calling the method again. Voices will remain loaded until all tabs that have called this method have been closed.
No 21 7 No 33 62 No 7 3.0
default 33 14 49 No 21 7 No 33 62 No 7 3.0
lang 33 14 49 No 21 7 No 33 62 No 7 3.0
localService 33 14 49 No 21 7 No 33 62 No 7 3.0
name 33 14 49 No 21 7 No 33 62 No 7 3.0
voiceURI 33 14 49 No 21 7 No 33 62 No 7 3.0

See also

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice