Pepperをコロ助語をしゃべらせてみる

###ボックスの中身をいじってみる
初心者向け。というか自分向け備忘録。
Pythonってプログラムの中ではかなり敷居が低いかも。

　

　


書いてあること
・ボックスの簡単な改造の仕方。
・オリジナルのボックスライブラリーの作り方。



---

###まずは中を見てみよう
choregrapheのボックスの中身はpythonで書いてある。
簡単な言語だとは言われるけどプログラムに慣れてないと、目がくらくらしてくる。
とはいえ、なにも触れないのはしゃくなので、まずは簡単な改造から手を付けてみる。
　
　

獲物はSay Textボックス
![say-Text.png](https://qiita-image-store.s3.amazonaws.com/0/60999/598ead51-ca30-1ef2-72e9-84cc55b00236.png)

まずは、キャラクターにありがちな特徴的な語尾をつけてみよう。
　
　
ダブルクリックするとこんな感じ。

```
import time

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self, False)
        self.tts = ALProxy('ALTextToSpeech')
        self.ttsStop = ALProxy('ALTextToSpeech', True) #Create another proxy as wait is blocking if audioout is remote

    def onLoad(self):
        self.bIsRunning = False
        self.ids = []

    def onUnload(self):
        for id in self.ids:
            try:
                self.ttsStop.stop(id)
            except:
                pass
        while( self.bIsRunning ):
            time.sleep( 0.2 )

    def onInput_onStart(self, p):
        self.bIsRunning = True
        try:
            sentence = "\RSPD="+ str( self.getParameter("Speed (%)") ) + "\ "
            sentence += "\VCT="+ str( self.getParameter("Voice shaping (%)") ) + "\ "
            sentence += str(p)
            sentence +=  "\RST\ "
            id = self.tts.post.say(str(sentence))
            self.ids.append(id)
            self.tts.wait(id, 0)
        finally:
            try:
                self.ids.remove(id)
            except:
                pass
            if( self.ids == [] ):
                self.onStopped() # activate output of the box
                self.bIsRunning = False

    def onInput_onStop(self):
        self.onUnload()
```

「うっ」と思うけど、思ったより短い。
とりあえず、onStart端子に文字列を入力してしゃべらせているので、onInput_onStartに目をつけると、
　
　
　

```
    def onInput_onStart(self, p):
        self.bIsRunning = True
        try:
            sentence = "\RSPD="+ str( self.getParameter("Speed (%)") ) + "\ "      
            sentence += "\VCT="+ str( self.getParameter("Voice shaping (%)") ) + "\ "
            sentence += str(p)　　　　#なんか、キミ、怪しくないか?
            sentence +=  "\RST\ "
            id = self.tts.post.say(str(sentence))
            self.ids.append(id)
            self.tts.wait(id, 0)
        finally:
            try:
                self.ids.remove(id)
            except:
                pass
            if( self.ids == [] ):
                self.onStopped() # activate output of the box
                self.bIsRunning = False

```
なんか sentence +=str(p)という核心っぽい一行がある。
まわりに口調や声の高さとかをコントロールするような修飾子っぽいのがガンガンついているから、
この部分が本文だと予想。
周りを見てみるとなんとなく、文字列の演算は+とかでよいようにみられるので

```
            sentence += str(p)
```
コレを
　
　

```
            sentence += str(p)+"なり。"
```

に変える。
　
　
　

とこんな感じ。
![結果.png](https://qiita-image-store.s3.amazonaws.com/0/60999/cafa8b35-2bc6-2f77-583e-b74bf89fbe5d.png)
改造完了！
　
　

改造したボックスは右クリックで「ボックスを編集」しておこう。
名前は半角英数の方が安心そうなので"Say Nari Text"とかで。
 
 　

　
　

 
 
###新しいボックスライブラリの作成
--------
せっかく作ったんだし、いろんなシーンで活用したい！という欲求が出てくると、オリジナルのボックスライブラリがほしくなってくる。
　
　

そんなときは
![ボックスライブラリ作成.png](https://qiita-image-store.s3.amazonaws.com/0/60999/9431b15a-ecf7-bcec-04d5-7249d761dc25.png)

右下のボックスライブラリパネルをさわってみるとこんなボタンが。
　
押してみると「無題」という取りつく島もないボックスライブラリができる。
　
　
　


右クリックしたり、F2ボタンを押しても何も起こらないが、
![名前を付けて保存.png](https://qiita-image-store.s3.amazonaws.com/0/60999/60dfa1a4-f8a0-76e4-f570-7b1ba6f93752.png)
パネルの上の方を触っていくと"ボックスライブラリに名前を付けて保存"ボタンがあるので押してみると名前を付けられる。たとえば"funBoxes"とかだろうか。

さらに空白部分を右クリックすればフォルダを作れるので"gobi"とかのフォルダをつけ、語尾に「なっしー」とか「アルヨ」とかを付けたオリジナルボックスをドラッグ&ドロップでどんどん追加することができる。
![ドラッグ.png](https://qiita-image-store.s3.amazonaws.com/0/60999/796b1e0a-b5b5-ab85-ced9-393be253ea08.png)

　
もちろん追加した後はボックスライブラリ自体を保存しておくこと!

　
　
　

　
こんな感じで自分オリジナルのモーションや処理をボックス化していくと、開発が効率化できるし、*.cblという拡張子でファイルになっているので仲間内で交換してみるのもいいかもしれない。
　
　
　
　
　



###感想
-----
このぐらいのちょっとした記事だったらわりとラクに書けるかも。