😮

Python経由でVoiceVoxの音声ファイルを作成する方法

2024/10/04に公開

VOICEVOXありがとう…

VOICEVOX、便利ですよね!ずんだもんや春日部つむぎさんなどの可愛い声で自然な音声合成ができる神フリーソフトウェアです。動画編集されていたら、お世話になった方も多いのではないでしょうか?そんなVOICEVOXですが、ローカルで動作するため、APIを利用してPythonで音声を生成することができます。

より具体的には、VOICEVOXには、ローカルサーバーを起動してHTTPリクエストを通じて音声を生成できるAPIが提供されています。PythonからこのAPIにアクセスして、テキストを渡すことで音声ファイルを生成することが可能です。今回はその方法についてまとめました。

VOICEVOXをPythonで使う手順

1. VOICEVOXのインストール

まず、VOICEVOXのローカル版をダウンロードし、インストールします。VOICEVOXの公式サイトからインストーラを入手できます。すでにVOICEVOXをインストール済みであれば次のステップに進んでください。

VOICEVOX 公式ダウンロードページ
https://voicevox.hiroshiba.jp/

VOICEVOXをインストール後、ローカルサーバー機能を使うため、以下の手順に従います。

2. VOICEVOXのサーバーを起動

VOICEVOXをローカルで使うために、サーバーモードで起動します。VOICEVOXを起動すると、サーバーモードでの操作が可能になります。通常、デフォルトでlocalhost:50021でAPIサーバーが動作します。

3. PythonからVOICEVOX APIを使用して音声を生成する

VOICEVOX APIを使って音声を生成するために、requestsライブラリを使ってAPIエンドポイントにテキストを送信します。まず、必要なライブラリをインストールします。すでにrequestsはインストール済みの場合は次のステップに進んでください。

pip install requests

それでは、PythonからVOICEVOX APIを使って音声を生成する例を示します。

import requests
import json

# 音声合成を行う関数
def synthesize_voice(text, speaker=1, filename="output.wav"):
    # 1. テキストから音声合成のためのクエリを作成
    query_payload = {'text': text, 'speaker': speaker}
    query_response = requests.post(f'http://localhost:50021/audio_query', params=query_payload)

    if query_response.status_code != 200:
        print(f"Error in audio_query: {query_response.text}")
        return

    query = query_response.json()

    # 2. クエリを元に音声データを生成
    synthesis_payload = {'speaker': speaker}
    synthesis_response = requests.post(f'http://localhost:50021/synthesis', params=synthesis_payload, json=query)

    if synthesis_response.status_code == 200:
        # 音声ファイルとして保存
        with open(filename, 'wb') as f:
            f.write(synthesis_response.content)
        print(f"音声が {filename} に保存されました。")
    else:
        print(f"Error in synthesis: {synthesis_response.text}")

if __name__ == "__main__":
    # 読み上げたいテキスト
    text = "こんにちは、VOICEVOXでテキストを音声に変換しています。"

    # 音声合成の実行
    synthesize_voice(text, speaker=1, filename="voicevox_output.wav")

コードの説明

  • 音声合成クエリの作成:
    テキストを/audio_queryエンドポイントに送信し、音声合成のためのクエリデータを作成します。このクエリデータには、音声合成に必要な情報が含まれています(イントネーションや音声のピッチなど)。

  • 音声データの生成:
    クエリデータをもとに、/synthesisエンドポイントに送信し、音声データを生成します。生成された音声データはWAVファイルとして保存されます。

  • speakerパラメータ:
    VOICEVOXは複数の話者に対応しており、speakerパラメータで話者を指定できます。デフォルトでは1(四国めたん)の声が使用されます。
    話者(スピーカー)の変更方法
    VOICEVOXは複数の話者(スピーカー)をサポートしており、それぞれ異なる声で音声を生成できます。例えば、以下のようなスピーカーが存在します(バージョンにより異なる場合があります)。

1: ずんだもん(あまあま)
2: 四国めたん(ノーマル)

その他のスピーカーも利用可能です。
(こちらの記事でスピーカーのid一覧を取得する方法を紹介しています)
https://zenn.dev/zenn24yykiitos/articles/f3e983fe650e08
話者のIDを変更する場合、speakerパラメータを変更します。

synthesize_voice(text, speaker=2, filename="voicevox_output_zundamon.wav")  # ずんだもんの声で生成

注意点

  • VOICEVOXのサーバー起動:
    VOICEVOXのサーバーがローカルで起動している必要があります。サーバーが起動していない場合、APIにアクセスできません。

  • 日本語テキストの制限:
    VOICEVOXは日本語に特化しているため、英語などの他言語には対応していません。他言語の音声合成には、別のツールやAPIを使用する必要があります。

  • 音声ファイルのフォーマット:
    出力される音声ファイルはWAV形式です。必要に応じて、MP3など他のフォーマットに変換することもできます。

まとめ

VOICEVOXをPythonから使用するには、ローカルでサーバーを起動し、Pythonのrequestsライブラリを使ってAPIにアクセスすることで、テキストから音声を生成し、WAVファイルとして保存できます。音声の話者(スピーカー)も簡単に変更可能で、カスタマイズされた音声合成が実現できます。

PythonでVOICEVOXを操作できれば、csvファイルなどにまとめた複数の文字列をループ処理で音声ファイル出力できます。テキストのコピペをいちいちする必要がないので、寝る前に処理を実行しておけば、翌朝ファイルができている…という状態を実現できます。作成したファイルは、もちろんゲームや動画編集にも使えます(一般公開する際には、クレジット表記を忘れずに!)。

Discussion