【自己紹介アプリ制作】Pepperが喋る


こんにちは。
Pepperアプリ開発者の
電化製品の説明書は読まないほう、yanagiです。

この間、立川に「マッドマックス」を見に行ってきました。いろいろと素晴らしかったです。
もう、この映画の感想だけで記事1本余裕に書けちゃうくらい凄かったのですが、本当に書くと怒られるのでグッと飲み込みます。…ところで、Pepperって身長といい色といい、ウォーパプスに似ていると思いませんか?

さて、今回から自己紹介アプリを作ることになりました。
『習うより慣れろ』ということで、実際にコレグラフを触りながら使い方を探ってみたいと思います。

「自己紹介アプリ」といってもゲームみたいなものではなく、プログラムを開始したらPepperが私の代わりに「初めまして、yanagiです」とか言い出すものを作ります。あと、聞き手に「出身地は?」など聞かれると「出身地は〜」と、会話のキャッチボールができるようにしたいと思っています。

作るものの大体のイメージはこんな感じ。

フロー図

では、作っていきます。


その1:自己紹介のセリフ作り

まずは喋らせる内容を決めて、テキストを用意します。
そして、そのテキストをコレグラフ上の[Say]というBoxの中に打ち込めば、Pepperに搭載されている「AITalk」という音声合成エンジンが、自動で人間らしい喋り方にしてくれるわけです。
初音ミクの調教みたいなことはしなくてもいいわけです。楽チン。

ものすごく分かりやすい記事があったので、まずはこちらを参考にしてください。
[Qiita] Pepper を動かしてみる – Hello World編

これでOKです。Pepper喋ります。

とはいえ……実は、日本語文ベタ打ちだとまだ「ロボっぽい喋り」なのです。ロボっぽい喋り?ロボなのに?
テレビのCMで見るようなPepperは、滑らかな音声になるように調整がされているのです!

というわけで、調整に使う3つのパラメータが登場です。

  • \rspd=100\ … 喋る速さを決めます。今は100です。(spdってきっとspeedのことだろうけど、rってなんだろう…)
  • \vct=120\ … 声の高さを決めます。今は120です。(VoiCe Toneの略かな?)
  • \pau=80\ … 待機時間です。言葉の間に拍を置くときに使います。pau=1000で1秒です。

これらを日本語文の間に埋め込んで、調整を行います。\\で囲まれた部分はPepperは読みません。

例〈before〉
休日はよく映画を見ています。特にSFやファンタジーなど、壮大な世界観が好きなんです。

例〈after〉
\rspd=100\\vct=130\休日はよく\pau=50\\vct=140\映画を見ています。特に\vct=150\SFやファンタジーなど、\vct=140\壮大な映画が好きなんですー。

この調整の結果変化した音声を、ブログのテキスト上で伝えるのがすごく難しいのですが、ポイントとしては、vctを5〜10刻みで細かく入れると抑揚がついて自然な感じになります。
人間は会話の中で強調したい部分は自然とトーンが高くなる傾向があります。ここでは、「”映画”を見ています」と「特に”SFやファンタジー”」の部分を上げています。

また、句読点も\pau\と同じ扱いになります。”、”は一呼吸で、”。”はその倍くらい休んでる気がします。
基本的には句読点で間隔を取りますが、「休日はよく_映画を見ています」の部分は長く休ませたくなかったので\pau=50\を入れました。(この辺りの使い方は個人差がありますので、開発者の特徴が表れますね)

その他のポイントは、あまり難しい漢字を使わないことです。Pepperが予想通りに読んでくれない可能性もあります(つらい・からいなど)。今回も、個人的に映画に対しては「観る」という字を使いたい派なのですが、簡単な「見る」を使いました。(”観る”くらいなら読んでくれるとは思いますが)

こんな感じで、お気にのエディタで日本語文をばーーーっと書きます。

自己紹介テキスト


その2:SayBoxに入れる

先ほどの記事は英語で喋らせていたので、日本語で喋る場合を紹介します。

プログラムの初めに[Set Language]を置きます。単純なアプリ程度であれば、必須というわけでは無いのですが
、丁寧に作るのであれば入れたほうがいい?みたいな。

setLang
[Set Language]の左下、スパナマークをクリックすると設定ウィンドウが出るので、言語をJapaneseに設定します。そしてプログラムの開始を表す左端の▶︎から[Set Language]、そして[Say]へと画像のように繋ぎます。

上側の出力から繋いでいるのは、上の黒い方が『データ(文字列や数値)などの情報を含まない単純な出力』で、下の青い方が『文字列を引き渡す出力』を表しているからなんです。ここでは、Pepperサイドで言語の設定をしてもらえればOKなので、特に引き渡すデータはありません。
いきなり小難しくなりましたが、今はいろんな種類の出力があるんだなぁ程度の把握で大丈夫ですし、作ってる当時の私もそれくらいの把握しかしてませんでした。(Boxによって使える出力も異なりますので、この辺りは追い追い…。)

そして[Say]の中にテキストをコピペします。パラメータもそのまま突っ込みます。

Pepperに繋いだ状態で、[Say]の後ろと、プログラムの終了を表す右端の‖を繋いで再生させます。

Say

喋りました!(ということが伝わってほしいです!)
ロボットビューではPepperが喋ると吹き出しに喋ったテキストが表示されます。また、ダイアログも開いておくとPepperがなんと言ったかを確認できます。

こんな感じで一連の流れを作ってしまいます。

Say羅列

ただ黙って喋るのもアレなので、ところどころにモーションを差し込みました。
そして砂時計のBoxは[Wate For Signals]といって、複数の出力が全て受信するまで待ってくれるBoxです。モーションが終わらない内に次のセリフに行ったりするのを回避するために、モーションを入れた後に付けました。

これで、「初めまして」と挨拶した後に「出身は〜」と道産子アピールをして、「好きなものは〜」と映画の話をするアプリが完成しました。誰得。
でもこれだけじゃ自己紹介としては寂しいので、「最近のブーム」と「これまでの経歴」の話も入れます。そして、話題ごとに分岐を作り、会話のキャッチボールにするためにユーザの声を聞き取る機能も付けちゃいましょう。

では、次回に続く!!!

yanagi.


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です