こちらと同じことを、Ubuntu 20.10 で確認しました。
OpenJTalk + python で日本語テキストを発話
私が確認した環境
$ uname -a
Linux iwata 5.8.0-26-generic #27-Ubuntu SMP Wed Oct 21 22:29:16 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ python --version
Python 3.8.6
- ライブラリーのインストール
sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
- 音声ファイルのセットアップ
get https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip/download -O MMDAgent_Example-1.6.zip
unzip MMDAgent_Example-1.6.zip MMDAgent_Example-1.6/Voice/*
sudo cp -r MMDAgent_Example-1.6/Voice/mei/ /usr/share/hts-voice
- Python による再生
jtalk.py
#! /usr/bin/python
#
import subprocess
from datetime import datetime
def jtalk(tt):
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
subprocess.run(cmd,input=tt.encode())
aplay = ['aplay','-q','open_jtalk.wav']
subprocess.run(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()
#
実行
./jtalk.py
時間を言い、open_jtalk.wav が作成されます。
wav ファイルの再生
$ aplay open_jtalk.wav
再生中 WAVE 'open_jtalk.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
サンプルのプログラム
ex01.py
#! /usr/bin/python
#
import jtalk
jtalk.jtalk('こんにちは')
#
ex02.py
#! /usr/bin/python
#
import jtalk
text_aa = 'あるひとがろばを一匹飼っていました。'
text_aa += 'このろばはそれまで長い間、休まずせっせと麦を水車小屋に運んできました。'
#
jtalk.jtalk(text_aa)
#