Pythonスキルの習得

【Python 音声合成】VOICEVOXで、テキストを読み上げてもらう – インストール方法から解説 –

【Python 音声合成】VOICEVOXで、テキストを読み上げてもらう - インストール方法から解説 -
背景 by AIイラスト

こんにちは、Zero-Cheeseです。

Pythonを使って、テキスト読み上げソフト「VOICEVOX」を操作してみませんか?

  • 「VOICEVOX」は、誰でも無料で、直接コードから扱える音声合成ツールです。

本記事は、Python初心者の方でも大丈夫です。

コピペして、使用することができます。

VOICEVOXの特徴

プログラミング言語から操作できる、音声合成ソフトの中で、有名なものを比較しました。

サービス名(製品名)エンジン商用利用エンジンメーカ無料
VOICEVOXAIOKオープンソース
Open JTalk(スタンドアロン版)HMMOK
修正BSDライセンス
オープンソース
Google Text-to-SpeechAIGoogle
Amazon PollyAIOKAmazon
Microsoft Azure Text-to-SpeechAIOKMicrosoft
Google Text-to-Speechは、「利用規約を読み、ご自身で判断して下さい」との事です。

有料版においても、「無料枠」があるサービスがあります。

VOICEVOXの優れている点は、下記のとおりです。

  • 商用利用OK
  • 無料
  • プログラミングから操作可能
  • 感情表現が豊か
  • さまざまな声のキャラクターが存在します。

是非、試してみて、楽しんでみて下さい!

Pythonから、VOICEVOXを使用する

VOICEVOXをPythonから操作するには、以下のステップをたどります。

  • VOICEVOXのインストール
  • Pythonからの実行にあたり、必要なパッケージのインストール
  • Pythonのコード紹介

VOICEVOXのインストール

VOICEVOXの公式サイトにいき、「ダウンロード」ボタンをクリックすれば、インストールファイルがDLできます。

Windows、Mac、Linuxに対応しています。

VOICEVOXのインストール後、プログラミングを実行する前に、VOICEVOXを起動しておく必要があります。

VOICEVOXを起動すると、「localhost:50021」にて、アクセスが可能です。

Pythonからの実行にあたり、必要なパッケージのインストール

必要なPythonパッケージを、pipを使ってインストールします。

今回、使用するパッケージは、

  • requests
  • simpleaudio

です。

コマンドプロンプト(ターミナル)から、下記コマンドを実行して下さい。

pip install requests
pip install simpleaudio

Pythonのコード紹介

VOICEOVOXにて、テキストを読み上げるためには、下記プロセス順にコードを作る必要があります。

  1. 音声合成用のクエリを作成(母音や子音への分解、アクセント検出等を行う)
  2. 上記のクエリを基に、音声を合成
  3. 合成した音声を、「wavファイル」に保存
  4. 「wavファイル」の再生

本コードでは

  • 一度、「wavファイル」を作成してから
  • 作成した「wav」ファイル」を再生する

方法を採用しています。

ファイルを作らず、Stream方式で音声再生する方法もありますが、ノイズが入ったりする事が多いため、こちらの方式を採用しました。

繰返しになりますが、本Pythonコード実行前に、VOICEVOXを起動しておいて下さい。

下記コードは、「今日も、元気です!」と読み上げてもらうコードです。

7行目「speaker_id」は、話者IDです。詳細は、次の章をご覧下さい。

import json

import requests
import simpleaudio


def text_2_wav(text, speaker_id=8, max_retry=20, filename='audio.wav'):
    # 音声合成のための、クエリを作成
    query_payload = {"text": text, "speaker": speaker_id}
    for query_i in range(max_retry):
        response = requests.post("http://localhost:50021/audio_query",
                                 params=query_payload,
                                 timeout=10)
        if response.status_code == 200:
            query_data = response.json()
            break
    else:
        raise ConnectionError('リトライ回数が上限に到達しました。')

    # 音声合成データの作成して、wavファイルに保存
    synth_payload = {"speaker": speaker_id}
    for synth_i in range(max_retry):
        response = requests.post("http://localhost:50021/synthesis",
                                 params=synth_payload,
                                 data=json.dumps(query_data),
                                 timeout=10)
        if response.status_code == 200:
            with open(filename, "wb") as fp:
                fp.write(response.content)
            break
    else:
        raise ConnectionError('リトライ回数が上限に到達しました。')


def play_auido_by_filename(filename: str):
    # 保存したwavファイルを、再生
    wav_obj = simpleaudio.WaveObject.from_wave_file(filename)
    play_obj = wav_obj.play()
    play_obj.wait_done()


if __name__ == '__main__':
    filename = 'audio.wav'  # 音声データのファイル名
    text_2_wav('今日も、元気です!', filename=filename)
    play_auido_by_filename(filename)

(参考1)VOICEVOX 話者IDに関して

こちらの番号を変更することで、話者を変更する事ができます。

気に入ったものを、探してみて下さい。

・四国めたん
 ・ノーマル : 2
 ・あまあま : 0
 ・ツンツン : 6
 ・セクシー : 4

・ずんだもん
 ・ノーマル : 3
 ・あまあま : 1
 ・ツンツン : 7
 ・セクシー : 5

・春日部つむぎ
 ・ノーマル : 8

・雨晴はう
 ・ノーマル : 10

・波音リツ
 ・ノーマル : 9

・玄野武宏
 ・ノーマル : 11

・白上虎太郎
 ・ノーマル : 12

・青山龍星
 ・ノーマル : 13

・冥鳴ひまり
 ・ノーマル : 14

・九州そら
 ・ノーマル : 16
 ・あまあま : 15
 ・ツンツン : 18
 ・セクシー : 17
 ・ささやき : 19

Google Colab ではじめる VOICEVOXより引用

(参考2)VOICEVOX ドキュメンテーションの確認方法

VOICEOVOXを立ち上げた状態で、下記URLをブラウザに入力します。

http://localhost:50021/docs

ドキュメンテーションが表示されます。

最後に

本記事では、

  • VOICEVOXのインストール方法
  • Pythonから、VOICEVOXを操作する方法

をご紹介しました。

コードを作る上でのポイントは、

  • 音声合成のためのクエリを作ってから、
  • 音声合成するという

順番で、記載する点です。

また、遅延なく読み上げてもらうためには、長い文章でも、短い文章単位に分けて、音声合成する必要があります。

是非、工夫してみて下さい!

本記事も、最後までお付き合い頂き、ありがとうございました。

それではまた、お会いしましょう!