Style-Bert-VITS2 をAPIで叩いてみる【プログラミング初心者がAIを活用】AITuber制作の備忘録
Style-Bert-VITS2
「Style-Bert-VITS2」は、感情や発話スタイルを自由に強弱をつけて制御できる上に、モデルの学習やマージも可能なツールです。
1月9日には「Style-Bert-VITS2」に大幅なアップデートが行われており(少し前にAPIでも叩けるようになっていたので)早速、試してみました。
今回も自分用のメモ程度の備忘録になります。
API Server
「Style-Bert-VITS2」をセットアップした環境でpython server_fastapi.pyを実行すると、APIサーバーが起動します。モデルが読み込まれ、Webサーバーがローカル環境で立ち上がれば、準備は完了です。
特にブラウザ上にUIが立ち上がってたりはしませんので注意。
デフォルトでは「http://127.0.0.1:5000」に立ち上がります。
APIの仕様は起動後「http://127.0.0.1:5000/docs」で確認できます。
これにより、現状で使っている音声合成「VOICEVOX」とほぼ同じように、ローカル環境でAPIを叩くことが可能になりました。
AIプログラミングツール「Cursor」に「VOICEVOX」のコードを「Style-Bert-VITS2」に書き換えるよう指示。関連するドキュメントやリンク、コードを流し込むと、自動的に置き換えが行われました。いつもこれが凄い。
以下がそのモデル設定のコードです。
`speaker_id`、`model_id`、`speaker_name`は自分のモデルに合わせて変更すれば良さそうです。他はデフォルト設定になっていますね。
上手く動きそうなのでAITuberに組み込みました(記事の最後に動画あり)
params = {
'text': text, # 変換するテキスト
'speaker_id': speaker_id, # 話者のID
'model_id': model_id, # 使用するモデルのID
'speaker_name': speaker_name, # 話者の名前(speaker_idより優先される)
'sdp_ratio': 0.2, # SDP(Stochastic Duration Predictor)とDP(Duration Predictor)の混合比率
'noise': 0.6, # サンプルノイズの割合(ランダム性を増加させる)
'noisew': 0.8, # SDPノイズの割合(発音の間隔のばらつきを増加させる)
'length': 0.9, # 話速(1が標準)
'language': 'JP', # テキストの言語
'auto_split': 'true', # 自動でテキストを分割するかどうか
'split_interval': 1, # 分割した際の無音区間の長さ(秒)
'assist_text': None, # 補助テキスト(読み上げと似た声音・感情になりやすい)
'assist_text_weight': 1.0, # 補助テキストの影響の強さ
'style': 'Neutral', # 音声のスタイル
'style_weight': 5.0, # スタイルの強さ
'reference_audio_path': None # 参照オーディオパス(スタイルを音声ファイルで指定)
}
モデルの学習とマージ
モデルの学習とマージ方法については、以下の動画が非常にわかりやすかったです。学習はinputsフォルダに音声データwavを入れ、Dataset.batから行います。マージはMerge.batからです。わかりやすいUIが用意されているので、初心者でもすぐに始められそうです。
Style-Bert-VITS2のAPI設定でつまずいた部分
「ChatGPT」から生成されたテキストを「Style-Bert-VITS2」で音声合成する際、テキストが長すぎるのかエラーが多発しました。これはテキストを分割して流し込むことで解決。ただし、細かく分割したテキストを音声合成すると、文章の切れ目にノイズが混入する事態に。これは生成される音の前後に0.1秒程度の無音部分を挿入するコードを追加し解決しました。
今回の生成物
音声合成のテスト中に偶然「関西弁風」の話し方になり、妙に可愛かったので今回は「エセ関西弁」を話すキャラにしてみました。話すスピードも0.9にして少し早くしています。
週単位で驚くべきAIツールが登場し、インフラが整備されている今、どんな大ヒットするAITuberが出現するのか非常に楽しみですね。
ご一読いただき、ありがとうございます。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?