在android webview上选择文本到速度的语言 [英] Select language for text-to-speed on android webview

查看:18
本文介绍了在android webview上选择文本到速度的语言的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经搜索了好几个小时没有得到真正的答案.

是否可以为文本转语音功能选择与默认语言不同的语言?

此代码在 PC 上的 chrome 上运行良好,但不适用于 Android 浏览器:

$(function(){if ('speechSynthesis' in window) {SpeechSynthesis.onvoiceschanged = 函数(){var $voicelist = $('#voices');if($voicelist.find('option').length == 0) {SpeechSynthesis.getVoices().forEach(function(voice, index) {控制台日志(语音);var $option = $('

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.1/css/materialize.min.css"><div class="容器"><div class="row"><导航><div class="nav-wrapper"><div class="col s12"><a href="#" class="brand-logo">文本转语音示例</a>

</nav>

<form class="col s8 offset-s2"><div class="row"><label>选择声音</label><select id="voices"></select>

<div class="row"><div class="col s6"><label>Rate</label><p class="range-field"><input type="range" id="rate" min="1" max="100" value="10"/></p>

<div class="col s6"><label>音高</label><p class="range-field"><input type="range" id="pitch" min="0" max="2" value="1"/></p>

<div class="col s12"><p>N.B.Rate 和 Pitch 仅适用于本地语音.</p>

<div class="row"><div class="input-field col s12"><textarea id="message" class="materialize-textarea"></textarea><label>写信息</label>

<a href="#" id="speak" class="waves-effect wave-light btn">Speak</a></表单>

<div id="modal1" class="modal"><h4>不支持语音合成</h4><p>您的浏览器不支持语音合成.</p><p>我们建议您使用 Google Chrome.</p><div class="action-bar"><a href="#" class="waves-effect wave-green btn-flat modal-action modal-close">关闭</a>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script><script src="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.1/js/materialize.min.js"></script>

非常感谢!!问候

解决方案

好吧,经过搜索和搜索,我终于找到了解决方案,而且非常非常简单...

在 PC Chrome 中,语音的语言隐含在语音数据包中,但在移动 Chrome 中,语言必须在 SpeechSynthesisUtterance 对象中明确指定.

因此,对于该示例,它可以添加行

 msg.lang = voices[$('#voices').val()].lang;

如果有人需要帮助,我已经准备好了.

您好.

I have searching for many hours without a real answer.

Is there anyway to select different language than the default one for the Text-to-speech function?

This code works perfectly on chrome on PC, but not working on Android browser:

$(function(){
  if ('speechSynthesis' in window) {
    speechSynthesis.onvoiceschanged = function() {
      var $voicelist = $('#voices');

      if($voicelist.find('option').length == 0) {
        speechSynthesis.getVoices().forEach(function(voice, index) {
          console.log(voice);
          var $option = $('<option>')
          .val(index)
          .html(voice.name + (voice.default ? ' (default)' :''));

          $voicelist.append($option);
        });

        $voicelist.material_select();
      }
    }

    $('#speak').click(function(){
      var text = $('#message').val();
      var msg = new SpeechSynthesisUtterance();
      var voices = window.speechSynthesis.getVoices();
      msg.voice = voices[$('#voices').val()];
      msg.rate = $('#rate').val() / 10;
      msg.pitch = $('#pitch').val();
      msg.text = text;

      msg.onend = function(e) {
        console.log('Finished in ' + event.elapsedTime + ' seconds.');
      };

      console.log(speechSynthesis);

      speechSynthesis.speak(msg);
    })
  } else {
    $('#modal1').openModal();
  }
});

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.1/css/materialize.min.css">

<div class="container">
  <div class="row">
    <nav>
      <div class="nav-wrapper">
        <div class="col s12">
          <a href="#" class="brand-logo">Text to speech example</a>
        </div>
      </div>
    </nav>
  </div>
  <form class="col s8 offset-s2">
    <div class="row">
      <label>Choose voice</label>
      <select id="voices"></select>
    </div>
    <div class="row">
      <div class="col s6">
        <label>Rate</label>
        <p class="range-field">
          <input type="range" id="rate" min="1" max="100" value="10" />
        </p>
      </div>
      <div class="col s6">
        <label>Pitch</label>
        <p class="range-field">
          <input type="range" id="pitch" min="0" max="2" value="1" />
        </p>
      </div>
      <div class="col s12">
        <p>N.B. Rate and Pitch only work with native voice.</p>
      </div>
    </div>
    <div class="row">
      <div class="input-field col s12">
        <textarea id="message" class="materialize-textarea"></textarea>
        <label>Write message</label>
      </div>
    </div>
    <a href="#" id="speak" class="waves-effect waves-light btn">Speak</a>
  </form>  
</div>

<div id="modal1" class="modal">
  <h4>Speech Synthesis not supported</h4>
  <p>Your browser does not support speech synthesis.</p>
  <p>We recommend you use Google Chrome.</p>
  <div class="action-bar">
    <a href="#" class="waves-effect waves-green btn-flat modal-action modal-close">Close</a>
  </div>
</div>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.1/js/materialize.min.js"></script>

Thanks a lot!! Greetings

解决方案

Well, after search and search finally I found the solution and it´s very very simple...

In PC Chrome, the lang of the voice goes implicit in the voice packet but in Mobile Chrome the lang must be specified explicit in the SpeechSynthesisUtterance object.

So for the example it works adding the line

  msg.lang = voices[$('#voices').val()].lang;

If someone needs help, I'm ready.

Greetings.

这篇关于在android webview上选择文本到速度的语言的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
移动开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆