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.defaultRead only- A
Booleanindicating whether the voice is the default voice for the current app language (true), or not (false.) SpeechSynthesisVoice.langRead only- Returns a BCP 47 language tag indicating the language of the voice.
SpeechSynthesisVoice.localServiceRead only- A
Booleanindicating whether the voice is supplied by a local speech synthesizer service (true), or a remote speech synthesizer service (false.) SpeechSynthesisVoice.nameRead only- Returns a human-readable name that represents the voice.
SpeechSynthesisVoice.voiceURIRead 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.
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
| Specification | Status | Comment |
|---|---|---|
| Web Speech API The definition of 'SpeechSynthesisVoice' in that specification. |
Draft |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
SpeechSynthesisVoice | Chrome Full support 33 | Edge Full support ≤18 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
default | Chrome Full support 33 | Edge Full support 14 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
lang | Chrome Full support 33 | Edge Full support 14 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
localService | Chrome Full support 33 | Edge Full support 14 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
name | Chrome Full support 33 | Edge Full support 14 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
voiceURI | Chrome Full support 33 | Edge Full support 14 | Firefox Full support 49 | IE No support No | Opera Full support 21 | Safari Full support 7 | WebView Android Full support 4.4.3 | Chrome Android Full support 33 | Firefox Android
Full support
62
| Opera Android No support No | Safari iOS Full support 7 | Samsung Internet Android Full support 3.0 |
Legend
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.
- Experimental. Expect behavior to change in the future.
- User must explicitly enable this feature.
- User must explicitly enable this feature.
