Javascript 正在尝试在iOS webview应用程序中使用speechSynthesis API

Javascript 正在尝试在iOS webview应用程序中使用speechSynthesis API,javascript,ios,reactjs,speech-synthesis,Javascript,Ios,Reactjs,Speech Synthesis,所以我正在尝试创建一个可以做TTS的应用程序 我在webview应用程序中使用speechSynthesis API(React前端,使用Cordova编译,但我愿意切换到React本机) 我有一个相当标准的实现,可以在每个浏览器上运行,包括Safari-sound,甚至可以通过Xcode在iOS模拟器上运行。然而,当我尝试在我的设备上运行它时,没有声音起作用,即使我与speechAPI(主要是文本突出显示)相关联的其余代码按预期工作 function speechAPI(tex

所以我正在尝试创建一个可以做TTS的应用程序

我在webview应用程序中使用speechSynthesis API(React前端,使用Cordova编译,但我愿意切换到React本机)

我有一个相当标准的实现,可以在每个浏览器上运行,包括Safari-sound,甚至可以通过Xcode在iOS模拟器上运行。然而,当我尝试在我的设备上运行它时,没有声音起作用,即使我与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上,如果这提供了有用的信息。

如果我没有错,我知道在调用SpeechSynthesis.speak()方法时,您在让iOS设备实际讲话时遇到了问题

我不完全确定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;
  }
}

如果我没有错的话,我知道在调用SpeechSynthesis.speak()方法时,您在让iOS设备实际讲话方面遇到了困难

我不完全确定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;
  }
}

可能不是,但尝试添加Cordova media插件(此插件提供在设备上录制和播放音频文件的功能)可能不是,但尝试添加Cordova media插件(此插件提供在设备上录制和播放音频文件的功能)您是对的。我们可以将卷设置为0,这样用户就不会注意到它。你是对的。我们可以将卷设置为0,这样用户就不会注意到它。