2

視覚障害者向けのホーム オートメーション プロジェクト用にブラウザ内音声合成を実装しようとしています。私のテスト ページでは、speak()メソッドを呼び出してから実際にそれを聞くまでに約 1 秒のタイムラグがあることに気付きました。

これが正常な動作なのか、それとも私が何か間違ったことをしているのか疑問に思っています。誰かがそれをスピードアップする方法についてアドバイスを提供できる場合(0.5秒程度でも)、本当に感謝しています:)

[編集 1]
では、MS Edge (Chrome のみを使用していた) でテスト ページを試してみたところ、ラグがなくなりました。「音声」を「ネイティブ」に設定して、Chrome でWeb Speech Synthesis Demoも試しましたが、ラグもありませんでした。これらのテストはどちらも、英国英語の音声でテキストをレンダリングしました。
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 を使用しようとするたびに音声を生成するためにサーバーに送信します。そのため、残念ながら、コンピューターで利用可能なネイティブ ボイス以外を使用すると、ネットワーク遅延が常に発生します。遅延とは別に、あなたが生成したすべてのスピーチが Google (そしておそらく NSA やサーバーをスパイしている他の誰か) に送信されるというプライバシー上の懸念もあります。Edge と Firefox はデフォルトでネイティブの音声を使用し、Google 独自の音声を選択できないため、常に遅延が発生しません。

于 2017-01-12T13:55:09.193 に答える