javascript - 尝试在iOS webview应用程序中使用speechSynthesis API

标签 javascript ios reactjs speech-synthesis

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

我在 webview 应用程序中使用 voiceSynthesis API(React 前端,用 Cordova 编译,尽管我愿意切换到 React Native)

我有一个相当标准的实现,它适用于每个浏览器,包括 Safari - 声音甚至可以通过 Xcode 在 iOS 模拟器中工作。然而,当我尝试在我的设备上运行它时,没有声音工作,即使我与语音 API 关联的其余代码(主要是文本突出显示)按预期工作。

        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;
  }
}

关于javascript - 尝试在iOS webview应用程序中使用speechSynthesis API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769453/

相关文章:

javascript - jsView中引用数组元素

javascript - 扩展主干模型或 View 时,我如何创建在实例而不是原型(prototype)上创建的属性?

ios - UIView 隐藏/显示动画

ios - 使自定义 CALayer 子类在添加到 super 层后自动重绘自身

ios - 在 plist 文件上实现 2 个 ATS 规范

javascript - 获取 React Final Form 中 Wizard Form Page 中的当前输入字段值

javascript - 从变量中获取 promise 数据的正确方法是什么?

javascript - 如何让spawnSync和fs.readFile先后执行?

reactjs - 语义 ui-react 列表 onClick 声明

javascript - 如何在 Angular 工厂中将数据保存在 Scope 上