Julius 4.2
マクロ定義 | 関数
libjulius/src/adin-cut.c

音声キャプチャおよび有音区間検出 [詳細]

#include <julius/julius.h>
#include <pthread.h>

ソースコードを見る。

マクロ定義

#define TMP_FIX_200602
 Define this if you want to output a debug message for threading.

関数

boolean adin_setup_param (ADIn *adin, Jconf *jconf)
 音声切り出し用各種パラメータをセット
static void adin_purge (ADIn *a, int from)
 テンポラリバッファにある処理されたサンプルをパージする.
static int adin_cut (int(*ad_process)(SP16 *, int, Recog *), int(*ad_check)(Recog *), Recog *recog)
 音声入力と音検出を行うメイン関数
static int adin_store_buffer (SP16 *now, int len, Recog *recog)
 A/D-in スレッドにてトリガした入力サンプルを保存するコールバック.
static void adin_thread_input_main (void *dummy)
 A/D-in スレッドのメイン関数.
boolean adin_thread_create (Recog *recog)
 バッファを初期化して A/D-in スレッドを開始する.
boolean adin_thread_cancel (Recog *recog)
 A/D-in スレッドを終了する
static int adin_thread_process (int(*ad_process)(SP16 *, int, Recog *), int(*ad_check)(Recog *), Recog *recog)
 スレッドモード用メイン関数
int adin_go (int(*ad_process)(SP16 *, int, Recog *), int(*ad_check)(Recog *), Recog *recog)
 入力処理を行うトップ関数
boolean adin_standby (ADIn *a, int freq, void *arg)
 デバイス依存の初期化関数を呼び出す.
boolean adin_begin (ADIn *a, char *file_or_dev_name)
 音の取り込みを開始するデバイス依存の関数を呼び出す.
boolean adin_end (ADIn *a)
 音の取り込みを終了するデバイス依存の関数を呼び出す.
void adin_free_param (Recog *recog)
 音取り込み用ワークエリアのメモリを開放する.

説明

音声キャプチャおよび有音区間検出

音声入力デバイスからの音声データの取り込み,および 音の存在する区間の検出を行ないます.

有音区間の検出は,振幅レベルと零交差数を用いて行ないます. 入力断片ごとに,レベルしきい値を越える振幅について零交差数をカウントし, それが指定した数以上になれば,音の区間開始検出として 取り込みを開始します. 取り込み中に零交差数が指定数以下になれば, 取り込みを停止します. 実際には頑健に切り出しを行なうため,開始部と 停止部の前後にマージンを持たせて切り出します.

また,オプション指定 (-zmean)により DC offset の除去をここで行ないます. offset は最初の ZMEANSAMPLES 個のサンプルの平均から計算されます.

音声データの取り込みと並行して入力音声の処理を行ないます. このため, 取り込んだ音声データはその取り込み単位(live入力では一定時間,音声ファイル ではバッファサイズ)ごとに,それらを引数としてコールバック関数が呼ばれます. このコールバック関数としてデータの保存や特徴量抽出, (フレーム同期の)認識処理を進める関数を指定します.

マイク入力や NetAudio 入力などの Live 入力では, コールバック内の処理が重く処理が入力の速度に追い付かないと, デバイスのバッファが溢れ,入力断片がロストする場合があります. このエラーを防ぐため,実行環境で pthread が使用可能である場合, 音声取り込み・区間検出部は本体と独立したスレッドで動作します. この場合,このスレッドは本スレッドとバッファ speech を介して 以下のように協調動作します.

参照:
adin.c
作者:
Akinobu LEE
日付:
Sat Feb 12 13:20:53 2005
Revision:
1.16

adin-cut.c で定義されています。


マクロ定義

#define TMP_FIX_200602

Define this if you want to output a debug message for threading.

Enable some fixes relating adinnet+module

adin-cut.c116 行で定義されています。


関数

boolean adin_setup_param ( ADIn adin,
Jconf jconf 
)

音声切り出し用各種パラメータをセット

設定を元に切り出し用のパラメータを計算し,ワークエリアにセットします.

引数:
adin[in] AD-in work area
jconf[in] configuration data

adin-cut.c138 行で定義されています。

参照元 adin_setup_all().

関数の呼び出しグラフ:

呼出しグラフ:

static void adin_purge ( ADIn a,
int  from 
) [static]

テンポラリバッファにある処理されたサンプルをパージする.

引数:
a[in] AD-in work area
from[in] Purge samples in range [0..from-1].

adin-cut.c214 行で定義されています。

参照元 adin_cut().

static int adin_cut ( int(*)(SP16 *, int, Recog *)  ad_process,
int(*)(Recog *)  ad_check,
Recog recog 
) [static]

音声入力と音検出を行うメイン関数

ここでは音声入力の取り込み,音区間の開始・終了の検出を行います.

スレッドモード時,この関数は独立したAD-inスレッドとしてデタッチされます. (adin_thread_create()), 音入力を検知するとこの関数はワークエリア内の speech[] にトリガしたサンプルを記録し,かつ transfer_online を TRUE に セットします. Julius のメイン処理スレッド (adin_go()) は adin_thread_process() に移行し,そこで transfer_online 時に speech[] を 参照しながら認識処理を行います.

非スレッドモード時は,メイン処理関数 adin_go() は直接この関数を呼び, 認識処理はこの内部で直接行われます.

スレッドモードはマイク入力など,入力が無限で処理の遅延がデータの 取りこぼしを招くような live input で用いられます. 一方,ファイル入力 やadinnet 入力のような buffered input では非スレッドモードが用いられます.

引数の ad_process は,取り込んだサンプルに対して処理を行う関数を 指定します. リアルタイム認識を行う場合は,ここに第1パスの認識処理を 行う関数が指定されます. 返り値が 1 であれば,入力をここで区切ります. -1 であればエラー終了します.

引数の ad_check は一定処理ごとに繰り返し呼ばれる関数を指定します. この 関数の返り値が 0 以下だった場合,入力を即時中断して関数を終了します.

引数:
ad_process[in] function to process triggerted input.
ad_check[in] function to be called periodically.
recog[in] engine instance
戻り値:
2 when input termination requested by ad_process(), 1 when if detect end of an input segment (down trigger detected after up trigger), 0 when reached end of input device, -1 on error, -2 when input termination requested by ad_check().

adin-cut.c295 行で定義されています。

参照元 adin_go(), と adin_thread_input_main().

関数の呼び出しグラフ:

呼出しグラフ:

static int adin_store_buffer ( SP16 now,
int  len,
Recog recog 
) [static]

A/D-in スレッドにてトリガした入力サンプルを保存するコールバック.

引数:
now[in] triggered fragment
len[in] length of above
recog[in] engine instance
戻り値:
always 0, to tell caller to just continue the input

adin-cut.c910 行で定義されています。

参照元 adin_thread_input_main().

static void adin_thread_input_main ( void *  dummy) [static]

A/D-in スレッドのメイン関数.

引数:
dummy[in] a dummy data, not used.

adin-cut.c944 行で定義されています。

参照元 adin_thread_create().

boolean adin_thread_create ( Recog recog)

バッファを初期化して A/D-in スレッドを開始する.

引数:
recog[in] engine instance

adin-cut.c978 行で定義されています。

参照元 j_open_stream().

関数の呼び出しグラフ:

呼出しグラフ:

boolean adin_thread_cancel ( Recog recog)

A/D-in スレッドを終了する

引数:
recog[in] engine instance

adin-cut.c1021 行で定義されています。

参照元 j_close_stream().

関数の呼び出しグラフ:

呼出しグラフ:

static int adin_thread_process ( int(*)(SP16 *, int, Recog *)  ad_process,
int(*)(Recog *)  ad_check,
Recog recog 
) [static]

スレッドモード用メイン関数

この関数は A/D-in スレッドによってサンプルが保存されるのを待ち, 保存されたサンプルを順次処理していきます. 引数や返り値は adin_cut() と 同一です.

引数:
ad_process[in] function to process triggerted input.
ad_check[in] function to be called periodically.
recog[in] engine instance
戻り値:
2 when input termination requested by ad_process(), 1 when if detect end of an input segment (down trigger detected after up trigger), 0 when reached end of input device, -1 on error, -2 when input termination requested by ad_check().

adin-cut.c1095 行で定義されています。

参照元 adin_go().

int adin_go ( int(*)(SP16 *, int, Recog *)  ad_process,
int(*)(Recog *)  ad_check,
Recog recog 
)

入力処理を行うトップ関数

スレッドモードでは,この関数は adin_thead_process() を呼び出し, 非スレッドモードでは adin_cut() を直接呼び出す. 引数や返り値は adin_cut() と同一である.

引数:
ad_process[in] function to process triggerted input.
ad_check[in] function to be called periodically.
recog[in] engine instance
戻り値:
2 when input termination requested by ad_process(), 1 when if detect end of an input segment (down trigger detected after up trigger), 0 when reached end of input device, -1 on error, -2 when input termination requested by ad_check().

adin-cut.c1259 行で定義されています。

参照元 j_recognize_stream_core().

関数の呼び出しグラフ:

呼出しグラフ:

boolean adin_standby ( ADIn a,
int  freq,
void *  arg 
)

デバイス依存の初期化関数を呼び出す.

引数:
a[in] A/D-in work area
freq[in] sampling frequency
arg[in] device-dependent argument
戻り値:
TRUE if succeeded, FALSE if failed.

adin-cut.c1290 行で定義されています。

参照元 adin_setup_all().

関数の呼び出しグラフ:

呼出しグラフ:

boolean adin_begin ( ADIn a,
char *  file_or_dev_name 
)

音の取り込みを開始するデバイス依存の関数を呼び出す.

引数:
a[in] A/D-in work area
file_or_dev_name[in] device / file path to open or NULL for default
戻り値:
TRUE on success, FALSE on failure.

adin-cut.c1314 行で定義されています。

参照元 j_open_stream().

関数の呼び出しグラフ:

呼出しグラフ:

boolean adin_end ( ADIn a)

音の取り込みを終了するデバイス依存の関数を呼び出す.

引数:
a[in] A/D-in work area
戻り値:
TRUE on success, FALSE on failure.

adin-cut.c1340 行で定義されています。

参照元 j_recognize_stream_core().

関数の呼び出しグラフ:

呼出しグラフ:

void adin_free_param ( Recog recog)

音取り込み用ワークエリアのメモリを開放する.

引数:
recog[in] engine instance

adin-cut.c1364 行で定義されています。

参照元 j_recog_free().

関数の呼び出しグラフ:

呼出しグラフ: