Я использую API синтеза речи на Android-Chrome.Проблема в том, что, хотя доступно 4 голоса на английском языке, браузер всегда использует американский английский, независимо от того, какой код указывает.Я могу использовать другие языки, например французский, но не другие английские голоса, например en-AU, GB или IN.
Этот код фильтрует британские английские голосовые объекты из массива getVoices и использует первый, чтобы произнести слово 'tomato».Проблема в том, что слово всегда произносится как «to-may-lo», а не «to-mar-to», что означает, что мой текст не рифмуется как следует.
Отображается использованный голосовой объекти (на телефонах, которые я пробовал) - ГБ.
HTML ...
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Let's not call the whole thing off</title>
<script src="tomato.js" defer></script>
</head>
<body>
<div id="tomato" lang="en-GB">Tomato</div>
<div id="platform"></div>
</body>
</html>
И скрипт ...
var platform = document.getElementById("platform");
var tomato = document.getElementById("tomato");
var voices = [];
var voicesGB = [];
voices = speechSynthesis.getVoices();
speechSynthesis.onvoiceschanged = function() {
voices = speechSynthesis.getVoices();
voicesGB = voices.filter(voice => /en(-|_)GB/.test(voice.lang));
};
function speak(word) {
var msg = new SpeechSynthesisUtterance();
msg.default = false;
msg.text = word;
msg.voice = voicesGB[0];
msg.lang = voicesGB[0].lang;
window.speechSynthesis.speak(msg);
for (var p in msg.voice) {
platform.innerHTML += p + ': ' + msg.voice[p] + '<br>\n';
}
}
tomato.addEventListener("click",() => {speak('tomato');});
И jsbin: https://jsbin.com/xefukemuga/edit?html,js,output Запустите это в Android Chrome и коснитесь слова «помидор».
Я искал все и пробовал различные исправления.Как вы контролируете, какой голос использует Android-Chrome?