下記のサンプルアプリが同梱されています。上記のサンプルを読み込み、プロジェクトとして展開します。フォルダをクリックします。Appをクリックして実行してみましょう。APP」の5つのボタンが表示されています。ここで、「ACCOST」ボタンをタップすると、「アプリから発話開始するサンプルだよ」とロボホンが発話します。ちなみに、ACCOSTとは、アプリから強制的にトピック(発話やモーション)を実行することを意味します。最初に、ボタンなどアプリからのアクションをトリガとして、トピックを実行するアプリトリガによる発話について学びます。「ACCOST」ボタンに該当するソースコードを確認していきましょう。一般にアンドロイドのアプリはActivityクラスを継承して開発します。Activityクラスにはライフサイクルがあり、アプリを起動すると下図のようにメソッドを実行します。ここで、「ACCOST」ボタンに関する振る舞いは、onCreate()メソッドの内部にあり、下記のように記述されています。最初に、リソースIDを利用して、変数*voiceAccostButton*に、Buttonクラスのオブジェクトを代入し、ボタンをタップしたときのイベントリスナーを登録しています。クラスのupdateAppInfoメソッドで発話を実行しています。ここでのポイントは、実行するACCOSTの定義です。いうXMLファイルに記述します。ここでは、assetsフォルダに含まれるjp_co_sharp_sample_simple_accost.hvmlが該当します。タグを用いて定義されます。word属性は、ACCOSTの名称であり、一意に設定する必要があります。値と一致することを確認してください。topic_id属性は、実行するトピック(発話やモーション)のidを指定します。タグを用いて定義されます。id属性は、トピックのIDであり、HVMLファイル内で一意に設定する必要があります。listen属性は、ユーザからの発話を受け付けるかどうかを指定します。id属性は、実行順序を示しており、値が小さい順に実行されます。タグでモーションを指定します。HVMLファイルを下記のように修正してみましょう。タグには「右手をあげてふる」を示す「0x060009」を指定します。Appをクリックして実行してみましょう。次に、ユーザの発話をトリガとして、トピックを実行するユーザトリガによる発話について学びます。クラスにACCOSTのような記述はありません。ACCOSTと同様、具体的な定義はHVMLに記述します。ここでは、assetsフォルダに含まれるjp_co_sharp_sample_simple_talk.hvmlを確認しましょう。タグを用いて定義されます。いずれかを指定します。topic_id属性は実行するトピック(発話やモーション)のidを指定します。${LVcsr:Kana}と入力されています。これは、「認識したユーザの発話がイマカラシャベルヨに似ている」ことを意味しています。右辺の${Lvcsr:Kana}は、ユーザの発話をカタカナで返した文字列を表します(かな漢字の場合は${Lvcsr:Basic}を用いる)。タグで定義された動作に遷移します。ここでは、ロボホンに「目が黄色になったら喋ってね」と発話させています。HVMLファイルを下記のように修正してみましょう。タグには「腰に手」を示す「0x060006」を指定します。Appをクリックして実行してみましょう。今回はアプリトリガによる発話とユーザトリガによる発話の基本について解説しました。HVMLは仕様がかなり複雑であり、上記で示したaccostやsituation以外にもたくさんのタグが規定されています。必要に応じてドキュメントを参考にしながら実装することが必要になります。