« (修正)Zaurus無線LAN自動再接続スクリプトwlan-re-establish 2007.02.10版 | Main | Zaurus Ruby/Qteとruby-sqlite3で簡単データベースアプリ »

2007.02.14

Zaurusで日本語音声合成 MBROLA+muDaTTS

このエントリには続編があります。こちらをどうぞ。(実践編)Zaurusで日本語音声合成 MBROLA+muDaTTS

Linux Zaurusで日本語テキスト読み上げをやってみました。

以前紹介したMBROLAmuDaTTSです。

MBROLAは多言語対応の音声合成エンジン、muDaTTSはMBROLAで日本語を発声させるためのマクロを生成するプリプロセッサです。MBROLAとmuDaTTSの組み合わせで、日本語で書かれたテキストを合成音声で読み上げすることができます。

今回Linux Zaurusでの動作を確認しました。

再現性に欠けるインストールメモ

Zaurusで動くMBROLAのバイナリ(ソース配布は無し)は、LINUX / Pocket PC版で、中に以下の三つの実行ファイルが入っていますが、

mbrola-linux-strongarm
mbrola-linux-strongarm2
mbrola-linux-strongarm2-static

最初のものは使えないようでした。
実行ファイルのほかに音素ファイルが必要です。マクロを生成するmuDaTTSは、jp2 (jp2: Japanese Female (5.6Mb) Tomohisa Tachiki)を前提としています。jp1では音声生成時にエラーが出ました。

muDaTTSの動作には、Ruby、KAKASI、Ruby/kakasi拡張モジュール、LinuxDevices拡張モジュール、ChaSen、ipadic、そしてもちろんMBROLA、音素ファイルjp2が必要です。Ruby、KAKASI、ChaSen、ipadic、Ruby/kakasi拡張モジュール(ruby-kakasi)はFocVさんのPrivate Packagesから持ってきました(maruさんruby-kakasiありがとうございます)。

FocVさんのところにあるipadicのパッケージは自分の環境ではipkgからもインストールが失敗したので、手で入れました(あなたのZaurusでは大丈夫かもしれません)。

LinuxDevicesのSoundDSPクラスの定数の案配か、muDaTTSからSoundDSPクラスを経由して音声を出すということはできていませんが、

cat test.txt | ~/muDaTTS.rb > test.pho

などとしてマクロを生成した後(不要な部分を削り)、

./mbrola-linux-strongarm2 jp2/jp2 test.pho test.wav

こんな風に音声ファイルを作り、それを、

cat test.wav >/dev/dsp

とすれば音が出ますが、ピッチが速くなっちゃってこのままだとダメ。soxで変換しつつ/dev/dspに流し込んでやるとうまくいくことは知っているんですが、とりあえず今日はここまで。

(02.15追記)SoXのパッケージ作りました。
「/opt/QtPalmtop/bin/sox」と、「/opt/QtPalmtop/bin/play」が入ります。playはsoxのシェルスクリプトによるWrapperです。

「SoX_12.17.3_arm.ipk.bin」をダウンロード

sox test.wav -t ossdsp /dev/dsp

とやると、MBROLAで作ったwavでも、ピッチがちゃんとした状態で音が出ます。SoXって高機能な音声ファイル加工ソフトで、コーラス、フランジャー、エコー、ローパスフィルタ、バンドパスフィルタ、ハイパスフィルタなどをかけたりが可能です。音版のImageMagickのconvertみたいな感じです。

母艦にてlameで、

for i in *.wav;do lame $i `basename $i .wav`.mp3;done

みたいにして変換したものをアップしておきます。まとめると、

テキスト->ChaSenで形態素解析->KAKASIでローマ字に変換->muDaTTSでMBROLAのマクロ生成
 ->MBROLAでマクロから音声を合成->/dev/dspで再生

といったフローになります。一言程度でもChaSen->KAKASI->muDaTTSのところで数秒〜10秒ぐらいがかかります。

サンプル音声

抑揚が無い以外は、高品質だと思います。

「メールがモヤシさんかから到着しました」

「ザウルスで日本語音声合成ができました」

「この1時間のアクセス数は23件でした」

ココロクのエントリ「MBROLAで日本語音声合成」にコメントが付きました(自虐)

「グ」でエラーが出てしまうので、「ココロク」でやってみました。

僕の脳内は妄想でいっぱいです。
ニュースの音声ティッカーを作ってCronInetで定期巡回させて〜などといろいろ考えてます。

mpfe、Ruby/MPlayerなるものがあったので、TCP/IP経由でメソッドを実行できるようサーバ化すれば、読み上げ時に演奏を止める、といったこともできますなー。(Ruby/QteでQcop受信実行できるpublicなslotって実現できるんですかね?)
“iPod DJ Mixer”「DJ-2.20」でiPodとZaurusの音をミックスしてしまうという手もありますね。

DTalker Mobile Ver3.0 for Windows Mobileなるものがとても気になります。

そのうちドキュメントトーカ開発システム 日本語音声合成エンジン for Windows CEを買ってみたいですね。.NETなら手が届きます。

ところで、.NET+WMでスリープから起きて何かして、またスリープ移行というCronInetみたいな動作ってできるんでしょうかね。API等をご存じの方がいらしたら教えてください。

(2007.2.18追記)
CeRunAppAtTimeでできるようですね。それはObsoleteで、今はWindows CE 通知 API(CeSetUserNotificationEx)に関連APIが統合。.NET Compact Frameworkからも使えるようです。

参考

通知アプリケーションと時刻指定アプリケーション
スケジューラの使用とユーザーへの通知

|

« (修正)Zaurus無線LAN自動再接続スクリプトwlan-re-establish 2007.02.10版 | Main | Zaurus Ruby/Qteとruby-sqlite3で簡単データベースアプリ »

Comments

ruby-kakasi のパッケージを用意しておきました。

ちなみに項目は作っていませんでしたが、sox(-12.18.1) のパッケージも辞書ツールの関係で用意してました。
ChaSen, ipadic の利用者がいるとは思わず、放置していました。パッケージの不具合は申し訳ないです。

それにしても、ザウルスで日本語音声合成も可能だとは思ってもいませんでした。

Posted by: maru | 2007.02.17 at 10:00 AM

maruさんいつもお世話になっております。
Zaurus環境の全域にわたって成果に依存しております。
maruさんの成果が無ければ、僕にとってのzaurusの価値は1/100になっていたことでしょう。
今後も著作購入等で還元したいと思っております。

ipadicのエラーは、サイズが大きいということもありますし、また、自分ローカルな問題の可能性が高いので「自分の環境では」と書いておきました。

soxはfeedにご用意いただいていることを確認しました。feedを使う習慣が無いもので……。

ruby-kakasiパッケージありがとうございます!
ruby-kakasiのコンパイルには、恐らくrubyをコンパイルした環境が必要だと思ったのでズルをしてしまいました。
これで追試をする人が楽になると思います。
改めて再現性を高めた形でエントリしたいと思います。

日本語音声合成ができると、いろいろ妄想が膨らみます。
その前にmuDaTTS.rbの変な挙動をどうにかしないと……。

後はとりあえずでも動くような実用的なサンプルを……。

Posted by: moyashi | 2007.02.17 at 03:52 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/13760/13902339

Listed below are links to weblogs that reference Zaurusで日本語音声合成 MBROLA+muDaTTS:

» Zaurusで日本語音声合成 [徒然な覚書]
Zaurusで日本語音声合成 MBROLA+muDaTTS SL-C3200 に標準搭載されている「Text To Speech」の存在から、その可能性は十分あるとは思っていましたが、まさかフリーな環境で日本語の音声合成をザウルスでやれるとは思いませんでした。ChaSen の利用者なんかいないだろうなぁ〜と思っていたので、ちょっとびっくりしました。 ... [Read More]

Tracked on 2007.02.17 at 10:30 PM

« (修正)Zaurus無線LAN自動再接続スクリプトwlan-re-establish 2007.02.10版 | Main | Zaurus Ruby/Qteとruby-sqlite3で簡単データベースアプリ »