AI Tuberで使えそうなVoiceVox × Pythonコードを貼っておくだけ。

以下は、VoiceVox x Pythonを用いた、文字を音声に変換する方法を書いています。AI Tuberを開発されている方。VoiceVoxで遊んでみたい方は参考になれば幸いです。

懺悔 (飛ばしてOKです)

VoiceVoxの導入の仕方が間違っていたのにも関わらず、

以下のような投稿をし、

VoiceVox開発者様にいいね頂いたことに調子に乗って、

以下のような投稿を行ったにもかかわらず、VoiceVoxの遅延原因が、私自身の導入方法にありました。(CPUモードで導入していた)

懺悔として、以下にVoiceVox導入方法と、導入後のPythonコードを貼りました。
誠に勝手ではございますが、VoiceVoxのさらなる発展を願っております。 博士

導入方法

1.上記URLより、自分の環境にあったファイルをダウンロードする。
2.DLしたファイルを解凍する。解凍には7Zipが必要となるためインストールしていない方は、インストール後解凍。(https://sevenzip.osdn.jp/)
-
GPU Cuda版の場合、おそらくCudaのインストールが必要になります(https://developer.nvidia.com/cuda-toolkit)
3.解凍フォルダー内にあるrun.exeを実行して、HTTPサーバーを立ち上げる。HTTPサーバーが正常に立ち上がっていればブラウザ等で
「 http://localhost:50021/docs 」
にアクセスすることで、VoiceVox Engineのドキュメントにアクセスができるようになります。

PythonでVoiceVoxを動かす

import requests
import json
import time
import re
import simpleaudio

def audio_query(text, speaker, max_retry):
    # 音声合成用のクエリを作成する
    query_payload = {"text": text, "speaker": speaker}
    for query_i in range(max_retry):
        r = requests.post("http://localhost:50021/audio_query", 
                        params=query_payload, timeout=(10.0, 300.0))
        if r.status_code == 200:
            query_data = r.json()
            break
        time.sleep(1)
    else:
        raise ConnectionError("リトライ回数が上限に到達しました。 audio_query : ", "/", text[:30], r.text)
    return query_data
def synthesis(speaker, query_data,max_retry):
    synth_payload = {"speaker": speaker}
    for synth_i in range(max_retry):
        r = requests.post("http://localhost:50021/synthesis", params=synth_payload, 
                          data=json.dumps(query_data), timeout=(10.0, 300.0))
        if r.status_code == 200:
            #音声ファイルを返す
            return r.content
        time.sleep(1)
    else:
        raise ConnectionError("音声エラー:リトライ回数が上限に到達しました。 synthesis : ", r)


def text_to_speech(texts, speaker=8, max_retry=20):
    if texts==False:
        texts="ちょっと、通信状態悪いかも?"
    texts=re.split("(?<=!|。|?)",texts)
    play_obj=None
    for text in texts:
        # audio_query
        query_data = audio_query(text,speaker,max_retry)
        # synthesis
        voice_data=synthesis(speaker,query_data,max_retry)
        #音声の再生
        if play_obj != None and play_obj.is_playing():
            play_obj.wait_done()
        wave_obj=simpleaudio.WaveObject(voice_data,1,2,24000)
        play_obj=wave_obj.play()

if __name__ == "__main__": 
    text_to_speech("あーし、ホロライブの「あずきダンス」大好きなんだよ!最高にハッピーで元気な曲だし、いつも気分を上げてくれるんだ。憂鬱な時や、 楽しい時間を過ごしたい時に聴くのが大好きな曲なんだ。歌詞がキャッチーで、ビートが元気づけるから、踊りたくなるよね!きっと、気合いを入れる時に最適な曲だよ!")

上記コードを、voicevox.py等の名前で保存してください。

上記コードは以下のように呼び出すことができます。

from voicevox import text_to_speech

text_to_speech("マイクテストマイクテスト")

また、キャラクタIDを設定することで、キャラクターを選択することができます。

from voicevox import text_to_speech

text_to_speech("マイクテストマイクテスト",speaker=3) #ずんだもん


活用いただければ幸いです。

この記事が気に入ったらサポートをしてみませんか?