せっかくだから、open_jtalkで時刻でも話してもらいますか。
標準音声は男性のものなので、名古屋工業大学のマスコットメイちゃんの音声もらってきて組み込んでみます。
外部プログラム呼び出し方法は、subprocess.runを使いましょう。
import os import subprocess class Jtalk(): def talk(self,str): os.environ["TALK"] = str os.environ["Voice"] = "/home/hachikun/Downloads/MMDAgent/MMDAgent_Example-1.8/Voice/mei/mei_normal.htsvoice" print(str) print(os.environ["TALK"]) subprocess.run("echo $TALK | /usr/bin/open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic/ -m $Voice -r 1.0 -ow /dev/stdout | /usr/bin/aplay -q",shell=True)
よし。
じゃあ、細かいとこを作ってみますか。
時刻を取得して再生用の文面を生成してみるね。
時刻クラスを作って、生成と同時に再生用文面を作るようにしてみる。
import date import datetime class Jikoku(): def answer(self,jkk): self.seq = str(jkk.hour)+"時"+str(jkk.minute)+"分" if(jkk.minute == 0): self.seq = str(jkk.hour)+"時ちょうど" elif(jkk.minute == 30): self.seq = str(jkk.hour)+"時半" return(self.seq) def __init__(self): self.dt = datetime.datetime.now() self.text = self.answer(self.dt) i=0 jj = Jtalk() text = "" while i<10: mx = Jikoku() # 初回のみ無条件代入 if(text == ""): text = mx.text print("初回なので、分が変わるまで喋りません。") if(mx.text != text): print(mx.text) jj.talk2(mx.text+"です。") text = mx.text time.sleep(0.5)
とりあえずこんなとこかな?
実行するとループに入って、分が変わるたびに時刻をしゃべるわ。
ただし、本ルーチンをcronから起動させないで。
再生に ALSA パッケージの aplay を使っているのだけど、これって cronからだとうまく再生してくれない事がある から。
なんかこう、うまく常駐させて再生させる方法ないかしらね?