SpeechSynthesisVoice

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

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.

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 synthesiser demo.

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

  for(i = 0; i < voices.length ; i++) {
    var 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 = function(event) {
  event.preventDefault();

  var utterThis = new SpeechSynthesisUtterance(inputTxt.value);
  var selectedOption = voiceSelect.selectedOptions[0].getAttribute('data-name');
  for(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 = function(event) {
    var 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
≤18
49
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–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice