#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 が確認できます。
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS