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の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()
こんな感じになります。