2017-06-29 4 views
0

私は本当の答えがなくても何時間も探しています。android webviewでテキストを高速にする言語を選択

テキスト読み上げ機能のデフォルトの言語とは異なる言語を選択することはできますか?

このコードは、PC上のChromeで完璧に動作しますが、Androidのブラウザ上で動作していない:

$(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>

おかげでたくさん! 挨拶

答えて

1

まあ、私は解決策と非常に非常にシンプルなit's ...

PC Chromeの場合

、声のlangは音声パケットではなく、モバイルChromeで暗黙の行くを見つけ、検索した後、最終的に検索langはSpeechSynthesisUtteranceオブジェクトで明示的に指定する必要があります。例えばそれは、誰かが助けを必要と

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

場合は行を追加した作品だから

、私は準備ができています。

ご挨拶。

関連する問題