メインコンテンツへスキップ

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) #ずんだもん


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

     
     
    科学系YouTuber+ハードウェアエンジニアなゴリラのお話。

    あなたへのおすすめ