0
0

More than 1 year has passed since last update.

音声合成の3つの方法

Last updated at Posted at 2023-04-23

はじめに

いままで、音声合成に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/)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0