<!DOCTYPE html>
<html>
<head>
<title>5.2.3 SpeechSynthesisUtterance volume attribute test - Manual</title>
<style>
div,
#test {
display: block;
width: 640px;
word-break: break-all;
padding: 4px;
}
#test,
#volume {
background: skyblue;
font-weight: bold;
}
</style>
<script>
const text = "hello universe";
const volumes = [0, 0.2, 0.4, 0.6, 1];
handleVoicesChanged = async _ => {
for (const volume of volumes) {
await new Promise(resolve => {
document.getElementById("volume").value = volume;
const utterance = new SpeechSynthesisUtterance();
utterance.text = text;
utterance.volume = volume;
utterance.onend = resolve;
window.speechSynthesis.speak(utterance);
});
};
};
onload = e => {
document.getElementById("test").onclick = _ => {
if (window.speechSynthesis.getVoices().length === 0) {
window.speechSynthesis.onvoiceschanged = handleVoicesChanged;
} else {
handleVoicesChanged()
}
};
};
</script>
</head>
<body>
<div>
<h3>Specification:</h3>
<a href="https://w3c.github.io/speech-api/speechapi.html#utterance-attributes"><b><code><i><u>volume</u></i></code> attribute</b></a>
<blockquote>
This attribute specifies the speaking volume for the utterance. It ranges between 0 and 1 inclusive, with 0 being the lowest volume and 1 the highest volume, with a default of 1. If SSML is used, this value will be overridden by prosody tags in the markup.
</blockquote>
</div>
<div id="test">
Click to execute <code>window.speechSynthesis.speak()</code> with <code>volume attribute</code> set to <code>0, 0.2, 0.4, 0.6, 1.</code>
</div>
<br>
<div>
<label for="volume">Current volume: </label>
<input id="volume" readonly>
<h3>Manaul Test:</h3>Does the volume of audio output change?
</div>
</body>
</html>