Попытка использовать SpeechSynthesis API в приложении для веб-просмотра iOS - PullRequest
0 голосов
/ 12 октября 2018

Итак, я пытаюсь создать приложение, которое может использовать TTS.

Я использую API speechSynthesis внутри приложения веб-просмотра (интерфейс React, скомпилированный с Cordova, хотя я открыт для перехода на React Native)

У меня довольно стандартная реализация, которая работает на любом браузере, включая Safari - звук даже работает в симуляторе iOS через Xcode.Однако, когда я пытаюсь запустить его на моем устройстве, звук не работает, хотя остальная часть кода, который я связал с speechAPI (в основном, с подсветкой текста), работает как положено.

        function speechAPI(text, chardivs, speed, volume, version) {
            if (speechSynthesis.paused) {
                speechSynthesis.resume();
                return;
            }
            let msg = new SpeechSynthesisUtterance();
            let voices = window.speechSynthesis.getVoices();
            msg.voiceURI = 'native';
            msg.volume = volume; // 0 to 1
            msg.rate = speed; // 0.1 to 10
            msg.pitch = 1; //0 to 2
            msg.text = text;
            msg.lang = 'zh-CN';
            msg.voice = voices[63];
...

Я не вижулюбые ошибки или что-то в этом роде.Есть ли какие-то настройки, которые мне не хватает, чтобы этот API работал через iOS?Мое устройство на iOS 11, если это дает какую-либо полезную информацию.

1 Ответ

0 голосов
/ 02 ноября 2018

Если я не ошибаюсь, я понимаю, что вы испытываете затруднения в том, чтобы заставить устройство iOS фактически говорить при вызове метода SpeechSynthesis.speak ().

Я не совсем уверен вWebView, но Safari (на котором, вероятно, основан WebView) требует, чтобы SpeechSynthesis.speak () был запущен по крайней мере один раз при действии пользователя.Например.

//This is the button a user has to click. after this event has been triggered,
//the speechSynthesis.speak() can be used autonomously as well.
document.getElementById('enable_voice_output').addEventListener('click', primeSpeak);
var speechPrimed = false;
function primeSpeak(){
  if(speechPrimed === false){
    var u = new SpeechSynthesisUtterance("Speech is enabled");
    speechSynthesis.speak(u);
    speechPrimed = true;
  }
}
...