見出し画像

AIVtuberを作る#4

Style-Bert-VITS2 JP-Extraの残念なところ・・・けど、解決方法は見つけました

AIVtuberを作る時に音声はStyle-Bert-VITS2 JP-Extraを使用しようとした場合、APIを使う選択がほとんどではないでしょうか?
私もStyle-Bert-VITS2 JP-ExtraのAPIを使用してしゃべらせようと思いAPIで接続するようにプログラムを書いていたのですが、動きませんでした・・・。
いろいろ試行錯誤して、なぜダメなのかがわかりました。

Style-Bert-VITS2 JP-ExtraのAPI説明

説明通りにプログラムを組んでもエラーがでるだけでちっとも動かなかったんです・・・。
エラー等からStyle-Bert-VITS2 JP-Extraのmodel_assetsフォルダのモデルフォルダ内に”モデル名.safetensors”がないためでした。
たとえば、デフォルトで入っているjvnv-F1-jpの場合、モデルファイル名は”jvnv-F1-jp_e160_s14000.safetensors”であり”jvnv-F1-jp.safetensors”ではないため、エラーで動かない原因でした。
”jvnv-F1-jp_e160_s14000.safetensors”をコピーして、コピーしたものの名前を”jvnv-F1-jp.safetensors”にリネームすれば動くようになりました。

このsimple_ttsのAPIはmodel_nameでモデル名を指定するのですが、そのモデル名からモデルファイルを指定しているにもかかわらず、モデルフォルダ内には”モデル名.safetensors”がないためエラーが出て正常に動作しない状態でした。

ただ、このAPIだとwavファイルができて、そのパスを返すのみのAPIだったため、直接音声が出せるものではなかったため、Style-Bert-VITS2 JP-ExtraのAPI説明には書いていないvoiceと言うAPIを使用してとりあえずはAPIから音声出力はできるようになりました。

ちなみにそのvoiceの使い方は

text=quote(content)
    url="http://127.0.0.1:5000/voice?text=" + text + "&model_id=0&speaker_id=0&sdp_ratio=0.2&noise=0.6&noisew=0.8&length=1&language=JP&auto_split=true&split_interval=0.5&assist_text_weight=1&style=Neutral&style_weight=5"
    response = requests.get(url)
    if response.status_code == 200:
        audio_data = response.content
        # PyAudioで音声データを再生
        p = pyaudio.PyAudio()
        stream = p.open(format=pyaudio.paInt16,
                        channels=1,
                        rate=44100,
                        output=True)
        stream.write(audio_data)
        stream.stop_stream()
        stream.close()
        p.terminate()

こんな感じになります。

いいなと思ったら応援しよう!