Pepper SDK入門(19) SilentからListenへ

#今回の目標
Listenを使ってPepperに簡単なフレーズを聞いてもらえるようにする回です。
Pepperが聞き手となることで、ひとり言は会話の始点に変わるでしょう。

```java
//フレーズを決める（ここでは「Hello」）
PhraseSet phraseSet = PhraseSetBuilder.with(qiContext)
                                      .withTexts("Hello")
                                      .build();

//アクションをビルドする
Listen listen = ListenBuilder.with(qiContext)
                             .withPhraseSet(phraseSet)
                             .build();

//アクションを同期実行する
listen.run();

```

**これが今回の学習内容になります。**

#Freeze!
Pepperは聞き取り中、上半身が微妙に動いています。[既視感](https://qiita.com/kskrin/items/ab6376fe27aaa613c362#%E3%81%98%E3%81%A3%E3%81%A8%E3%81%97%E3%81%A6%E3%81%8A%E3%81%84%E3%81%A6%E6%AC%B2%E3%81%97%E3%81%84)ですね。BodyLanguageは止められるのです。

```java
Listen listen = ListenBuilder.with(qiContext)
                             .withPhraseSet(phraseSet)
                             .withBodyLanguageOption(BodyLanguageOption.DISABLED)
                             .build();

listen.run();

```

#言語を変える
デフォルトでは優先言語を使うPepperですが、Localeを使用することで他の言語も選ぶことができます。
例えばPepperに中国語を聞き取って欲しい場合には以下のように書いてみましょう。小菜一碟〜

```java
Locale locale = new Locale(Language.CHINESE, Region.CHINA);
Listen listen = ListenBuilder.with(qiContext)
                             .withPhraseSet(phraseSet)
                             .withLocale(locale)
                             .build();

listen.run();
```
Localeについてのより詳細な情報は[APIのドキュメント](https://android.aldebaran.com/sdk/doc/javadoc/qisdk/com.aldebaran.qi.sdk.object.locale/-locale/index.html)を参照してください。

#Q.Listenしたら何ができる？
##A.音声コマンドができる
$\style{background-color:yellowgreen;}{音声コマンドしてみよう}$
**1.フレーズを決める**
Pepperに聞いて欲しいフレーズを定義します。
一つのフレーズだけを定義することも可能ですが、ユーザーが全く同じことを台詞のように言ってくれるとは限りません。
あらかじめ、いくつかのバリエーションを設定しておきましょう。

```java

PhraseSet phraseSetYes = PhraseSetBuilder.with(qiContext)
                                         .withTexts("yes", "OK", "alright", "let's do this") //Pepperに聞き取ってもらうフレーズ
                                         .build(); 

PhraseSet phraseSetNo = PhraseSetBuilder.with(qiContext)
                                        .withTexts("no", "Sorry", "I can't") //Pepperに聞き取ってもらうフレーズ
                                        .build(); 
```
**2.Listenの実行**

```java
Listen listen = ListenBuilder.with(qiContext)
                             .withPhraseSets(phraseSetYes, phraseSetNo)
                             .build();

ListenResult listenResult = listen.run();
```
**3.聞こえたことを教えてもらう**
聞き取った人声に該当するフレーズを取得します。

```java
Log.i(TAG, "Heard phrase: " + listenResult.getHeardPhrase().getText()); // ここで"Heard phrase:"の後ろに聞き取り結果を出力する
PhraseSet matchedPhraseSet = listenResult.matchedPhraseSet 
```
これでPepperも手のひらの上です。実機のサイズは変わりません。

#ListenとChatの二者択一
Listenは短い対話に適したものです。対してChatは、もう少し長い会話のラリーに向いています。
そしてSayやListenを実行している時にChatが機能しないように、SayやChatを実行している時にListenは機能しないので注意してください。排反事象。

#*Not the <FONT COLOR=red>Mic</FONT>roscope but the <FONT COLOR=red>Mic</FONT>rophone*〜音の波を電気信号に変えて〜
Pepperのマイクは単一指向性です。全指向性でも超指向性でも双指向性でもないため、前方からの声しか聞き取れません。Pepperに話しかけたい時には、まずPepperの前に立ちましょう。

Listenについてもっと知りたい場合は、例によって[APIのドキュメント](https://android.aldebaran.com/sdk/doc/javadoc/qisdk/com.aldebaran.qi.sdk.object.conversation/-listen/index.html)を参照してください。

**ここまでの内容は[これ](https://github.com/aldebaran/qisdk-tutorials/tree/master/app/src/main/java/com/softbankrobotics/qisdktutorials/ui/tutorials)の"Catch few words"で体験できますので、是非。**

![___pepper_________.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/8147b7a5-c832-34ce-5afc-81afc752c4b7.png)
またね。