« (修正)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で簡単データベースアプリ »