let voice = null;
function updateVoice() {
voice = speechSynthesis.getVoices().find(voice => voice.voiceURI == 'com.apple.voice.compact.zh-CN.Tingting')
document.getElementById('voice_name').textContent = voice?.name ?? '(No Voice)';
}
speechSynthesis.addEventListener('voiceschanged', updateVoice);
updateVoice()
const speak = document.getElementById('speak');
const text = document.getElementById('text');
speak.addEventListener('click', () => {
const ssu = new SpeechSynthesisUtterance(text.value);
ssu.voice = voice;
ssu.lang = 'zh-CN';
ssu.addEventListener('start', e => console.log('start', e));
ssu.addEventListener('end', e => console.log('end', e));
ssu.addEventListener('error', e => console.log('error', e));
speechSynthesis.speak(ssu);
});
<textarea id="text">“你好”</textarea>
<div id="voice_name"></div>
<button type="button" id="speak">
Speak
</button>
我的 PWA 使用语音合成 API 简单地可以在 Safari iOS 16.5 上运行,但在我将设备升级到 iOS 17 后就失败了。代码如上所示。当我在装有 iOS 17 的 iPhone SE3 上运行时,尝试说出
“你好”
(你好
,带 CJK 引号 “”
)结果没有任何反应。但是,如果您删除引号并仅在文本区域中保留 你好
,然后再次单击“讲话”按钮,它将按预期工作。我不知道我能做些什么来解决这个问题。那么有人可以帮我在这附近找到工作吗?
由于说话的文字是由用户给出的,这是我无法控制的。我无法避免在文中引用这句话。经过一番尝试和错误。到目前为止我得到的最好的解决方法是:
“”。
这可能很棘手,但确实有效。
const extraSuffix = '“”。';
let voice = null;
function updateVoice() {
voice = speechSynthesis.getVoices().find(voice => voice.lang == 'zh-CN')
document.getElementById('voice_name').textContent = voice?.name ?? '(No Voice)';
}
speechSynthesis.addEventListener('voiceschanged', updateVoice);
updateVoice()
const speak = document.getElementById('speak');
const text = document.getElementById('text');
speak.addEventListener('click', () => {
const ssu = new SpeechSynthesisUtterance(text.value + extraSuffix);
ssu.voice = voice;
ssu.lang = 'zh-CN';
ssu.addEventListener('start', e => console.log('start', e));
ssu.addEventListener('end', e => console.log('end', e));
ssu.addEventListener('error', e => console.log('error', e));
speechSynthesis.speak(ssu);
});
<textarea id="text">“你好”</textarea>
<div id="voice_name"></div>
<button type="button" id="speak">
Speak
</button>
我发现如果我在文本末尾添加
。
,语音合成会再次起作用。然而,怎么?
和怎么?。
会有不同的曲调,这不是我想要的。但是 怎么?“”。
效果很好。这就是为什么它使用如此奇怪的后缀。