現在,RaspberryPiを使って音声合成で喋らせるためにOpen JTalkをインストールしました。セットアップもうまくいき、./jtalk.sh "こんにちは。ラズベリーパイが喋っていますよ"のコマンドで喋らすことができました。
次に、Pythonで現在の日時を喋るプログラムについて下記サイトを参考にして学んでいます。
参考サイト:https://qiita.com/kkoba84/items/b828229c374a249965a9
以下に今実行しているプログラムを示します。
#!/usr/bin/env python
coding: utf-8 import time
import subprocess from datetime
import datetime
def jtalk(t):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(t.encode())
c.stdin.close()
c.wait()
aplay = ['aplay','-q','open_jtalk.wav']
wr = subprocess.Popen(aplay)
def say_datetime():
d = datetime.now()
text = '%s%s%s%s%s' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk(text)
if name == 'main': say_datetime()
このプログラムの下から4行目の text = ・・・・ の部分に月,時等の日本語を入れた状態
text = '%s月%s日%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
で,Thonny Python IDEのRunボタンを押すと問題なく実行され,日時が読み上げられます.しかしながら,ターミナル上で
jtalk2.py python
として実行しようとすると,
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)
や WARNING: JPCommonLabel_make() in jcomon_label.c: No phoneme. Error: waveform cannot be synthesized.
といったエラーが出てきて実行できません.ネット上でUnicodeEncodeError等について調べ,日本語の入った文字の頭に’u’をつけたり、sys.stdout = codecs.getwriter('utf_8')(sys.stdout)をプログラムに入れたりなど、色々と試しましたが同じ状況が続き,解決できません.この件につきまして,分かる方がいましたらアドバイス頂けませんでしょうか.よろしくお願いいたします.
回答1件
あなたの回答
tips
プレビュー