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.
On this page
SpeechSynthesisVoice
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
Specification |
---|
Web Speech API # speechsynthesisvoice |
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 towindow.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