トップへ(mam-mam.net/)

Javascriptで文字列をブラウザに話させる(しゃべらせる)

検索:

Javascriptで文字列をブラウザに話させる(しゃべらせる)

window.speechSynthesis.speak() を使用するとブラウザに音声読み上げさせることができます。

話させたい文字を入力して「話す」ボタンを押すと話します


ソースコード

<input type="text" id="speech_text" value="ここに入力した文字列をブラウザがしゃべります。" size="50"><br>
<input type="button" id="speech_button" value="話す"> 			

<script>
var voices = [];
//事前に音声一覧を取得する
if(window.speechSynthesis.onvoiceschanged==null){
  window.speechSynthesis.onvoiceschanged = function(){
    voices = window.speechSynthesis.getVoices();
    //音声一覧をコンソールログに出力する場合
    for(i=0;i<voices.length;i++){
      console.log(voices[i].name);
    }
  }
}else{
  voices = window.speechSynthesis.getVoices();
  //音声一覧をコンソールログに出力する場合
  for(i=0;i<voices.length;i++){
    console.log(voices[i].name);
  }
}
function speech(){
  const uttr = new SpeechSynthesisUtterance(document.getElementById("speech_text").value);
  // 話す速度 0.0(遅い)~1.0(標準)~2.0(速い)
  uttr.rate=1.0;
  // ピッチ(声の高さ) 0.0(低め)~1.0(標準)~2.0(高め)
  uttr.pitch=1.0;
  // お話が完了したときの関数
  uttr.onend=function(){
    //alert("お話終了");
  }

  //日本語の音声は、以下のような値から選べる。選ばない場合はデフォルト設定
  /*
  uttr.voice=window.speechSynthesis.getVoices().filter(
    voice => voice.name==='Microsoft Haruka Desktop - Japanese' //FireFox,Chrome
    //voice => voice.name==='Microsoft Nanami Online (Natural) - Japanese (Japan)' //Edgeのみ可
    //voice => voice.name==='Microsoft Ayumi - Japanese (Japan)' //Edge,Chromeのみ可
    //voice => voice.name==='Microsoft Haruka - Japanese (Japan)' //Edge,Chromeのみ可
    //voice => voice.name==='Microsoft Ichiro - Japanese (Japan)' //Edge,Chromeのみ可
    //voice => voice.name==='Microsoft Sayaka - Japanese (Japan)' //Edge,Chromeのみ可
    //voice => voice.name==='Google 日本語' //Chromeのみ可
  )[0];
  */

  window.speechSynthesis.cancel();
  // お話しする
  window.speechSynthesis.speak(uttr);

  //お話の一時停止
  //window.speechSynthesis.pause();
  //お話の再開
  //window.speechSynthesis.resume();
  //お話の終了
  //window.speechSynthesis.cancel();
}
window.addEventListener("load",function(){
  //ボタンを押すと「speech」関数を呼び出す
  document.getElementById("speech_button").addEventListener("click",speech);
});
</script>