[[PageOutline]] = フレームワークの概要 = Speech Controller Framework を構成する基礎的なクラスの構成を示します。 図中、通常文字で表されるクラスは具象クラスです。それに対してイタリック文字で表されるクラスは抽象クラスです。 [[Embed(basic_architecture.png, caption=<< 基礎的なクラスの構成 >>)]] これらの全てのクラスは core に含まれています。 メインとなる概念は、これらのクラスによって全て表されています。 それぞれのクラスが何を表すものか一つ一つ説明します。 ----- == Controller == 全体を制御するクラスです。 本クラスは、フレームワークの根幹を成すもので全体の動作シーケンスを制御するメインクラスです。 動作シーケンスとは、 状況に応じて音声認識に使用する文法を切り替えながら、 音声認識の結果を受け取り、 それを何らかの画面表示に結び付けていくという処理の流れのことです。 これらの処理は、以降で説明する Engine や Processor や View 等のクラスによって実現されるものです。 あなたが作るアプリケーションは、 この Controller を通して音声認識を処理していきます。 ----- == Engine == 音声認識エンジンを表すクラスです。 本クラスは、まさにエンジンです。 車を動かす原動力となるエンジンと同じく、音声認識を処理したイベントの発行元になる存在です。 本クラスは抽象クラスですが、 具体的には Microsoft Speech SDK 等を用いた音声認識エンジンを使った具象クラスを提供します。 Julius 等の他の音声認識エンジンを使った具象クラスの提供も検討できたら嬉しいです。 ----- == Grammar/!GrammarTransition/!GrammarPhrase == 音声認識の対象となる文法を表すクラスです。 文法は、発音された日本語によって状態遷移する状態遷移グラフとして定義されます。 日本語は、任意の日本語テキストとして指定します。 状態遷移グラフには始点があり終点があります。 !GrammarPhrase は、状態遷移のきっかけとなる日本語フレーズを表します。 !GrammarTransition は、日本語フレーズによる1つの状態遷移を表します。 これらの集まりが Grammar であり文法です。 1つの Grammar インスタンスが表す状態遷移グラフの始点から終点までを一度の発話の音声認識単位として扱います。 ----- また、!GrammarPhrase は状態遷移のきっかけとなる日本語フレーズだけではなく、認識結果として取得可能なキー/ビュー形式のプロパティ情報を設定できます。 文法によって音声認識した結果を日本語テキストとして扱うのは大変です。 例えば同じ数字の「7」を表す日本語であっても * なな * しち という発音のバリエーションがあります。このような事例は複数あり、これをアプリケーションで処理するのは大変です。 認識結果として (キー)number = (値)7 という形で取得できれば、アプリケーションの処理が楽になります。 発音のバリエーションは、文法に閉じ込めることが可能です。 キーは常に文字列です。バリューには整数値(int)もしくは文字列(std::string)の指定が可能です。 ----- == Recognition/!RecognitionProperty == 音声認識の結果を表すクラスです。 音声認識結果には、文法によって認識された日本語テキストおよびキー/バリュー形式のプロパティが含まれます。 具象クラスは、Engine と一緒に実装され、提供されます。 ----- == Processor == 音声認識の結果を元に処理を行う処理を表すクラスです。 本クラスは、抽象クラスです。 Engine は以下のタイミングでイベントを発行します。 * 音声入力の開始 * 音声認識の受理 * 音声入力の終了 これを受けて Controller が Processor を呼び出します。 Processor は抽象クラスなので、開発者は本クラスを拡張して目的の処理を行う実装を作りこみます。 独自の処理はもちろん、Controller への参照を経由して、 Engine に対して文法の操作を行うこともできます。 処理状況に応じて文法の更新を行っていくことで柔軟な音声認識アプリケーションの構築が可能です。 ----- == View == 音声認識の結果を元に行うビューを表すクラスです。 本クラスは、抽象クラスです。 Processor が処理を行った後に Controller により呼び出されます。 本フレームワークは特定の表示方法を特定しません。 標準出力への出力も一つのビューと言えるし、何らかのライブラリを利用したGUIによる表示もビューです。 Processor と同様に独自の処理はもちろん、Controller への参照を経由して、 Engine に対して文法の操作を行うこともできます。 Processor と View との違いは、View は Processor の処理結果を受け取った処理ができる点です。 ----- == Context == Controller が発行するイベントのコンテキストを表すクラスです。 Context には、キー/バリュー形式で任意の値(boost::any)を格納できます。 Processor - View 間の情報通信に使います。 Context のスコープは、イベント単位です。 -----