files/en-us/web/api/speechsynthesisutterance/index.md
{{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}}
SpeechSynthesisUtterance object instance.SpeechSynthesisUtterance also inherits properties from its parent interface, {{domxref("EventTarget")}}.
Listen to these events using addEventListener() or by assigning an event listener to the oneventname property of this interface.
boundary
onboundary property.end
onend property.error
onerror propertymark
onmark property.pause
onpause property.resume
onresume property.start
onstart property.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 (const [i, voice] of voices.entries()) {
const option = document.createElement("option");
option.textContent = `${voice.name} (${voice.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}}
{{Compat}}