はじめに
いままで、音声合成にgoogletts-cli.plを使用していましたが、WSLのUbuntu18からWSL2のUbuntu22.04.2に変更したところ、SOXのALSAエラーで音が出なくなった(対策がわからなかった)ので、他の方法も試したので、まとめてみました。
speak.shを作成し、使用してます。
使い方:
./speak.sh テキスト
googletts-cli.plを使用
speak.shの内容
perl googletts-cli.pl -l ja -s 1.3 -t $1
■googletts-cli.plのソースの場所
(https://github.com/zaf/asterisk-googletts/blob/master/cli/googletts-cli.pl)
gTTSを使用
speak.shの内容
python3 /home/pi/test.py $1 >> /dev/null
■プログラムtest.py
import sys
from gtts import gTTS
from playsound import playsound
tts = gTTS(sys.argv[1], lang='ja')
tts.save('gTTS_test.mp3')
# 音声再生
playsound("gTTS_test.mp3")
VOICEVOXを使用
speak.shの内容
python3 /home/XXXXX/voicevox.py -id 1 -t $1
■プログラムvoicevox.py
import requests
import argparse
import json
from playsound import playsound
# VOICEVOXをインストールしたPCのホスト名を指定してください
HOSTNAME='192.168.XX.XX'
# コマンド引数
parser = argparse.ArgumentParser(description='VOICEVOX API')
parser.add_argument('-t','--text', type=str, required=True, help='読み上げるテ>キスト')
parser.add_argument('-id','--speaker_id' , type=int, default=2, help='話者ID')
parser.add_argument('-f','--filename', type=str, default='voicevox', help='ファ>イル名')
parser.add_argument('-o','--output_path', type=str, default='.', help='出力パス名')
# コマンド引数分析
args = parser.parse_args()
input_texts = args.text
speaker = args.speaker_id
filename = args.filename
output_path = args.output_path
#「 。」で文章を区切り1行ずつ音声合成させる
texts = input_texts.split('。')
# 音声合成処理のループ
for i, text in enumerate(texts):
# 文字列が空の場合は処理しない
if text == '': continue
# audio_query (音声合成用のクエリを作成するAPI)
res1 = requests.post('http://' + HOSTNAME + ':50021/audio_query',
params={'text': text, 'speaker': speaker, 'volume': 3.0})
# synthesis (音声合成するAPI)
res2 = requests.post('http://' + HOSTNAME + ':50021/synthesis',
params={'speaker': speaker},
data=json.dumps(res1.json()))
# wavファイルに書き込み
with open(output_path + '/' + filename + f'_%03d.wav' %i, mode='wb') as f:
f.write(res2.content)
# 音声再生
playsound("./voicevox_000.wav")
【注意】(プログラムは「。」で音声ファイルを分けていますが、playsoundは音声ファイルを1つしか再生していません。テキストで「。」がある場合は別文字に変換して使用しています。)
HOSTNAMEはVOICEVOXのHTTPサーバ(run.exe)を起動しているPCのアドレスです。
PC側ではrun.exe起動時下記のオプションをつけてください。
run.exe --host 192.168.XX.XX
参考記事
Windows/Macに入れたVOICEVOXをPython経由で使う方法
(https://ponkichi.blog/voicevox-python-curl/)