#author("2025-04-17T15:02:56+09:00","","") * VOICEVOX [#nd0e57e8] #author("2025-04-17T15:03:50+09:00","","") * VOICEVOX (音声合成エンジン) [#p502c166] https://voicevox.hiroshiba.jp/ GUIの使い方は見ればわかると思うので、ここでは REST API を利用する方法を記載します。 ** インストール&起動 (CPU) [#vfb27fe5] -下記サイトのダウンロードより、次を選択してダウンロードする。 Linux CPU tar.gz https://voicevox.hiroshiba.jp/ -解凍する。 tar zxvf voicevox-linux-cpu-x.xx.x.tar.gz -起動 cd VOICEVOX/vv-engine ./run --host 0.0.0.0 --port 50021 http://0.0.0.0:50021 で待ち受けます。~ ※引数無しの場合は、http://localhost:50021 で待ち受けます。~ ※その他のオプションは、./run --help で確認できます。~ ** インストール&起動 (Docker + GPU) [#r076e8ca] - docker-compose 利用の場合 次の docker-compose.yaml ファイルを用意する。 version: '3' services: voicevox: image: voicevox/voicevox_engine:nvidia-latest ports: - 127.0.0.1:50021:50021 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] # 外部からアクセス可能とする場合は、127.0.0.1 → 0.0.0.0 に変更ください。 起動する。 docker-compose up -d ※コンテナで GPU を使う方法は、[[Windows/wsl/gpu]] を参照ください。 ** 使い方 [#aa788da3] - キャラ一覧取得する。 curl http://127.0.0.1:50021/speakers - 音声合成用のクエリを作成する。 # path: audio_query # query: # text=<メッセージ> # speaker=<キャラID> # 出力: 音声合成で利用する JSON データが返されます。 curl -X POST -G http://127.0.0.1:50021/audio_query --data-urlencode 'text=今日の天気は晴れでしょう' --data-urlencode 'speaker=1' - 音声合成する。 # 音声合成用のクエリ作成の応答を取得 RESPONSE=`curl -X POST -G http://127.0.0.1:50021/audio_query --data-urlencode 'text=今日の天気は晴れでしょう' --data-urlencode 'speaker=1'` # 音声合成 # path: synthesis # query: # speaker=<キャラID> # body: # <音声合成用のクエリ作成の応答(JSON)> # 出力: 音声合成した wav ファイルが返されます。 curl -X POST -H "Content-Type: application/json" http://127.0.0.1:50021/synthesis?speaker=1 -d "${RESPONSE}" --output "output.wav" ** 使い方 (Python で実現) [#q06b7ceb] #code(python){{ #!/usr/bin/env python import requests import sys BASE_URL = "http://127.0.0.1:50021" def main(): args = sys.argv args_len = len(args) if args_len < 2: print("Usage: ./synthesis.py message [speaker id] [output filename]") return text = args[1] speaker = int(args[2]) if args_len >= 3 else 1 filename = args[3] if args_len >= 4 else "output.wav" synthesis(text, speaker, filename, BASE_URL) def synthesis(text: str, speaker: int, filename: str, baseurl: str): # 1. クエリ作成 [audio_query] query = { 'text': text, 'speaker': speaker, } response = requests.post(f"{baseurl}/audio_query", params=query) if response.status_code != 200: # クエリ作成失敗 # エラー処理... print(f"Error: audio_query: {response.text}") return False # 2. 音声合成 [synthesis] query = { 'speaker': speaker, } json_data = response.json() response = requests.post(f"{baseurl}/synthesis", params=query, json=json_data) if response.status_code != 200: # 音声合成失敗 # エラー処理... print(f"Error: synthesis: {response.text}") return False # 3. WAV ファイル生成 with open(filename, "wb") as f: f.write(response.content) print(f"output: {filename}") return True if __name__ == '__main__': main() }} ** API 詳細 [#ub853509] https://voicevox.github.io/voicevox_engine/api/ または、起動後 http://127.0.0.1:50021/docs にアクセスすることで API が確認できます。