Web语音API - SpeechSynthesisUtterance标记事件不会触发



我找不到"标记"事件在Chrome或Edge中触发,同时使用SSML。我在Chrome和Edge中尝试过这一点,并根据https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API

的标准编写代码。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/TTS/DMAC.TTS.SSML.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="btnSpeak" type="button" onclick="Speak(); return false;" value="Speak" />
</div>
<div id="output"></div>
</form>
</body>
<script>
var synth = window.speechSynthesis;
var voices = null;
function Speak() {
var utterance = new SpeechSynthesisUtterance();
utterance.onboundary = function (event) {
document.getElementById('output').innerHTML += 'onboundary Event: ' + event.toString() + "<br/>";
};
utterance.onmark = function (event) {
document.getElementById('output').innerHTML += 'onmark Event: ' + event.toString() + "<br/>";
}
utterance.text = '<mark name="w1"/>Hello <mark name="w2"/>my <mark name="w3"/>name <mark name="w4"/>is <mark name="w5"/>John.';
utterance.lang = 'en-US';
utterance.voice = voices[0];
synth.speak(utterance);
};
window.speechSynthesis.onvoiceschanged = function () {
voices = synth.getVoices();
};
</script>
</html>

对于基于远程tts服务的语音,onboundary事件似乎不能在Chrome上正确触发。检查localService属性,选择localService = true voices only。

On Edge onboundary事件总是对所有声音正确触发。

奇怪的是,Chromium团队已经将这个已知问题标记为"不固定"。https://bugs.chromium.org/p/chromium/issues/detail?id=521666

最新更新