2010年02月19日

Open JTalkをVS2008で

ご無沙汰しています。
久しぶりに書いてます。
(2010.08.28 1.01向けに修正)

最近になって、Open JTalkというのを見つけたので、ちょっと試してみました。
OpenJTalkはオープンソース(New and Simplified BSD license)の音声合成システムです。linux向けのものですが、Windowsでもビルドし実行することができます。

参考にしたページは、研究室の片隅で○○を叫ぶの「Open JTalk をVS2005でコンパイルしてみた」と、そこで紹介されていた ja.nishimotz.com の「Open JTalk」です。前者はタイトル通りVisualStudio2005でのコンパイル方法が、後者ではUbuntuとWindowsのCygwin環境での動作例が解説されています。
今回は、手元にVS2008があるので、それでコンパイルしてみました。ちゃんと上記ページと同じwavファイルが作れました。

せっかくなので、そのとき作ったnmake向けの Makefile.mak を公開します。ソースを手を加えずにビルドするための単純なものです。

open_jtalk-1.01_vs_makefile.zip
(20100828 1.01向けに修正)

VS2008PRO向けに作りましたが、無料でダウンロードできる Express Edition の環境でもうまくいきました。それから現在Microsoftで評価版として公開されているVisualStudio2010RCをインストールした環境でも、ソースに2行書き加えればコンパイルできることも確認できました。


それでは、VS2008向けの手順です。分かりやすいようにバッチファイルの内容も書いておきます。

必要なのは以下の4つのファイルです。
hts_engine_API-1.03.tar.gz
hts_voice_nitech_jp_atr503_m001-1.01.tar.gz
open_jtalk_dic_shift_jis-1.00.tar.gz
open_jtalk-1.01.tar.gz

最初の一つは次のページから、
http://hts-engine.sourceforge.net/
残りの3つのは次のページから
http://open-jtalk.sourceforge.net/
持ってきます。
適当な新しいフォルダを作って、この4つのファイルをその中に入れます。

そして今回作ったMakefileを固めた open_jtalk-1.01_makefile.zip も同じフォルダに入れます。

これらの5つのファイルを圧縮解凍ソフトの手順に従って展開します。例えば、7-zipを入れていれば、次のようにしてコマンドラインで展開します。(7-zipのインストール先が違うときは書き換えてください。)
extract.bat
set PATH=%ProgramFiles%\7-Zip;%PATH%
7z x hts_engine_API-1.02.tar.gz
7z x hts_engine_API-1.02.tar
7z x hts_voice_nitech_jp_atr503_m001-1.00.tar.gz
7z x hts_voice_nitech_jp_atr503_m001-1.00.tar
7z x open_jtalk_dic_shift_jis-1.00.tar.gz
7z x open_jtalk_dic_shift_jis-1.00.tar
7z x open_jtalk-1.01.tar.gz
7z x open_jtalk-1.01.tar
del *.tar
7z x open_jtalk-1.01_vs_makefile.zip
展開がすんだら、次のビルド用のコマンドを実行します。
build.bat
call "%VS90COMNTOOLS%\vsvars32.bat"
cd hts_engine_API-1.02
nmake /f Makefile.mak
nmake /f Makefile.mak install
cd ..
cd open_jtalk-1.01
nmake /f Makefile.mak
copy bin/open_jtalk.exe ..
cd ..
最初の行がVisualStudio2008の環境設定です。そのあとhts_engine_APIをビルドして、そのあとopen_jtalkを作ります。
うまくいけば、これで open_jtalk.exeがアーカイブを入れたフォルダに出来上がります。

そして、実行テストです。何でもいいのですが、比較して確認できるように先人を踏襲します。
次の内容のシフトJIS形式でtest.txtと名前をつけて保存します。
新成人のみなさん、おめでとうございます。私も成人したころを懐かしく思い出します。
そして、次の内容のバッチファイル test.bat を作り、同じフォルダに入れます。
@echo off
set VOICE=hts_voice_nitech_jp_atr503_m001-1.00
open_jtalk ^
-td %VOICE%/tree-dur.inf ^
-tf %VOICE%/tree-lf0.inf ^
-tm %VOICE%/tree-mgc.inf ^
-md %VOICE%/dur.pdf ^
-mf %VOICE%/lf0.pdf ^
-mm %VOICE%/mgc.pdf ^
-df %VOICE%/lf0.win1 ^
-df %VOICE%/lf0.win2 ^
-df %VOICE%/lf0.win3 ^
-dm %VOICE%/mgc.win1 ^
-dm %VOICE%/mgc.win2 ^
-dm %VOICE%/mgc.win3 ^
-ef %VOICE%/tree-gv-lf0.inf ^
-em %VOICE%/tree-gv-mgc.inf ^
-cf %VOICE%/gv-lf0.pdf ^
-cm %VOICE%/gv-mgc.pdf ^
-k  %VOICE%/gv-switch.inf ^
-x open_jtalk_dic_shift_jis-1.00 ^
-ow _hoge.wav ^
-ot _log.txt ^
test.txt
test.bat を実行すると、音声が出力されるはずです。フォルダには音声ファイルとログファイルができているはずです。

nishimotz 氏の 上記サイトと同じファイルができたでしょうか?音声をパソコンから出力せずに音声ファイルだけを作る改造の仕方はそのページに書いてあります。


実際ビルドしてみると分かるのですが、ビルド時にメモリ リークの可能性という警告がでてしまいます。音を出してみるのが目的だったので、今回はそのままにしています。本格的に使うときには修正が必要かもしれません。

それから、このプログラムでは内部で MeCab を利用していますが、ソースを確認すると Open_Jtalk 向けに十数か所書き換えらたものが使われていて、本家の libmecab.dll を利用するようにはできていないようです。ビルドの仕方によっては Open_JTalk向け libmecab.dll を生成するようにもできますが、今回は生成しないようにしています。

OpenJtalk は、商用の音声合成に比べれば物足りなさを感じますが、フリーでここまでできれば十分だと思います。開発された方々に感謝します。 今後 Windowsで使いやすいように dll化したり、SAPI5で使えるようにしたり、いろいろできたらいいですね。でももっと興味があるのがLinuxでの利用です。いままでも、制限付きのAquesTalkの試用版を使ったり、MBROLAを使ったりすれば、お金をかけずにLinuxでの日本語の発音もできたのですが、ソースが公開されていなかったり、ライセンス的にいろいろ面倒でした。でもこのOpen_JTalkはオープンソースということなのでいろいろ自由にやれそうです。


最後に、次は参考までに現在評価版として入手できるVS2010RCでのビルド手順です。

ファイルの展開までは上記とまったく同じです。しかしこのままmakeしても途中で止まってしまいます。問題は back_inserter() のようです。回避するには、この関数が現れるファイルの先頭の方に #include <iterator> を挿入すればいいようです。具体的には、mecab/srcフォルダの dictionary_rewriter.cpp 、viterbi.cpp の2つのファイルを修正します。この修正のあと上記のビルド用のバッチファイルの一行目を 「call "%VS100COMNTOOLS%\vsvars32.bat"」に書き換えて実行すれば、open_jtalk.exe が生成されるはずです。


posted by takayan at 23:59 | Comment(8) | TrackBack(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
文字読み上げするのではないのですか。日本IBM女性フェローをNHKプロフッショナルで先日放送にしていました
スキャナーなんかいらなくなりますね
Posted by たかし at 2010年02月21日 10:12
有名なホームページリーダーという音声ブラウザを開発した方ですね。僕も持ってます。こういう内容を扱ったブログ書いているので、名前は聞いたことありました。その回、見逃したので、ちょっと残念です。
Posted by takayan at 2010年02月22日 01:55
これをご存知ですか
「vernoteは、テキストメモや音声ファイル、Webページ、画像などをオンライン上で一元管理したり、各端末に同期できるツール。Webブラウザから使えるほか、PC・スマートフォン向け専用クライアントソフトも提供している。
画像 端末別の利用シェア

 一般公開は2008年6月」
Posted by たかし at 2010年03月03日 20:10
Evernoteのことですよね。
http://www.evernote.com/
それなら知っています。
iPod touchのアプリを探していて知りました。便利なアプリです。
とりあえず必要になりそうな情報を放り込んでいって、強力な検索機能でそれを取り出して使います。いろんな端末に対応していますし、対応していない携帯電話でも、メールを利用して情報を放り込むことができるので、いつでもどこでも情報を収集できます。
極めて個人的な自分しか見れない乱雑なブログのようなものといえるかもしれません。
Posted by takayan at 2010年03月03日 21:23
相互に意思が伝わるのは嬉しいですね。お暇なときにタカヤンさんのコメントを上記のアドレスに頂けないでしょうか。
Posted by たかし at 2010年03月05日 07:25
こんばんは、タカシさん
ブログ見にいきました。複式簿記の記事ですね。
コメントしようと思いましたが、チームメンバーだけしかコメント投稿できないようなので、諦めました。
Posted by takayan at 2010年03月08日 03:46
タカヤンさん、すいません
そうとは知らず・・・

LPのブログラミングでの不等式の表現とか係数行列の対角化などのように、一つのアイデアがイシの生死を分けるのは面白いと思いませんか
Posted by タカシ at 2010年03月11日 08:25
早速に設定変更しました
Posted by タカシ at 2010年03月11日 08:46
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック