2010年03月09日

最終的に mbrola.exe を使うことにする

MBROLAサイトではWindows用のMBROLAバイナリとして、MBROLA toolsというパッケージが公開されています。
Mbrola Tools

このパッケージを実行すると、いくつものファイルがインストールされます。
C:\Program Files\Mbrola Tools には ツールやドキュメント、インターフェイスソースコード、そしてサンプルコードが入ります。また C:\Windows\System32 には mbrola.dll、mbrplay.dll の2つのDLLがコピーされます。

WindowsでのMBROLAのプログラミングをする場合は、英語で書かれたドキュメントをよく読み、サンプルコードを参考にしながらDLLを操作するプログラムを書くことになります。前回までmmtts.pyに同梱していた pho2wav.pyd も mbrola.dll を使って wavファイルを生成するプログラムでした。

この pho2wav.pyd を作るにあたってはいろいろ紆余曲折があります。もう一つのDLLである mbrplay.dll には、MBR_Play、MBR_Stop、MBR_WaitForEnd、MBR_IsPlaying といった便利な関数が定義されています。一般的なTTSを使ったプログラムを書いたことがある人ならば、この関数名を見ただけでわかるでしょう。もちろん、MBR_Play 関数には、非同期再生やコールバック関数の登録機能もあります。これらの機能を使えば簡単に音声合成アプリを作ることができるはずです。本当はこちらのDLLを使うためにpydファイルを作ろうとしました。しかし、これがどうやっても Python2.6 で使えるようにはなりませんでした。VC++2008でコンパイルして実行するとレジストリエラーが出てしまいます。VC++6 だとなんとかうまくコンパイルでき、単体で動かすことができるのですが、それをPythonから呼び出す段になると、やっぱりレジストリエラーが出てしまいます。それで困り果てて、結局諦めて、mbrola.dll を使うプログラムを書くことにしました。こちらを使ったプログラムだとなんとかPythonと組み合わせても動きます。しかし完全ではありません。長文を読ませると、音声にノイズが出てきて、意味不明の音素の組み合わせを読み込んで、エラーで停止してしまいます。 そのため pho2wav.pydの内部では文章を短く区切って対処していました。とりあえずそうやって音素のスクリプトから安定して音声ファイルを作れるようになりました。

ところが、FreeTTSでMBROLAを使う資料を読んでいると、次のやり取りを見つけました。
http://sourceforge.net/projects/freetts/forums/forum/137669/topic/1219083

なーんだ。DOS版が使えたのか。それも linuxのコマンドラインスイッチと同じものが使える。

そういうわけで、pho2wav.pyd を組み込むのは廃止です。代わりに、mbrola.exe を使います。pydファイルの作り方を覚えたので全てが無駄ではありませんでしたが、このpydを作るための悪戦苦闘は何だったのだろう。


mbrola.exeは、MBROLAサイトのダウンロードページにある PC/DOSリンクでダウンロードします。ダウンロードされる mbr301d.zip を展開し、中にある mbrola.exe をmmtts.pyと同じ場所に置くか、パスの通った場所におけば使えます。

mbrola.exe 利用版 mmtts.py
ダウンロード:mmtts094.zip


いろいろ書いてきましたが、MBROLAについてはこの辺で終わりにして、今後はしばらく、できるかどうかわかりませんが、 open jtalkを使って Linux 上の Fire Voxでも日本語がしゃべれるようにすることに時間を割きたいと思っています。


posted by takayan at 03:25 | Comment(0) | TrackBack(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。