動かざることバグの如し

近づきたいよ 君の理想に

日本語音声合成Open JTalkをPythonから実行する

環境

コード

以下をjtalk.pyとして保存する

#coding: utf-8
import subprocess
import tempfile

def run(message, voice_path='voice.wav'):
    speed = 1.0
    dic_path = "/usr/local/Cellar/open-jtalk/1.10_1/dic"
    model_path = "/usr/local/Cellar/open-jtalk/1.10_1/voice/mei/mei_normal.htsvoice"

    with tempfile.NamedTemporaryFile(mode='w+') as tmp:
        tmp.write(message)
        tmp.seek(0)
        command = 'open_jtalk -x {} -m {} -r {} -ow {} {}'.format(dic_path, model_path, speed, voice_path, tmp.name)
        print(command)
        proc = subprocess.run(
            command,
            shell  = True,
        )

で、使いたいときは以下のようにimportして使う 適当にsample.pyとする

import jtalk
from datetime import datetime

d = datetime.now()
text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk.run(text)

実行

python sample.py

ディレクトリにvoice.wavが生成されているはず

なんでtempfileつかうの

stdinだと一部文字列が入ったときに正常に動作しないことがあった