(実践編)Zaurusで日本語音声合成 MBROLA+muDaTTS
だれでもmuDaTTSとMBROLAによるZaurus上での日本語音声合成ができるよう、再現性を高めた記事を書いてみました。
はけさんの記事も参考になると思います。
MBROLAと音素ファイルjp2のパッケージを作りました。金銭の授受を伴わない再配布は自由とのことなので。
muDaTTS.rbはなりゆきで改変したので、本版はzmuDaTTS.rbと名乗ることにしました。
ライセンスはオリジナルに倣うことにします(記載がありませんが)。
必要なもの
- zmuDaTTS
- 「zmudatts_0.2_arm.ipk.bin」をダウンロード(v 0.2に差し替えました)
- Ruby
- Ruby 1.8.5-p12 (FocVさんのPrivate Packagesより)
- KAKASI
- KAKASI 2.3.4-3 (FocVさんのPrivate Packagesより)
- Ruby/kakasi拡張モジュール
- ruby-kakasi 20020928 (FocVさんのPrivate Packagesより)
- ChaSen
- ChaSen 2.3.3 (FocVさんのPrivate Packagesより)
- ipadic
- IPADIC 2.7.0 (FocVさんのPrivate Packagesより)
- MBROLA
-
以下のどちらかだけでOKです。通常はダイナミックリンク版で動くと思いますが、ダイナミックリンク版でダメならスタティックリンク版を試してみてください。いずれも「/opt/QtPalmtop/bin/mbrola」で入りますので、注意してください。
ダイナミックリンク版「mbrola_3.01h_arm.ipk.bin」をダウンロード
スタティックリンク版「mbrola-static_3.01h_arm.ipk.bin」をダウンロード
- 音素ファイルjp2
-
「mbrola-voice-jp2_0.1_arm.ipk.bin」をダウンロード
「/opt/QtPalmtop/lib/voices/jp2」で入ります。 - SoX
- sox 12.18.1 (FocVさんのPrivate Packagesより)
インストール
「必要なもの」に挙げたものを全部インストールします。
全部パッケージなので難しいことはないはず。
ただ、ipadicはサイズが大きくて、システムの状態によってはインストールが失敗することがあると思います。
僕自身も最初は失敗して、システムをまっさらにした状態では成功という経験をしました。
どうしてもダメな場合は、tarで解凍して手で入れる感じでしょうか(他にいいパッケージの展開方法があるような気がしますが)。
試してみる
テキストファイルを用意します。一言程度の短い文章推奨。
エンコーディングはEUC-JPにします。(後で何でもOKなように直します)直しました。「zmudatts_0.1_arm.ipk.bin」を同名の修正したファイルに差し替えました。
例えば/home/zaurus/test.txtに保存したとします。
ターミナルを起動。以下のコマンドを打ちます。
speak test.txt
しばらくするとしゃべり始めるはず。
ぶっちゃけメモリ的に厳しいので、swapをONにするか、起動中のアプリケーションを落としてから試してください。
しゃべらない単語がある場合は、zmudattsをインストールすると入る/home/zaurus/Documents/Text_Files/zmudatts_wordlist.txtに単語登録してください。
形式は見ての通りですが、
単語<TAB>よみ
です。単語は正規表現として解釈しますので、よく分からない人で半角記号を使う場合は、それぞれバックスラッシュ(円マーク)を直前に付けてください。
基本的に記号は読まないので、読ませたい場合は全部登録してください。
インストール時にzmudatts_wordlist.txtが存在している場合はzmudatts_wordlist_old.txtとしてバックアップしますので、しかるべき処置をしてください。
あとがき
muDaTTS.rbには、ChaSenが読めない未知語を、かな/カナであっても読まない問題があったので対処しました(未知語は、かな/カナであると見做す強引な方法なので、問題出るかも)。
また、記号類も一切読んでくれないので、単語登録できるようにしました。
前述の通り、/home/zaurus/Documents/Text_Files/zmudatts_wordlist.txtから読みます。
LinuxDevices経由での音出しを断念して、muDaTTSからはマクロの出力にとどめ、soxを使った再生に切り替えました。
一連の処理をするシェルスクリプトspeakを添付しました。
全部一本のパイプにつなぐこともできましたが、メモリ的に厳しいのと、処理中/dev/dspが開きっぱなしになるのもどうかと思ったので、$HOMEにテンポラリファイルを書くことにしました。
Zaurus向けにmuDaTTS.rbを改変(改悪)したので、zmuDaTTS.rbと名乗ることにしました。
TrackBack
TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/13760/13969905
Listed below are links to weblogs that reference (実践編)Zaurusで日本語音声合成 MBROLA+muDaTTS:

Comments
本当にしゃべっちゃったよ・・・・・。
SL-C860でipadicを手動で入れたのと、toeucがnilを引数に取れないとかのエラーが出たものでzmuDaTTS.rbの最後から五行目l.comp!.toeucをl.toeucに書き換えました。インストールファイルが巨大なので、何度かインストールに失敗しましたがやり遂げました。
感涙です。
ところで、単純に読みに分解するならkakasiだけでは何とかなるような気がするのは素人考えでしょうか?
Posted by: Tel Ohtsuka | 2007.02.20 at 06:21 PM
お疲れさまです。追試ありがとうございます。
うーんすいません。間違いには気付いてました(行きがけの電車の中で直した)。
>エンコーディングはEUC-JPにします。(後で何でもOKなように直します)
何で文字コード変換できないんだろう? と謎に思っていました。
「zmudatts_0.1_arm.ipk.bin」は、そこを直した同名のファイルに差し替えておきました。ということで、読ませるテキストはkconvが対応している文字コードなら何でもOKになったはず。
破壊的メソッドの後にはメソッドを続けられないんですね。そりゃあそうだろう、という気がしますが。
ちゃんとソースは追いかけていませんが、数詞を読むなどのギミックがあるので、構文解析は必要なのだと思います。
あと、どこまでを一音と見るかとか。
asahi.comのヘッドラインを読ませるなどしてみると、まだまだな感じですね。
しかし、ChaSenかKAKASIの食うメモリがハンパ無くて、よくターミナルごと逝きます。辞書をガツガツ読み込んでいるんでしょうね。
ChaSenとKAKASIが同時に動いているロジックなら、分割するとかでマシになるのかな。MBROLAの処理は、それらと比較するとそれほど重くないです。
どうせオンラインからリソースをひっぱってきて読ませるなら、MBROLAのマクロに展開した状態でFeedする、なんてのも面白いかもしれないですね。自分用なら。
Posted by: moyashi | 2007.02.20 at 07:00 PM
久しぶりに何となくMBROLAを検索したら懐かしいキーワードが上位にいたので脊髄反射でコメントしてみます。
記号や略語の読み上げとか、muDaTTSいじり始めたときはやりたいと思っていたはずですが、何となく声が出ちゃったところで余裕がなくなってそのまま放置してしまってます。
Chasen+kakashiなのは仮名漢字交じり文をローマ字表記に分解するときに何か手を抜きたかったから両方使っていたはずです。遙か昔なのでよく覚えていませんが。
Posted by: yos | 2007.10.26 at 04:21 PM
おお、何と作者様からコメントを賜るとは!!
素晴らしいスクリプトを作っていただいて、ありがとうございます。
おかげさまでとても楽しめました。
muDaTTSが無ければLinux Zaurusが日本語でしゃべることは無かったでしょう。
またMac OS X上でも動かそうと思っていたところです。
日本語に対応したのフリーの音声合成ソフトウェアは選択肢が少ないので、MBROLAのポテンシャルを引き出したmuDaTTSはとても意義のあるものだと思っています。
研究がんばってください!!
Posted by: moyashi | 2007.10.27 at 07:50 AM