前回、hts_engine_API の最新バージョンを間違えてしまったので、書き換えたものを作ろうとしたのですが、折角なのでバッチファイルの内部でバージョン番号を書き換えないでいいものを作ったほうが便利そうだったので、そうしてみました。
さらに、以前ソルーションファイルを作って、VC++を起動してビルドできるようにしていましたが、そのファイルも今回の成果をいろいろ追加して入れてみました。VC++2008用ですが、2010で開けば自動的に変換するので利用できます。
ojtalk.bat の仕様も変えて、他の音声に切り替えやすいようにしてみました。あとで説明しますが、音響モデルのフォルダに省略時のパラメータを書いたテキストがあれば、それを使うようにしています。
■ ビルド方法
open_jtalk.exe のビルドには、Visual Studio C++ 2010 か Visual Studio C++ 2008 のどちらかが必要です。2010Express 版でもいいはずです。それからファイルの解凍のために 7zip か tar が必要です。
ファイルは次のリンクからダウンロードします。
展開して、そのフォルダに、Open JTalkのビルドに必要な3つのアーカイブを入れます。リンク先から最新版をダウンロードしてください。
・open_jtalk-*
・hts_voice_nitech_jp_atr503_m001-*
・hts_engine_API-*
最初に、prepare.bat を実行します。すると、アーカイブを展開し、インストール先(標準設定でc:\open_jtalk)に、この時点で転送できるファイルを全て転送してくれます。
prepare.bat で準備がすんだら、make.bat を実行します。すると、各フォルダーの Makefile.mak の手順に従い open_jtalk.exe を生成し、インストール先のbinフォルダーに転送します。これで終わりです。
ちゃんと動くかどうかは、インストール先にある ojtalk.bat をダブルクリックして実行すれば確かめられます。「open jtalk」としゃべってくれれば、とりあえずOKです。一度ojtalk.bat を実行すると、インストール先に text.txt が作られるので、このファイルに文章を書き込み、その都度、ojtalk.bat をダブルクリックすると、その内容を読み上げてくれるはずです。
■ ソルーションファイル
make.bat を使えば、十分なのですが、open_jtalk\open_jtalk の中にある open_jtalk.sln を使うと、Visual Studio の画面を開いて、ビルドできます。ただし、通常は、ソルーション構成は Release か Debug、ソルーションプラットフォームは Win32 にしてください。必要ないとは思いますが、他の設定を利用するには、prepare.bat の実行前に、 build.info を編集しておく必要があります。
なお、Visual Studio を通して辞書をコンパイルすると相当時間がかかります。気長に待ってください。
■ 利用例
今回付属してある ojtalk.bat では、インストール先のvoiceフォルダ(デフォルトだとc:\open_jtalk\voice)に音響モデルのファイルをフォルダごと入れるようにしています。さらにその中に voice.info というファイルがあれば、省略時の -s、-p、-a、-g、-b、-u、-z、-jm、-jf、-jl の値があるとします。mei の利用の仕方は以前紹介しましたが、例えば、フォルダ mei_normal の中に、次の内容の voice.info を入れておきます。
s=48000
z=6000
p=240
a=0.55
jm=0.7
jf=0.5
jl=1.0
音響モデルの指定を –vname でできるようにしたので、次のコマンドで Mei が挨拶します。
ojtalk.bat –vname mei_normal こんにちは
さらに、Windows スクリプティングホスト(wsf) を使うと次のようなこともできます。
<job id="time">
<script language="JScript">
d = new Date();
m = d.getMinutes();
m = (m=="0")?"ちょうど":m+"分";
WScript.CreateObject("WScript.Shell").Run("c:\\open_jtalk\\ojtalk.bat -vname mei_normal "+d.getHours()+"時"+m+"です。",0,true);
</script>
</job>
このような内容の time.wsf というファイルを作って、ダブルクリックすると、時報を伝えてくれます。
さらに、これをインストールしたフォルダに入れておいて、デスクトップにショートカットを作ります。ショートカットを作ると、そのプロパティを開いてショートカットキーも登録できるようになります。例えば、それをCTRL+ALT+Tなどとすると、このショートカットキーがかぶらなければ、このキー操作でいつでも時刻を教えてくれます。またこのスクリプトを、タスクスケジューラに登録して、繰り返し間隔などを設定すれば、定期的に現在時刻を教えてくれるようになります。
■ ちょっと複雑な設定
普通に使うならば、上に書いた方法で十分ですが、make.bat でテキストの文字セットを UTF-8 や EUC-JP にしたり、x64向けのビルドをする場合は、build.info を書き換えればできるように作っています。ソルーションファイルを使う場合も同じです。
自動でパッチを当てるときは、パッチを当てるかどうかを「=」の右に文字があるかないかで判断しています。ただこの build.info についての説明はあまり必要ないだろうし、説明も長くなるので割愛します。
■ patch コマンドの導入
今回の修正程度ならば、手作業の方が手っ取り早いですが、一応 patch コマンドの導入方法も書いておきます。MinGW/MSYS を利用する方法です。次のサイトから、mingw-get-inst-*.exe という名前のインストーラをダウンロードしてきて実行します。(現時点の最新版は mingw-get-inst-20120426.exe)
MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net
インストール場所は標準のC:\MinGWにします。今回の利用だけならば、コンポーネントは何も選択しなくてもいいです。インストーラの使い方が分からないときは、こちらのサイトに詳しく書いてあります。Windows で MinGW バージョン 20110530 のインストールとテスト実行
インストールが終わったら、次のコマンドを、コマンドプロンプトを開いて実行します。
cd c:\MinGW\bin
mingw-get install msys-patch
これで導入完了。この場所にあれば、PATH を通さなくても、今回のバッチファイルでは patch が実行されるようにしています。ついでに、折角調べたので忘れないように書いておくと tar コマンドは「mingw-get install msys-tar-bin」で入ります。
なお、このように patch コマンドを導入しても、現在のバージョンに対応したパッチが用意されていないと自動でパッチは適用されません。今回用意しているのは、open_jtalk-1.05、hts_engine_API-1.06 向けのパッチです。