2010年09月18日

Open JTalk の VC++2008 用ソリューションファイルを作ってみた。

Open JTalk を Windows環境でビルドしやすいように、ソリューションファイルとプロジェクトファイルを作りました。
これまでは以前作ったnmake用の簡単なMakefileで済ませていましたが、せっかく便利なVisualStudioの開発環境があるのですから、それを利用できるようにしてみました。
できるかぎり、ソースの改変なしに必要なアーカイブの展開だけでビルドできるようにしてみました。

興味がある方は、自己責任でお使いください。
↓↓↓ダウンロード↓↓↓
http://neu101.up.seesaa.net/etc/open_jtalk_v9_sln-1.01.zip
(追記 2010/09/26)
文字セットを変えられるようにちょっとだけ修正しました。pythonがインストールされている場合、expand.bat の先頭にある変数 CHARSET の値を変えると、pythonスクリプトで文字セットを自動的に変換する処理を加えました。
標準は shift_jis です。これを utf_8、euc_jp に変えられます。他の表記は受け付けません。
(追記終わり)

これは Visual C++ 2008向けのファイルです。Professional版、Express版で試しています。
Visual C++ 2010 Express での動作も確認しました。ただし変換ウィザードを使って変換の必要があります。またソースを2箇所編集する必要があります。mecabのソースの dictionary_rewriter.cpp 、viterbi.cpp の先頭のほうに #include <iterator> を挿入します。

なお、今回確認したプラットフォームは Windows7、32ビット版です。他の Windows だとまた違ってくるかもしれません。


さて、利用法です。


まず必要なものとして、Microsoft Visual C++ 2008 か Microsoft Visual C++ 2010 です。
無償のExpress版は次のリンクからダウンロード可能です。
VC++2008 - http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/
VC++2010 - http://www.microsoft.com/japan/msdn/vstudio/express/

それとアーカイブの展開用に 7-zip も必要です。同梱しているバッチファイルは7zipの存在を前提に書いています。

必要なものがそろったら、先のアーカイブを適当なところで展開します。すると4つのファイルが現れます。
open_jtalk_vc9_shift_jis-1.00.zip
expand.bat
testsjis.bat
test.txt


これらのファイルと同じところに Open JTalk の関連ファイルを4つダウンロードして展開せずに配置します。

まず、Open JTalk本体のソースコード、変換辞書、HTS音声
http://open-jtalk.sourceforge.net/
3つのファイルは、このページからそれぞれ次のリンクを開いてダウンロードします。

Open JTalk : Source Code
Dictionary for Open JTalk : Shift-JIS
HTS voice : Acoustic model

残りの hts_engine API は次のリンクからソースコードをダウンロードします。
http://hts-engine.sourceforge.net/

現在(2010/09/18)のファイル名は、次の通りです。
open_jtalk-1.01
open_jtalk_dic_shift_jis-1.00
hts_voice_nitech_jp_atr503_m001-1.01
hts_engine_API-1.03
バージョンが進んだり、ファイル名が変わった場合には、expand.bat や testsjis.bat 内の名前を修正します。

全てのファイルがそろったら、expand.bat を実行します。これでアーカイブファイルが展開され、ソリューションファイルやプロジェクトファイルも配置されます。
しばらく待って、このバッチファイルの実行が終わったら、open_jtalk フォルダ内に、open_jtalk.sln があるので、これをVC++で開きます。VC++がインストールされていれば、ダブルクリックで開きます。VC++を起動させた後、「ファイル」メニューの「開く」から、ソリューションを開いてもかまいません。
(※VC++2010の場合、このとき変換ウィザードが起動します。変換終了後、mecabのソースの dictionary_rewriter.cpp 、viterbi.cpp の2つのファイルの先頭部分に#include <iterator> の行を追加します。)

無事開くことができれば、あとはソリューション構成をReleaseにして、F7キーを押してソリューションのビルドを実行すれば、アーカイブを展開した場所に open_jtalk.exe が生成されます。
うまくビルドされていれば、 testsjis.bat を実行すると発音してくれます。text.txt の内容を書き換えると、別なことをしゃべります。


実験的ですがDLLも作成できるようにしています。ソリューション構成をRelease_DLL、Debug_DLLにすると、DLL を使った open_jtalk.exe が生成されます。

ただこれはDLLを作る最初の一歩で、DLL化できるかソリューション構成を作って試しただけのものです。まだ実用的ではありません。少なくとも、構造体へのポインタが必要だという仕様は変えなければいけないでしょう。このままだと他のプログラミング言語からの利用が面倒です。所定のフォルダに音声データや辞書ファイルがあればそれを利用するとか、文字列で音声化するテキストを渡せるとか、そういうふうにしないと実用的にはならないでしょう。扱いやすいようにAquesTalkのDLLと全く同じ関数群を用意するとか、いっそのことSAPI5に対応させるとか、そうすると面白いかなと思っていますが、まだ何もしていません。


拍手する
posted by takayan at 21:48 | Comment(4) | TrackBack(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
こんばんは。ご無沙汰です。

なんか、相変わらず凄いですね。

知っているかもしれないですが、SAPI5相当の日本語合成エンジンが
マイクロソフトから出ました。

微妙に違うらしく、SAPI5用のソフトは使えないそうですが、
声は割りときれいですよ。
http://denspe.blog84.fc2.com/blog-entry-103.html
Posted by a at 2010年09月19日 19:49
aさん、お久しぶりです。
microsoft speech platform の情報ありがとうございます。実は偶然にも、aさんのコメントを見る直前に知りました。確実に使える日本語音声があるというのはいいですね。
Posted by takayan at 2010年09月19日 21:05
初めまして。少々音声合成エンジンに興味があり、調べていたらここに来ました。

アーカイブに同梱のバッチファイル、とありますが、見つからないのはどうしてでしょうか?

当方の勉強不足なら申し訳ありません。
Posted by wacky at 2010年09月24日 00:15
wackyさん、ご指摘ありがとうございます。
こちらの間違いです。ご迷惑おかけしてすみません。間違って中身のほうをアップロードしていました。
Posted by takayan at 2010年09月24日 01:39
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


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