На данный момент я заметил следующее: при использовании голоса Tingting, если текст в речь начинается с «» и содержит внутри себя китайские иероглифы. При попытке произнести его синтез речи перестанет работать. И перезагрузка страницы не поможет. Вам необходимо перезапустить Safari, прежде чем использовать какие-либо функции синтеза речи. А вот демонстрационный код:
Код: Выделить всё
const init = () => {
if (document.querySelector('button')) return;
const voices = window.speechSynthesis.getVoices();
const zhCnVoices = [...voices].filter((voice, index, list) => /^zh-CN/.test(voice.lang) && list.findIndex(that => that.voiceURI === voice.voiceURI) === index);
if (!zhCnVoices.length) return;
const select = document.body.appendChild(document.createElement('select'));
zhCnVoices.forEach(voice => {
const option = select.appendChild(document.createElement('option'));
option.textContent = voice.name;
option.value = voice.voiceURI;
});
select.value = zhCnVoices.find(voice => /Tingting/.test(voice.voiceURI))?.voiceURI;
const input = document.body.appendChild(document.createElement('input'));
input.value = '';
const speak = (text) => {
const ssu = new SpeechSynthesisUtterance(text);
ssu.voice = zhCnVoices.find(voice => voice.voiceURI === select.value);
window.speechSynthesis.cancel();
window.speechSynthesis.speak(ssu);
};
const button = document.body.appendChild(document.createElement('button'));
button.textContent = 'Buggy Speak';
const button2 = document.body.appendChild(document.createElement('button'));
button2.textContent = 'Workaround Speak';
button.addEventListener('click', () => {
speak(input.value);
});
button2.addEventListener('click', () => {
speak(input.value.replace(/[]/g, ch => ({ '': '\uff1e' }[ch])));
});
};
window.speechSynthesis.addEventListener("voiceschanged", init);
init();Сначала щелкните обходной вариант, он должен сработать, и вы должны произнести здесь какой-то текст, если в вашей системе установлен мандаринский голос. Затем нажмите на глючный, вы ничего не должны услышать. И вы можете попробовать обходной путь еще раз, он больше не будет работать до перезапуска Safari.
На данный момент я хочу знать следующее:
- Как определить версию iOS, чтобы этот обходной путь применялся только к версиям с ошибками. (Я подтверждаю, что в iOS 18 этой ошибки нет.)
- Я не уверен, возникла ли такая же ошибка на Mac, поскольку у меня нет устройства для ее тестирования. То есть это применимо и к Mac?
Подробнее здесь: https://stackoverflow.com/questions/797 ... rtain-text
Мобильная версия