VOICEVOXとは?

VOICEVOXは、無料で使えるローカル動作の音声合成ソフトです。ずんだもん・四国めたん・春日部つむぎなど、個性豊かなキャラクターボイスを使って日本語テキストを音声に変換できます。

  • 完全ローカル動作(インターネット不要)
  • 商用・個人利用ともに無料(各キャラクターの利用規約要確認)
  • REST API経由でPythonから簡単に呼び出し可能
  • Windows / Mac / Linux 対応

VOICEVOX Engineのダウンロード

GUIアプリが不要な場合は、エンジン単体版をダウンロードするのがおすすめです。

  1. 以下の GitHub Releases ページにアクセスします。
    https://github.com/VOICEVOX/voicevox_engine/releases
  2. 最新バージョンの Assets から Windows 用ファイルを選択します。
    • GPU版(NVIDIA GPU搭載の場合):windows-nvidia-*.zip
    • CPU版(一般的なPC):windows-cpu-*.zip
  3. ZIPファイルをダウンロードし、好きな場所に展開します。
    例:C:\voicevox_engine\

💡 ヒント: GUIアプリ版(voicevox.hiroshiba.jp)をすでに持っている場合は、そちらを起動するだけでOKです。エンジンは自動的にポート50021で立ち上がります。


run.exeの起動方法

展開したフォルダ内に run.exe があります。これをダブルクリックするだけでAPIサーバーが起動します。

C:\voicevox_engine\
  ├── run.exe         ← これをダブルクリック!
  ├── speaker_info\
  └── ...

起動するとコマンドプロンプトの黒い画面が開き、以下のようなメッセージが表示されれば成功です。

INFO:     Uvicorn running on http://127.0.0.1:50021 (Press CTRL+C to quit)

起動確認の方法

ブラウザで以下のURLにアクセスして、バージョン番号が表示されればOKです。

http://localhost:50021/version

また、http://localhost:50021/docs にアクセスすると、APIの全エンドポイントを確認できるSwagger UIが開きます。

⚠ 注意: Pythonコードを実行する前に、必ず run.exe を起動しておいてください。起動していないと接続エラーになります。


Pythonの準備

必要なライブラリをインストールします。コマンドプロンプトまたはPowerShellで実行してください。

pip install requests sounddevice soundfile

pyaudio を使う場合はこちら(インストールに失敗する場合は sounddevice 推奨):

pip install requests pyaudio

基本コード(コピペでOK)

以下のコードをそのままコピーして voicevox_speak.py として保存し、実行してください。

import requests
import json
import sounddevice as sd
import soundfile as sf
import io

# VOICEVOXエンジンのURL(run.exe起動後のデフォルト)
VOICEVOX_URL = "http://localhost:50021"

def text_to_speech(text: str, speaker_id: int = 1) -> bytes:
    """
    テキストをWAV音声データに変換する関数

    主なspeaker_id:
      0  = 四国めたん(ノーマル)
      1  = ずんだもん(ノーマル)  ← デフォルト
      3  = ずんだもん(あまあま)
      8  = 春日部つむぎ
      13 = 青山龍星
    """

    # ステップ1: Audio Query(音声パラメータ)を取得
    query_res = requests.post(
        f"{VOICEVOX_URL}/audio_query",
        params={"text": text, "speaker": speaker_id}
    )
    query_res.raise_for_status()
    audio_query = query_res.json()

    # ステップ2: 音声合成(WAVデータを取得)
    synth_res = requests.post(
        f"{VOICEVOX_URL}/synthesis",
        params={"speaker": speaker_id},
        headers={"Content-Type": "application/json"},
        data=json.dumps(audio_query)
    )
    synth_res.raise_for_status()

    return synth_res.content  # WAVバイト列を返す


def play_audio(wav_bytes: bytes):
    """WAVデータをスピーカーで再生する"""
    buf = io.BytesIO(wav_bytes)
    data, samplerate = sf.read(buf)
    sd.play(data, samplerate)
    sd.wait()  # 再生が終わるまで待機


# ===== メイン処理 =====
if __name__ == "__main__":
    text = "こんにちは!VOICEVOXでテキストを音声に変換しています。"
    speaker_id = 1  # ずんだもん(ノーマル)

    print(f"合成中: {text}")
    wav_data = text_to_speech(text, speaker_id)

    print("再生中...")
    play_audio(wav_data)

    print("完了!")

実行方法

  1. run.exe をダブルクリックして起動(黒い画面が開く)
  2. 別のコマンドプロンプトを開く
  3. python voicevox_speak.py を実行
  4. スピーカーから音声が流れれば成功!

キャラクター一覧の取得

どんなキャラクターとスタイル(speaker_id)が使えるかを確認するコードです。

import requests

VOICEVOX_URL = "http://localhost:50021"

def list_speakers():
    speakers = requests.get(f"{VOICEVOX_URL}/speakers").json()
    for speaker in speakers:
        print(f"\n【{speaker['name']}】")
        for style in speaker['styles']:
            print(f"  ID: {style['id']:3d}  スタイル: {style['name']}")

list_speakers()

実行すると、以下のような一覧が表示されます。

【四国めたん】
  ID:   0  スタイル: ノーマル
  ID:   2  スタイル: あまあま
  ID:   4  スタイル: ツンツン

【ずんだもん】
  ID:   1  スタイル: ノーマル
  ID:   3  スタイル: あまあま
  ID:   7  スタイル: ささやき
  ...

話し方のカスタマイズ

話す速さ・ピッチ・抑揚などを自由に調整できます。

def text_to_speech_custom(text: str, speaker_id: int = 1) -> bytes:
    # Audio Queryを取得
    query = requests.post(
        f"{VOICEVOX_URL}/audio_query",
        params={"text": text, "speaker": speaker_id}
    ).json()

    # パラメータを調整(必要な箇所だけ変更してOK)
    query["speedScale"]        = 1.2   # 話速  (0.5〜2.0、1.0が標準)
    query["pitchScale"]        = 0.0   # ピッチ (-0.15〜0.15)
    query["intonationScale"]   = 1.5   # 抑揚  (0.0〜2.0)
    query["volumeScale"]       = 1.0   # 音量  (0.0〜2.0)
    query["prePhonemeLength"]  = 0.1   # 開始の無音(秒)
    query["postPhonemeLength"] = 0.1   # 終了の無音(秒)

    wav = requests.post(
        f"{VOICEVOX_URL}/synthesis",
        params={"speaker": speaker_id},
        headers={"Content-Type": "application/json"},
        data=json.dumps(query)
    ).content

    return wav

WAVファイルに保存する

音声をスピーカーで鳴らすのではなく、WAVファイルとして保存したい場合は以下のようにします。

def save_audio(wav_bytes: bytes, filename: str = "output.wav"):
    """WAVファイルとして保存する"""
    with open(filename, "wb") as f:
        f.write(wav_bytes)
    print(f"保存しました: {filename}")

# 使用例
wav_data = text_to_speech("保存するテキストです。", speaker_id=1)
save_audio(wav_data, "output.wav")

トラブルシューティング

エラー・症状 原因 対処法
ConnectionRefusedError run.exe が起動していない run.exe をダブルクリックしてから再実行
黒い画面がすぐ閉じる ポートが競合または権限不足 run.exe を右クリック→「管理者として実行」を試す
音が出ない(エラーなし) 出力デバイスの問題 save_audio でWAVに保存してメディアプレーヤーで確認
sounddevice インストール失敗 VisualC++が不足 pyaudio に切り替えるか、
Microsoft Visual C++ Redistributable をインストール
文字化け・声がおかしい テキストが長すぎる 100文字以内に分割して渡す

ポートが使用中の場合

run.exe は既定でポート 50021 を使います。別のポートにするには、run.exe をコマンドプロンプトから起動します。

cd C:\voicevox_engine
run.exe --port 50031

Pythonコード側も VOICEVOX_URL = "http://localhost:50031" に変更してください。


まとめ

VOICEVOXをWindowsでPythonから使う手順を整理すると、たった3ステップです。

  1. run.exe をダブルクリックしてAPIサーバーを起動
  2. pip install requests sounddevice soundfile でライブラリを準備
  3. Pythonコードで /audio_query/synthesis の順にAPIを叩いて再生

インターネット不要・完全ローカルで高品質な日本語音声合成が実現できます。読み上げBot、ナレーション自動生成、アシスタントアプリなど、さまざまな用途に応用してみてください。


参考: VOICEVOX Engine GitHub / VOICEVOX 公式サイト