JuliusLibのソースは、パッケージ julius - Julius - OSDNからダウンロードできるソースの、julius-*.*.*\libjulius\にあります。
ディクテーション実行キットのモデルを利用する場合はjconfの-charconvオプションを削除しないと、「ERROR: m_options: wrong argument: "-charconv"」として実行に失敗します。このオプションはjuliusアプリケーションのもので、必要ならば実装する必要があります。
Windowでは、julius-*.*.*\msvc\JuliusLib.slnにあるVisual Studioのソリューション ファイルからコンパイルできます。Windows - Microsoft Visual C++ - 第2章 インストール
ファイルを開いたときに「日本語 (シフト JIS) のエンコードでファイル *** を読み込む際に、いくつかのバイトが Unicode 文字に置換されています。ファイルを保存すると、元のファイル コンテンツが保持されません。」とエラーとなるときには、文字コードを変換します。
julius-simple/julius-simple.cに、JuliusLibの使用法のサンプルがあります。
#include <julius/juliuslib.h> #define MAXBUFLEN 4096 static char outbuf[MAXBUFLEN]; int main() { char* jconffile = "sample.jconf"; // 全体のパラメータ構造体を新たに割り付ける Jconf* jconf = j_jconf_new(); // jconfファイルからパラメータを読み込み、jconf内の各設定インスタンスに値を格納する if (j_config_load_file(jconf, jconffile) == -1) return -1; // jconf設定パラメータを最終的に決定する if (j_jconf_finalize(jconf) == FALSE) return -1; // エンジン インスタンスを、新たにメモリ割り付けする Recog* recog = j_recog_new(); recog->jconf = jconf; // 全てのモデルを読み込み認識の準備を行なう if (j_load_all(recog, jconf) == FALSE) return -1; // 全てのロードされたモデルと設定からエンジン インスタンスを最終構成する if (j_final_fusion(recog) == FALSE) { j_recog_free(recog); return -1; } // 関数をコールバック レジストリに登録する callback_add(recog, CALLBACK_RESULT, result_pass2, NULL); // 設定で選択された A/D-in デバイスを初期化し認識の準備を行う if (j_adin_init(recog) == FALSE) return -1; // 音声入力ストリームを開く // (入力ソースはjconfの代わりに、この関数の第2引数でも指定できる) if (j_open_stream(recog, NULL) < 0) return -1; // 入力ストリームの認識を行う if (j_recognize_stream(recog) == -1) return -1; // エンジン インスタンスを開放する j_recog_free(recog); return 0; } // 第2パスの認識結果の出力 static void result_pass2(Recog* recog, void* dummy) { RecogProcess* recogProcess = recog->process_list; WORD_ID* seq = recogProcess->result.sent->word; int seqnum = recogProcess->result.sent->word_num; WORD_INFO* winfo = recogProcess->lm->winfo; if (seq != NULL) { for (int i = 0; i < seqnum; i++) { printf("%s", charconv(winfo->woutput[seq[i]])); } printf("\n"); } } // 文字コードの変換 char* charconv(char* instr) { unsigned int from_cp = 65001; // 変換前のコードページ unsigned int to_cp = 932; // 変換後のコードページ static wchar_t unibuf[MAXBUFLEN]; if (MultiByteToWideChar(from_cp, 0, instr, -1, unibuf, MAXBUFLEN) <= 0) return instr; if (WideCharToMultiByte(to_cp, 0, unibuf, -1, outbuf, MAXBUFLEN, NULL, NULL) <= 0) return instr; return outbuf; }
jconfファイルの内容を文字列としてj_config_load_string()へ渡すこともできますが、これはコマンド引数を処理する関数のため、コメントを一切含めてはなりません。
JuliusLibを使用したアプリケーションが予期せず終了するときには、終了コードを確認します。そしてそれが1ならば、jlog_set_output()で指定されている場所にあるログを確認します。