JNIはJAVAからC++で作ったDLLを利用する技術です。これを使ってWindowsの音声エンジンを呼び出してみます。音声関係のSDKはいろいろあるのですが、今のところ無料で誰でも手っ取り早く使えるものと言えば、以前ここでも紹介したCatwalk SDKが思いつきます。SDKはKazusoftさんのCatwalkページの下の方に置いてあります。
JNIについては、JavaでHello WorldのJNI編を参考にしました。JAVAの開発環境の設定なども詳しく書いてあります。
CatwalkSDKを使うためには、上記のページにあるサンプルのかわりに下の二つのファイルを使います。
・CatWalkJNI.java
public class CatWalkJNI {
static {
// ライブラリのロード
System.loadLibrary("CatWalkJNI");
}
// ネイティブメソッド宣言
public native void sayHello();
public static void main(String[] args) {
CatWalkJNI catwalk = new CatWalkJNI();
// メソッド実行
catwalk.sayHello();
}
}
これを、JAVACコマンドでclassファイルを作って、JAVAHコマンドでC++のヘッダを作ります。この辺も「JavaでHelloWorld!」さんのページの手順通りです。
・CatWalkJNI.cpp
#include "CatWalkJNI.h"
#include "CTWKManipDll.h"
JNIEXPORT void JNICALL Java_CatWalkJNI_sayHello(JNIEnv *env, jobject obj ){
CatwalkSimpleSpeechA("Catwalkでこんにちわ",
CWVOICE_READING,0,CWPRIORITY_NORMAL);
}
このC++のソースをDLLにします。参考にしたページでは、コンパイラにbccを使ってあったんですが、それだとうまくいかなかったので、調整するのも面倒なのでVisualC++6でコンパイルしました。
単純なサンプルなので、しゃべる文字列は固定してます。これを改造していろんな文字列を渡せばそれを喋るようなプログラムは簡単にできるでしょう。ただしJAVAの文字列はシフトJISではないので、JAVA側かC++側のどちらかで変換する必要があります。