语音合成话语不触发"mark"事件



我无法触发SpeechSynthesisUtterance实例的mark事件。

据我所知,这应该有效。我期待看到

Started
Reached mark
Done

相反,我得到

Started
Done

document.querySelector('#play').addEventListener('click', function speak() {
const utterance = new SpeechSynthesisUtterance(
`<?xml version="1.0"?>
<speak version="1.1">Foo <mark name="bar" /> baz.</speak>`
)

const log = document.getElementById('log')
utterance.addEventListener('start', () => {log.value = 'Startedn'})
utterance.addEventListener('mark', () => {log.value += 'Reached markn'})
utterance.addEventListener('end', () => {log.value += 'Donen'})
log.value = 'Waiting…'
speechSynthesis.cancel()
speechSynthesis.speak(utterance)
})
<textarea id="log" disabled rows="3">Waiting…</textarea>
<hr>
<button id="play">Speak</button>

很抱歉让您知道这是一个错误,并且 SSML 尚未实现。


https://github.com/WICG/speech-api/issues/10 https://bugs.chromium.org/p/chromium/issues/detail?id=88072

你会看到chronium问题已经有9年的历史了,所以我怀疑它会很快得到解决。

最新更新