はじめに
会社でずんだもんに何かを読み上げさせたい時、VOICEVOXを使いたくなる時がありますね。
ただ、会社PCだとレジストリをいじるようなexeを禁止されている場合もあります。
そこで、zip版でできるかどうかを確かめてみます。
手順
0. VOICEVOXのインストール
公式サイトに移動。
ここで、ダウンロード時に「Zip」を選びます。
「Zip」を選ぶと、インストーラがないので、任意のフォルダに置いてしまいます。
なお、実際のwav作成はWeb APIを使って作成するので、環境変数でPATHを設定するなどの作業も不要です。
当たり前ですが、インストールは初回のみでOK。
1. VOICEVOXを起動
上記フォルダのVOICEVOX.exeを起動。
ブラウザで http://127.0.0.1:50021 を叩き、サーバが立ち上がっていることを確認。
2. Web APIを叩いて、wav作成
この状態で、PythonなどでWeb APIを叩けばwavは作成できます。サンプルコードはQiitaにたくさんありますので、適宜参考にしてください。たとえば、以下をご参照。
メモ
- 基本的に、http://127.0.0.1:50021/audio_query で作りたい音声合成用のクエリを作って、帰ってきたレスポンス(json)を使って http://127.0.0.1:50021/synthesis に送り付けるとwavのバイナリが返ってくるので、それをファイルにして保存するという流れ。
- 読み上げ速度を変更したい場合などは、最初のレスポンスjsonを直接書き換えるようだ。
上記のサイトを参考にアレンジすると
vvt.py
import json
import requests
import wave
# パラメータ
params_dict = {
'text' : "これはテストなのだ。",
'speaker': 1
}
# 追加のパラメータ
data_dict = {
'speedScale': 1.3
}
def generate_wav(filepath='./audio.wav'):
host = 'localhost'
port = 50021
response1 = requests.post(
f'http://{host}:{port}/audio_query',
params=params_dict
)
headers = {'Content-Type': 'application/json',}
# 追加のパラメータ
my_audio_query = response1.json()
for key, value in data_dict.items():
my_audio_query[key] = value
response2 = requests.post(
f'http://{host}:{port}/synthesis',
headers=headers,
params=params_dict,
data=json.dumps(my_audio_query)
)
wf = wave.open(filepath, 'wb')
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
wf.writeframes(response2.content)
wf.close()
if __name__ == '__main__':
generate_wav()
あとは、params_dict.textを外部ファイル化などすれば、より便利になるだろうと感じた。
2025/02/20追記
「より便利になるだろう」という点を改造しました。
(つづく)