Julius 4.2
|
特徴量入力プラグインのひな形 [詳細]
マクロ定義 | |
#define | PLUGIN_TITLE "Feature vector input plugin for Julius" |
Required for a file. | |
#define | INPUT_OPT "myfvin" |
関数 | |
int | initialize () |
読み込み時の初期化(任意) | |
int | get_plugin_info (int opcode, char *buf, int buflen) |
プラグイン情報取得(必須) | |
void | fvin_get_optname (char *buf, int buflen) |
入力選択用のオプション文字列を返す(必須) | |
int | fvin_get_configuration (int opcode) |
特徴量のパラメータを返す(必須) | |
boolean | fvin_standby () |
デバイスを初期化する(必須) | |
boolean | fvin_open () |
入力を開く(必須) | |
int | fvin_read (float *vecbuf, int veclen) |
入力からベクトルを読み込む(必須) | |
boolean | fvin_close () |
入力を閉じる(必須) | |
boolean | fvin_terminate () |
中断要求用フック(任意) | |
boolean | fvin_pause () |
停止要求用フック(任意) | |
boolean | fvin_resume () |
認識再開要求用フック(任意) | |
char * | fvin_input_name () |
入力ファイル・デバイス名を返す関数(任意) |
#define PLUGIN_TITLE "Feature vector input plugin for Julius" |
Required for a file.
Optional for a file
Required:
Optional:
参照元 get_plugin_info().
int initialize | ( | ) |
int get_plugin_info | ( | int | opcode, |
char * | buf, | ||
int | buflen | ||
) |
void fvin_get_optname | ( | char * | buf, |
int | buflen | ||
) |
int fvin_get_configuration | ( | int | opcode | ) |
特徴量のパラメータを返す(必須)
この入力プラグインがJuliusに渡す特徴量に関するパラメータを返す. 与えられた以下の opcode ごとに,値を返す.
opcode = 0: ベクトルの次元数 opcode = 1: 1フレームあたりの時間幅(単位:ミリ秒) opcode = 2: パラメータの型
opcode = 2 のパラメータの型は,音響モデルの特徴量との型整合性 チェックに使われる.値は,HTK の特徴量ファイルのヘッダ形式で エンコードされた値を返す.型チェックを行わない場合は, 0xffff を返すこと.
opcode | [in] 要求動作コード (現在 0 のみ実装) |
boolean fvin_standby | ( | ) |
デバイスを初期化する(必須)
この関数は起動時に一回だけ呼ばれる.ここでは入力ファイルの準備や ソケットの用意といった,入力のための準備を行うのに使う.
FALSE を返した場合,Julius は終了する.
JuliusLib: この関数は j_adin_init() で呼ばれる.
boolean fvin_open | ( | ) |
入力を開く(必須)
入力を新規に開く.ファイルのオープン,ネットワーククライアントからの 接続などはここで行う.
FALSE を返したとき,Julius は認識ループを抜ける.
JuliusLib: この関数は j_open_stream() 内で呼ばれる.
int fvin_read | ( | float * | vecbuf, |
int | veclen | ||
) |
入力からベクトルを読み込む(必須)
この関数は入力からベクトルを1つだけ読み込む.この関数は フレームごとに呼ばれ,読み込まれたベクトルはこのあとすぐに認識処理され, また次のフレームのデータを読むためにこの関数が呼ばれる.
入力が終端まで達したとき,ADIN_EOF を返す.このとき,Julius は現在 の認識処理を終了させ,入力を閉じる.
ADIN_ERROR はこの関数内で深刻なエラーが生じた場合に返す.これが返さ れた場合,Julius はその場で異常終了する.
ADIN_SEGMENT を返すことで,Julius に現在の認識を現時点で区切ること を要求することができる.現在の認識処理はこの時点でいったん区切られ, そこまでの認識結果が確定・出力されたあと,次の認識処理が始まりこの 関数が呼ばれる.ADIN_SEGMENT は ADIN_EOF と動作が似ているが, ADIN_EOF が adin_close(), adin_open() を呼んで入力を終了させ るのに対して,ADIN_SEGMENT はこれらを呼ばずに入力を続行する.
vecbuf | [out] 得られたベクトルを格納するバッファ |
veclen | [in] ベクトル長 |
boolean fvin_close | ( | ) |
入力を閉じる(必須)
現在の入力を閉じる.この関数は,入力が終端(EOF)に達したとき(すな わち fvin_read() が ADIN_EOF を返したとき)に呼ばれる.通常,ここでは ファイルを閉じる,ネットワーク接続を切断するなどの処理を行う.
正常終了としてTRUEを返したとき,Julius は adin_open() に戻って 他のストリームを開こうとする. FALSE を返したときは,Julius は 認識ループを抜ける.
JuliusLib: この関数は j_recognize_stream() の最後で呼ばれる.
boolean fvin_terminate | ( | ) |
中断要求用フック(任意)
この関数を定義すると,Julius は中断要求を受け取った際にこの関数を呼び出す. これを使って,Julius の中断・再開と同期した入力同期処理を実装することが できる.(例:入力送信元に対して送信中断要求を出すなど)
中断要求は,Julius がアプリケーションやクライアントより受け取る 認識中断の要求である.具体的には,Julius がモジュールモードで動作して いる時に TERMINATE コマンドをクライアントから受け取ったときや, JuliusLibを組み込んだアプリケーションが j_request_terminate() を 呼んだときに発生する.
中断要求を受け取ると,Julius は現在の認識処理を中断する. 認識途中であった場合,その入力を破棄して即時中断する. 処理の再開は,RESUME コマンドか j_request_resume() の呼び出しで行われる.
この関数は中断要求を Julius が受け取った時点で呼ばれる. 実際に処理が中断した後で呼ばれるのではないことに注意されたい.
boolean fvin_pause | ( | ) |
停止要求用フック(任意)
この関数を定義すると,Julius は停止要求を受け取った際にこの関数を呼び出す. これを使って,Julius の中断・再開と同期した入力同期処理を実装することが できる.(例:入力送信元に対して送信中断要求を出すなど)
停止要求は,Julius がアプリケーションやクライアントより受け取る, 認識の一時停止の要求である.具体的には,Julius がモジュールモードで動作して いる時に PAUSE コマンドをクライアントから受け取ったときや, JuliusLibを組み込んだアプリケーションが j_request_pause() を 呼んだときに発生する.
停止要求を受け取ると,Julius は現在の認識処理を中断する. 認識途中であった場合,その認識が終わるまで待ってから中断する. 処理の再開は,RESUME コマンドか j_request_resume() の呼び出しで行われる.
中断要求 (fvin_terminate) との違いは,認識途中に要求を受けたときの動作が 異なる.中断要求では強制中断するが,停止要求ではその認識が終わるまで 待ってから停止する.
この関数は停止要求を Julius が受け取った時点で呼ばれる. 実際に処理が停止した後で呼ばれるのではないことに注意されたい.
boolean fvin_resume | ( | ) |
認識再開要求用フック(任意)
この関数を定義すると,Julius は停止状態からの認識再開要求の際に この関数を呼び出す.
認識再開要求は,Julius がモジュールモードで動作して RESUME コマンドを クライアントから受け取ったときや,JuliusLibを組み込んだアプリケーション が j_request_resume() を呼んだときに発生する.この再開要求が発生 すると,Julius は停止していた認識を再開する.
注意:この関数は,実際に停止したときに呼ばれるのではなく,Julius が 要求を受け取った時点で,そのたびに呼ばれる.複数回呼ばれることや, すでに動作中である場合にさらにこのコマンドを受け取ったときにも呼ば れることがあることに注意されたい.