gpt4 book ai didi

javascript - 在 chrome android 上使用 speechSynthesis.resume() 恢复暂停的语音不起作用

转载 作者:行者123 更新时间:2023-11-30 19:06:17 25 4
gpt4 key购买 nike

使用浏览器 api speechSynthesis.resume() 我正在尝试在 android chrome 上恢复暂停的语音

我已经在 mac os mojave 上的 chrome 桌面版本 78.0.3904.97 上测试了下面的代码,它在演讲暂停后恢复演讲没有任何问题。但是同样的代码无法在android chrome 77.x和78.x版本上恢复语音

重现步骤

  1. 运行下面的代码
  2. 按播放键收听演讲
  3. 中途暂停演讲
  4. 按简历
  5. 语音在桌面 chrome 上恢复,但在 android chrome 上不恢复

这是 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>

最佳答案

是的,这是一个错误:https://github.com/mdn/browser-compat-data/issues/4500

状态是固定的,所以它可能会在测试版或开发版或 Chronium 中工作。

就目前而言,当您暂停 speechSynthesis 时,其暂停状态不会更新,并且所有进一步的发言命令都将放入待处理队列,给人的印象是 speechSynthesis 已完全停止工作。您的代码通过在每个“说出”命令之前的“取消”行避免了这种情况。

顺便说一句,你想让这段代码在 Firefox 中工作吗?

编辑:希望您不要介意,我稍微更改了您的代码并添加了一个“状态”按钮来演示此错误。状态按钮显示发言、暂停和待定状态。

点击'Play'然后'Status':speaking 是true,paused 是false,pending 是false。然后单击“暂停”和“状态”。在 Windows 中讲 true 和 paused true,pending false。但是在 Andriod 中,状态分别为 true、false、false。所以 resume 不能做任何事情,因为 paused 是错误的。

此后,如果您再次点击“播放”,语音就会进入待处理队列,因此状态为真、假、真。

<!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>

(为了更好地显示错误,我注释掉了您的取消行并添加了一个单独的取消按钮)

关于javascript - 在 chrome android 上使用 speechSynthesis.resume() 恢复暂停的语音不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com