pepperに曜日をしゃべらせるサンプルコード（メモ）

#手順
「SetLanguage」ボックスを置き、Japaneseに設定
「Say」ボックスを置き、ダブルクリックで中に入り、Localized TextをJapaneseに設定「Say Text」ボックスをダブルクリックし、コードを以下に書き換える
「SetLanguage」と「Say」をつなぎ実行。今日の曜日を話してくれるはず。

#サンプルコード
```py
#import time
#import datetime

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
        d = datetime.datetime.today()
        self.log("曜日（月曜が０，日曜が６）:")
        self.log(d.weekday())

        wd = self.getWeekday(d.weekday())
        self.log(wd)

        try:
            sentence = "\RSPD="+ str( self.getParameter("Speed (%)") ) + "\ "
            sentence += "\VCT="+ str( self.getParameter("Voice shaping (%)") ) + "\ "
            sentence += '%sようび' %(wd)
            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()

    def getWeekday(self, num):
        self.log("getWeekday関数が実行された" + str(num))

        if (num == 0):
            return "げつ"
        elif (num == 1):
            return "か"
        elif (num == 2):
            return "すい"
        elif (num == 3):
            return "もく"
        elif (num == 4):
            return "きん"
        elif (num == 5):
            return "ど"
        elif (num == 6):
            return "にち"
        else:
            return "なん"
```

先頭行のimport、書かないと動かないと思っていたが、コメントアウトしても動いた。


自作関数```getWeekday()```を辞書を使ってもう少し簡潔にしてみた。
さらに、parameterにaddDateを追加して、過去や未来の曜日も言わせられるように。

```py

 def onInput_onStart(self, p):
        #略

        wd = self.getWeekday(d.weekday(), self.getParameter("addDate"))
        self.log(wd)

        try:
            sentence = "\RSPD="+ str( self.getParameter("Speed (%)") ) + "\ "
            sentence += "\VCT="+ str( self.getParameter("Voice shaping (%)") ) + "\ "
            sentence += '%sようび' %(wd)
            sentence +=  "\RST\ "
            #略


    def getWeekday(self, num, opt=0):
            self.log("getWeekday関数が実行された" + str(num))
            self.log(type(num))
            num += opt
            youbi = ["げつ", "か", "すい", "もく", "きん", "ど", "にち", "なん"]
            return youbi[num]



```

#所感
・python(オブジェクト思考も)が初めてなので、関数ひとつ作るだけなのに苦労した。
・selfを書くところと不要なところがあるが、いまいちわからなかった。
・配列を使って処理することで記述量が減る。
・self.log("xxx")を多用して、ログビューアで１つずつ確認した。
・timedeltaオブジェクトを使えばgetWeekday関数の第３引数を自作しなくてよかったかも。[PythonでX日前/X日後を求める方法](http://blog.mudaimemo.com/2009/05/pythonxx.html)

#参考
[[Pepper] Pepperアプリケーション開発　～Pepperに現在時刻を聞いてみよう！！～](http://arit-clt.com/2014/11/05/pepper-pepper%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E3%80%80%EF%BD%9Epepper%E3%81%AB%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92%E8%81%9E%E3%81%84/)