Style-Bert-VITS2でAnneliとAnneli-nsfwをマージしたささやき声を作ってみた
コメント欄にてAnneliとAnneli-nsfwを通常マージした後にwhisperをヌルモデルマージするという興味深い手法を教えて頂きました。
言われて納得。前回の記事で、右側のマージモデルのほうが良く聞こえたのは、Anneli-nsfwとつくよみちゃんを(つくよみちゃん重めで)通常マージした後、ヌルモデルマージしたからでした。
AnneliとAnneli-nsfwを通常マージするというのは自分では思いつかなかったので(なんとなく同じ人物同士というイメージがあるから)目から鱗です。
ということで、さっそく試してみました。
実験用のセリフ
台詞と、喘ぎ声の混在テストです。 ヘッドホンは付けましたか? 力強く話しますよ! 切ない感じですよ… …あっ…あん、ぁ、んっ、ぁっ、ぁっ、ぁっ、い、イクぅっ!!
見ての通り、最後に喘ぎ声入れてるので、再生する場合は音量注意です。
AnneliとAnneli-nsfwとwhisperをマージするテスト
せっかく(?)なので、JavaScriptによるリップシンクにしてみました。
■Anneli
■Anneli-nsfw
■Anneli-blend (声質0.4 声の高さ0.7 話し方0.7 話す速さ0)
■Anneli-blend-whisper1 (声質0.5 声の高さ0.8 話し方0.7 話す速さ0.5)
■Anneli-blend-whisper2 (声質0.7 声の高さ0.8 話し方0.7 話す速さ0.5)
Anneli-blend-whisper2、なかなか良いのではないでしょうか
たぶん、本来はAnneliで通常セリフをしゃべらせて、nsfwでベッドシーンというような使い方が想定されてそうなんですけど、だいぶ声質が違って聞こえるので場合によっては別人っぽいんですよねー。
なので、出来れば台詞と喘ぎ声を同じモデルでしゃべらせたいと思っていましたが、イイ感じに出来た気がします。
実験時のメモ
- Anneliではあえぎ声が出せない(当たり前
- Anneli-nsfwは普通のセリフが舌足らずになりがち
- AnneliとAnneli-nsfwの通常マージで、Anneli寄りにするとあえぎ声がイマイチ(当たり前
- 話し方を1.0にするとカタコトっぽくなる
- 声質0.2だと「イクゥ!」の最後が掠れる
- 声の高さをAnneli寄りにすると「イクゥっ⤴️」が「イクゥっ⤵️」になる
- 「イクゥっ⤴️」を保つには声の高さ0.7 話し方0.7くらい必要。声質・話す速さは0でOK。但し、若干通常台詞があやしい。
- 声の高さ0.7 話し方0.5で「イクゥっ→」くらい。このへんが妥協点か。
吐息は一工夫必要
「Style-Bert-VITS2に差分マージが追加されウィスパーボイスが作成可能に!」で感動と共にアップした「ふー…ふぅー…、はぁ…、はぁぁ」の吐息音声ですが、先ほど作ったAnneli-blend-whisper2だとこうなります。
めっちゃ短い。
そりゃそうなんですよね。Anneli-nsfwはすごくねっとりとした喋り方だけど、Anneliは話速が早い。ブレンドした結果、吐息も早くなってしまいました。
ただ、話速についてはStyle-Bert-VITS2 Editorのほうで調整できるため、2倍ゆっくりに出来ます。
うん、これなら十分使えそう。
これで、違和感のないひそひそ音声、押し殺したような喘ぎ声、はぁーはぁー吐息のいずれも自分が求めるモノになった気がします。いやはやマジで素晴らしいな。
おまけ:リップシンクJavaScript
たぶん欲しい人なんておらんと思うけど、先述のリップシンクを自分でもやってみたいと思う酔狂な方のためにJavaScript置いておきます。
20240620-lipsync.zip中にサンプル用のindex.html入れてありますが、ローカル起動ではCORSの問題でオーディオ再生できないため、サーバーにUPして使う必要があります。
使い方は単純でこんな感じ。
<script src="ziziura_lipsync.js"></script>
<div class="lipsync">
<canvas data-face="20240620_face.webp" data-mouth="20240620_mouth.webp" data-mouthx="492" data-mouthy="470" data-threshold="27000" data-visualizer></canvas>
<audio src="20240620_anneli.opus" controls></audio></p>
</div>
ziziura_lipsync.jsを読み込んでおけば、あとはcanvasの属性に指定されたファイル名の画像をロードして、audioタグで再生された音声に合わせて口画像の大きさを変更して描画する仕組みです。
パラメーター:
data-face= 顔の画像ファイル名
data-mouth= 口の画像ファイル名
data-mouthx= 口の初期座標X
data-mouthy= 口の初期座標Y
data-threshold= 開閉の感度 (10000~30000くらいでテキトーに)
data-visualizer= ビジュアライザーの表示(いらなければ消してOK)
ちょっと面倒なのは口の位置ですね。上のとおり、口の初期表示位置をX/Y座標で指定しないといけないのが面倒です。
SadTalkerみたいにAI使って口の位置を割り出せれば良いんだけどねー。
AI関連の知識はないので古臭い手法で実装しています。
片手間で作った100行もないコードなので著作権など主張しません。煮るなり焼くなり好きにしてください。
謝辞
オープンソースソフトウェアの開発者および各種素材の制作者の皆さまに感謝します。
使用ソフト (AI関連)
- Style-Bert-VITS2
AI合成音声
使用モデル:
Anneli
Anneli-nsfw
sbv2_null_models
- Stable Diffusion WebUI A1111
AI絵の生成
使用モデル:ioliPonyMix
使用ソフト (AI以外)
- GIMP
画像編集












