Dav*_*vid 6 javascript google-chrome text-to-speech speech-synthesis web-audio-api
使用浏览器 api voiceSynthesis.resume() 我正在尝试在 android chrome 上恢复暂停的语音
我已经在 mac os mojave 上的 chrome 桌面版本 78.0.3904.97 上测试了下面的代码,它在演讲暂停后恢复演讲,没有任何问题。但相同的代码无法在 android chrome 版本 77.x 和 78.x 上恢复演讲
重现步骤
这是 Chrome 中的错误吗?
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<button id="play">Play</button>
<button id="pause">Pause</button>
<button id="resume">Resume</button>
<div id="data"></div>
<script>
const play = document.getElementById("play");
const pause = document.getElementById("pause");
const resume = document.getElementById("resume");
play.addEventListener("click", function() {
document.getElementById("data").innerText = "play";
var utterance = new SpeechSynthesisUtterance(
"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
);
utterance.lang = "en-US";
speechSynthesis.cancel();
speechSynthesis.speak(utterance);
});
pause.addEventListener("click", function() {
document.getElementById("data").innerText = "pause";
speechSynthesis.pause();
});
resume.addEventListener("click", function() {
document.getElementById("data").innerText = "resume";
speechSynthesis.resume();
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
是的,这是一个错误:https ://github.com/mdn/browser-compat-data/issues/4500
状态是固定的,所以也许它可以在测试版或开发版或 Chrium 中运行。
就目前情况而言,当您暂停语音合成时,其暂停状态不会更新,并且所有进一步的语音命令都会放入待处理队列中,给人的印象是语音合成已完全停止工作。您的代码可以在每个“speak”命令之前使用“cancel”行来避免这种情况。
顺便问一下,您希望这段代码在 Firefox 中运行吗?
编辑:希望您不介意,我稍微更改了您的代码并添加了一个“状态”按钮来演示此错误。状态按钮显示正在发言、暂停和待处理状态。
单击“播放”,然后单击“状态”:正在讲话为 true,暂停为 false,待处理为 false。然后单击“暂停”和“状态”。在 Windows 中,speaking 为 true,paused 为 true,pending 为 false。然而在Andriod 中,状态分别为true、false、false。所以恢复不能做任何事情,因为暂停是错误的。
此后,如果您再次单击“播放”,则话语将进入待处理队列,因此状态为 true、false、true。
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<button id="play">Play</button>
<button id="pause">Pause</button>
<button id="resume">Resume</button>
<button id="status">Status</button>
<button id="ssCancel">Cancel</button>
<div id="data"></div>
<script>
const play = document.getElementById("play");
const pause = document.getElementById("pause");
const resume = document.getElementById("resume");
const status = document.getElementById("status");
const ssCancel = document.getElementById("ssCancel");
const data = document.getElementById("data");
play.addEventListener("click", () => {
data.innerText = "play";
var utterance = new SpeechSynthesisUtterance(
"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
);
utterance.lang = "en-US";
//speechSynthesis.cancel();
speechSynthesis.speak(utterance);
});
pause.addEventListener("click", () => {
data.innerText = 'pause';
speechSynthesis.pause();
});
resume.addEventListener("click", () => {
data.innerText = "resume";
speechSynthesis.resume();
});
status.addEventListener('click', () => {
data.innerText = `
Speaking: ${speechSynthesis.speaking},
Paused: ${speechSynthesis.paused},
Pending: ${speechSynthesis.pending}.`;
});
ssCancel.addEventListener('click', () => {
speechSynthesis.cancel();
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
(为了更好地显示错误,我注释掉了您的取消行并添加了单独的取消按钮)
归档时间: |
|
查看次数: |
1884 次 |
最近记录: |