Speak.jsはジェネレータを通じて音声を動的に生み出します。対応しているのは英数字のみとなっており、日本語には対応していません。常に動的に生成しているので自由なテキストを読み上げさせることができます。

なんと!JavaScriptだけでテキスト読み上げ「Speak.js」|オープンソース・ソフトウェア、ITニュースを毎日紹介するエンジニア、デザイナー向けブログ

とりあえず「ひらがな」だけ対応してみた。
日本語テキストを読み上げるサンプル ⇒ Speak.js with speakBasho(スピーク芭蕉) Demo

日本語対応プログラム speakBasho.js の中身


var BASHO_DATA = {
  'あ': 'ah',
  'い': 'e',
  'う': 'wool',
  'え': 'eay',
  'お': 'oh',
  'か': 'car',
  'き': 'key',
  'く': 'ku',
  'け': 'k',
  'こ': 'koh',
  'さ': 'sar',
  'し': 'c',
  'す': 'sue',
  'せ': 'say',
  'そ': 'so',
  'た': 'tar',
  'ち': 'tick',
  'つ': 'two',
  'て': 'tea',
  'と': 'toe',
  'な': 'na',
  'に': 'need',
  'ぬ': 'nue',
  'ね': 'ney',
  'の': 'no',
  'は': 'ha',
  'ひ': 'he',
  'ふ': 'foo',
  'へ': 'hey',
  'ほ': 'ho',
  'ま': 'ma',
  'み': 'me',
  'む': 'muh',
  'め': 'may',
  'も': 'mo',
  'や': 'yah',
  'ゆ': 'you',
  'よ': 'yo',
  'ら': 'lar',
  'り': 'lee',
  'る': 'lu',
  'れ': 'ray',
  'ろ': 'low',
  'わ': 'were',
  'ゐ': 'e',
  'ゑ': 'eay',
  'を': 'war',
  'ん': 'unn',
  'が': 'ga',
  'ぎ': 'gee',
  'ぐ': 'goo',
  'げ': 'gay',
  'ご': 'go',
  'ざ': 'the',
  'じ': 'zee',
  'ず': 'zu',
  'ぜ': 'zey',
  'ぞ': 'zo',
  'だ': 'da',
  'ぢ': 'zi',
  'づ': 'zu',
  'で': 'dead',
  'ど': 'doh',
  'ば': 'ba',
  'び': 'be',
  'ぶ': 'boo',
  'べ': 'bay',
  'ぼ': 'bo',
  'ぱ': 'pa',
  'ぴ': 'pee',
  'ぷ': 'pooh',
  'ぺ': 'pay',
  'ぽ': 'po',
};

function basho_translate(text){
  var dst = "";
  for(var i=0; i<text.length; i++){
    if(text.charCodeAt(i) < 128){
      // 英語扱い
      dst += text.charAt(i);
    }else{
      // 日本語扱い
      var a = BASHO_DATA[text.charAt(i)];
      if(a){
        dst = dst + " " + a + " ";
      }
    }
  }
  return dst;
}

昔、Javaで同じようなことしたので、それの移植みたいな。
[ヅ] FreeTTS で日本語に対応してみる

促音とかはもちろん未対応。

Ref.

tags: javascript text2speech

Posted by NI-Lab. (@nilab)