eSpeakと日本語

2011/08/24 追記: ここに書いてあることは多分にデタラメを含んでいるから、本当にeSpeakで日本語に対応させたかったら別のちゃんとした文書をあたったほうがよい。

eSpeakはオープンソースのスピーチシンセサイザー。フォルマント合成で音声合成を実現している。
英語をはじめ、ヒンディー語スワヒリ語、中国語など数多くの言語に対応しているが、未だ日本語には対応していない。
既にある言語を元に少しデータを加えれば、日本語に対応させることは比較的容易に思われたので、少し試してみた。

導入

eSpeak: Speech Synthesizer
バージョン1.43のソースコードと、espeakeditをダウンロードしてくる。
Ubuntuの場合は、最初から入っているespeakとインストールされるパスが重なるので、気になる場合はMakefile内のPREFIXを /usr/local に変更してインストールすること。espeakeditはビルドしたままで使える。
その後、ホームディレクトリ直下にespeak-dataディレクトリを作り*1、その中にespeakとespeakeditに付属していたdictsourceとphsourceを置く。

音素テーブル

音素テーブルは ~/espeak-data/phsource/phonemes で、ここから各言語用音素テーブルが呼び出されている。日本語の音素テーブルを含めるため、 ~/espeak-data/phsource/phonemes に次のものを追記する。

phonemetable ja base
include ph_japanese

日本語用音素テーブル をeSpeak: Phoneme tablesや他のファイルを参考にして作成する。

// ~/espeak-data/phsource/ph_japanese
// 抄
phoneme u~
  vowel starttype #u endtype #u
  length 250
  FMT(vnasal/u_n)
endphoneme

phoneme k
  vls uvl stop
  lengthmod 2
  Vowelin f1=1  f2=1700 0 200  f3=-300 80 f4
  Vowelout f1=1 f2=1700 0 200  f3=-300 80 f4 rms=30
  WAV(ustop/k_unasp_, 75)
endphoneme

phoneme S;
  vls pla frc sibilant
  lengthmod 2
  Vowelin f1=0  f2=2700 400 600  f3=300 80
  WAV(ufric/sh_pzd2, 20)
endphoneme

ルール・単語リスト

ディレクトリ ~/espeak-data/dictsource には発音辞書のソースがある。*_rulesファイルには綴りと音素の関係を記述する。*_listや*_extraには単語の音素やその他のプロパティを記述する。eSpeak: Pronunciation Dictionariesを参考にした。

// ~/espeak-data/dictsource/ja_rules
// 抄
.group  k
        k       k
.group  g
        g       Q
     _) g       g
.group  s
        s       s
        sy      S;

ボイスファイル

~/espeak-data/voices に新しいファイル ja を作り、次の内容を記述する。

// ~/espeak-data/voices/ja
name japanese
language ja
gender male

音素・辞書のコンパイル

espeakeditを起動する。
〈Voice→Select Voice〉から ~/espeak-data/voices/ja を開く。
〈Compile→Compile phoneme data〉で音素データを、〈Compile→Compile dictionary 'ja'〉でルール・単語リストをコンパイルする。
Textタブを開いて、上にテキストを入力する。Translateボタンで綴りから音素に変換した後、Speakボタンで発音させる。*2

課題

  • 音素データや音素テーブルが他の言語からの流用なので、日本語の発音とは違っている。日本語の発音に合わせて修正する必要がある。
  • アクセントをどうやって記述するか。
  • 仮名や漢字に対応させる。

まとめ

まだデータをほとんど書いていないので、ローマ字綴りの日本語をなんとか発音するだけだが、きちんとデータを揃えれば日本語も発音できるようになりそうだ。

2月28日追記

アクセント、イントネーションを変えるにはドキュメントにも書かれていないフラグをいじったり、最悪プログラムを書かないといけないみたいです。ちょっと険しそう。

*1:espeak-dataのパスはespeakeditから変更するか、設定ファイル ~/.espeakedit を書き換えることで変更できる。

*2:初回は出力されるwavファイルのパスを聞かれるので適当に選択する。