eSpeakを調べていると、MBROLAという音声合成のプロジェクトを見つけた。世界中の音声が用意されていて、これで使える日本語音声も三種類公開されている。MBROLAのプログラムに音素で表記された文章を与えると、それを音声として読み上げてくれる。これはとても面白い。ということで、漢字仮名交じりの日本語をこれで使える音素に分解するスクリプトを作ってみることにした。
探してみると、既にこのようなプログラムは書かれていて、muDaTTS V0.2という名前で公開されていた。これはRubyというプログラミング言語で記述されていて、OSはlinux向けに書かれていた。これはとてもよくできていて、日本語の文書を渡すとその通りに発音してくれる。ただし抑揚はつけていないので、棒読みになる。
これをNVDAでも使えるようにと思って、NVDAを記述しているPythonというプログラミング言語で書き直してみた。結局まだどう組み込めばいいのかもわからないので、まだまだNVDA対応などではないけれど、とりあえず漢字仮名交じり文を音素に分解できるようになった。出力されるファイルをMBROLAのプレイヤーで開くとちゃんと棒読みで喋ってくれる。muDaTTSは数字の羅列をちゃんと日本語の数として読んでくれる。この再現にはかなり手こずったが、なんとかこちらでも読めるようになった。
基本的な部分はRubyからPythonへの翻訳なので原形をとどめているところもあれば、こんなふうにかなり変更してあるところもある。muDaTTSはアルファベットが読めなかったので、変換辞書を作って対応してみた。単語の日本語での読み方が用意してあればそれで読み、単語が分からないときは綴りを読むようにした。この辞書へは英単語以外も登録できる。muDaTTSでは、漢字から仮名への変換にChaSenというソフトを使っていたが、後発のmeCabというソフトを使ってみたかったので、そちらを使うように書きかえた。またkakasiというプログラムを仮名からローマ字への変換に使っていたが、ここのアルゴリズムを考えるのは面白そうだったので仮名文字から直接音素記号をはき出すように自分で書いてみた。
最終的にはこのスクリプトだけで、しゃべり出してくれることを目的としているけれど、まだMBROLAの扱い方が分からないので、今のところは日本語テキストを標準入力に与えると、音素に分解したテキストファイルを標準出力に吐きだすようになっている。ここで使われている音素の記号は後述するJP2で使われているものである。
とりあえず名前はPyDaTTSとしてみた。ダウンロードは次のリンクからできる。バージョンは0.5。WindowsXPのみ対象。
→ダウンロード PyDaTTS.zip
解凍するといろんなファイルが出てくる。
※注意。スクリプトやバッチファイルもファイルの内容を理解してから実行してください。自己責任でご利用ください。ウィルス検査してからUPしてあります。しかし念のため確認してください。
これを動かすためには、四つのソフトがインストールされている必要がある。
・Python 2.5.1 Windows installer
・mecab-win32 0.96
・package (1.8 Mb) for using Mbrola with Windows
・jp2: Japanese Female (5.6Mb) MBROLA用日本語音声JP2
それぞれ以下のサイトのダウンロードページからダウンロードする。リンク先にインストールの指示もあると思うので、それにしたがって入れていけばいい。
・Python Programming Language -- Official Website
・MeCab: Yet Another Part-of-Speech and Morphological Analyzer
・The MBROLA Project
MBROLAのダウンロードページの下の方にJP2も用意されている。JP2を解凍したものをMBROLAがインストールされた場所にコピーする。コピーした中の付属のphoファイルをダウンロードすると、音声登録の指示が出るので、それにしたがって登録すればいい。
それから、今回は使わなかったけれど、muDaTTSでも使われている有名な形態素解析器ChaSen、と漢字かな変換プログラムkakasi
・ChaSen -- 形態素解析器
・KAKASI - 漢字→かな(ローマ字)変換プログラム
はっきりいって、これはまだプログラムの分からない人には扱えない。これが一般の人向けに利用できるようになるのはまだ当分先だろう。それを作るのは僕である必要もない。
バッチファイルを入れてあるので、「text.txt」に適当な文章を書いて、play.batをダブルクリックすれば、標準的なMBROLAのインストールをしていれば、そしてJP2という日本語音声を入れてあれば、たぶんしゃべり出してくれる。いろいろパラメータをいじるとJP2のサンプルのようにそれなりに抑揚もつけられるのだけど、その数値の意味をまだ理解していないし、たぶん難しいので、棒読み。
今回作ったサンプル音声は以下のリンクから聞くことができる。
・本日は、晴天なり。
・平成17年10月1日に調査された日本の総人口は、127,767,994人です。
「本日は、晴天なり。」に対して出力されるテキストの内容
_ 300
h 22
o 178
n: 200
dZ 80
i 120
ts 22
u 178
w 22
a 178
_ 80
s 40
e 160
i 200
t 22
e 178
n: 200
n 32
a 168
r 22
i 178
_ 200
_ 300
上記以外でとてもお世話になったページ
ctypes で MeCab 0.9rc6 を使う (2006/01/14)
Zaurusで日本語音声合成 MBROLA+muDaTTS