2

我正在尝试为视障人士的家庭自动化项目在浏览器中实现语音合成。在我的测试页面中,我注意到调用该speak()方法和实际听到它之间大约有 1 秒的延迟。

只是想知道这是正常行为还是我做错了什么。如果有人可以就如何加快速度(甚至半秒左右)提供建议,我将不胜感激:)

[编辑 1]
好的,所以我在 MS Edge 中尝试了我的测试页面(只使用了 Chrome)并且滞后消失了。我还尝试了Chrome 中的Web Speech Synthesis Demo,将“voice”设置为“native”,也没有延迟。这两项测试都以英国英语语音呈现文本。
在 Chrome 中,我的测试页面使用澳大利亚英语语音(我在 AU)呈现文本,并且在播放之前有延迟。
我的直觉告诉我,Chrome 浏览器正在从某个远程位置加载语音,而不是使用本地系统语音,并且仅针对此特定页面(即 codepen.io 的演示在同一浏览器中运行良好)。但我不知道为什么

如果它只加载一次声音而不是每次调用它(我只是假设这就是正在发生的事情),这将不是什么大问题。
[/编辑 1]

这是我的代码:

<body>
    <div class='col col-xs-6'>
      <div style='width:100%;'>
        <button type='button' class='btn' onmouseover='speak("mouse over");' onmouseout="cancel();">
          Test button.
        </button>
      </div>
    </div>


    <p id="msg"></p>
    <script type="text/javascript">
      var globalVolume = 0.8;
      var globalRate = 1;
      var globalPitch = 0.9;
      var enterMsg = "Mouse over";


      function speak(text) {
          var msg = new SpeechSynthesisUtterance();
          msg.text = text;
          msg.volume = globalVolume;
          msg.rate = globalRate;
          msg.pitch = globalPitch;
          //msg.voice = "native";
          window.speechSynthesis.speak(msg);
      }

      function cancel() {
        window.speechSynthesis.cancel();
      }

      //speak("Hello, world!");
    </script>
</body>
4

1 回答 1

1

正如您在更新中所推测的那样,如果您选择任何非母语声音(任何以“Google”开头的声音),声音会在 Google 服务器上生成,然后发送到浏览器,从而导致延迟。它实际上并没有将语音加载到您的浏览器中,每次您尝试使用 TTS 时,它都会将其发送到服务器以生成声音。因此,不幸的是,当使用计算机上可用的本机语音以外的任何内容时,网络延迟将始终存在。除了延迟之外,您生成的所有语音都被发送到谷歌(可能还有美国国家安全局或其他任何在他们的服务器上监视的人),这也存在隐私问题。Edge 和 Firefox 默认使用原生语音,并且不允许您选择 Google 的专有语音,这就是它们总是缺乏延迟的原因。

于 2017-01-12T13:55:09.193 回答