ITAコーパスを読み上げてStyle-Bert-VITS2の音声モデルを作ってみる
YouTubeのコメント欄で、自分の声から音声モデルを作っている方から質問があり、ちょっと興味がわいたのでぼくもやってみることにしました。
ちなみに質問内容はスタイル分けの話だったのですが、つくよみちゃん様の音声モデルも、カノン様の音声モデルも、公開されているコーパスを元に学習させて頂いただけで、感情別のスタイル分けなどはしたことがないので有益なアドバイスは出来ませんでした。お力になれずすまない。
音声学習の前提知識
まず大前提として、自分の声をStyle-Bert-VITS2(に限らずCOEIROINKやMMVCも同じ)で学習するためには適度な長さ(2~12秒)の音声ファイルがたくさん必要です。
マイクに向かって適当にしゃべって10個くらい音声ファイルを用意するだけでも一応学習できますが、実際試したところノイズもひどいし、機械音声特有の震えたようなヴィブラートが強くて使い物になりませんでした。
というわけで、有志の偉い方々が作成してくださっている音素バランス文、ITAコーパスを使って学習元の音声ファイルを作ることにします。
■ITAコーパスから一部引用
このような短文が100個ほど集まっているのがITAコーパスです。
ほかにも声優統計コーパスとか色々あるのですが、ライセンス的にやや曖昧な部分があったり、クレジット表示の義務があったりして使いづらい部分もあるため、「パブリックドメイン」なコーパスを公開することを目的として、2021年にSSS合同会社(東北プロジェクトの会社)がクラウドファンディングを立ち上げ、明治大学/九州工業大学と共同で開発されたのがITAコーパスとのことです。
ちなみに、東北イタコの名前から取ってイタコーパスと命名されたらしい。
さて、このITAコーパスを読み上げて録音するにあたって、まず作業時間について考えなければなりません。
1文あたりの読み上げに平均6秒として100文で600秒。わーい、たった10分じゃん…などと考える頭お花畑な人はいらっしゃらないと思います。録音した後に自分の声を確認しない人なんていないだろうから、奇跡的にまったくミスらなかったとしても倍の20分はかかります。
1文が「えっ嘘でしょ」などと短い文章もありますが、「泳者のシンディー・ニコラスは、へとへとになって泳ぎ切った後、ドーバーでかろうじて陸に上がってきたが、海峡水泳協会のスポークスマンは、彼女がとても元気であると発表した」というカミカミ不可避な文章もあります。
アバウトに自宅の時計で確認した限り、ぼくはこの収録作業で60分ほどかかりました。これでもスムーズだったほうだと思います。
これ仮に、1文読むたびに録音ボタンクリック→しゃべる→停止ボタン→再生して聞いてみる→OKだったら停止ボタン押したときのクリック音は避けてトリミングしてファイル名を付けて保存…こんな作業を繰り返していたら、2時間かけても終わっていたかどうか…。
しかしありがたいことに、便利なフリーソフトがあるのです。
どちらも同じ制作者、nwp8861(耳ロボP)様の作品ですが、OREMOという音声収録ソフトとWavTarというWAVファイルの結合/分解ソフトのおかげで収録の効率が爆上がりです。
音声モデルを作成するおおまかな流れ
事前準備
- OREMO用にShiftJIS形式のITAコーパスをDL
- OREMOをDL
- WavTarをDL
※ノイズ低減等の加工をしない場合は不要 - AudacityをDL
※ノイズ低減等の加工をしない場合は不要
手順
- OREMOでITAコーパスを順番に表示しながらバンバン収録
(Rキーを押しながら録音→スペースキーで確認→下矢印で次の文章) - WavTarで100個のWAVファイルを1つのWAVファイルに結合
- 結合したWAVファイルをAudacityで読み込み、ノイズ低減
- ノイズ低減した1個のWAVファイルをWavTarで100個のWAVファイルに分解
- Style-Bert-VITS2での学習用に esd.list を作成
- Style-Bert-VITS2で[自動前処理を実行]
- Style-Bert-VITS2で[学習を開始する]
※RTX4070使用で100文の学習に約50分かかりました
OREMOの設定
[オプション]→[フォントサイズの設定]で収録音のフォントサイズを16、収録音リストのフォントサイズを10くらいにする。
これ設定しないとクソ長い文章のときに文字が切れて読めません。ほかのテキストエディタや、PDFで見ながら録音する場合は設定しなくても良いです。
[オプション]→[オーディオI/O設定]でPortAudioの[録音する]にチェックを付け、入力デバイスが使用するマイクになっていることを確認し、[適用]と[OK]ボタンを押下。
不思議なことにここの設定は保存されません。OREMOを閉じるとこの設定を忘れられてしまうので、起動するたびにこの設定をする必要があります。
まぁPortAudioのチェック付けるだけだし、このソフトのおかげで軽減される多大な時間を考えたらどうってことありません。
最後に、[ファイル]→[音名リストの読み込み]でShiftJIS形式のITAコーパスを読み込ませれば準備完了です。
公式のITAコーパスはUTF-8しかないため、Haruqa様がOREMO用に変換したShiftJIS用のファイルを使います。くれぐれもUTF-8のほうを読み込まないように。文字化けします。(ぼくはやっちゃいました)
OREMOでの録音手順
左の文字が見切れていますが、音名リストが正常に読み込まれていれば、ここに100文並んでいるハズです。
最初の「えっ嘘でしょ。」を選択した状態で、「R」キーを押すと録音が開始され、キーを離すと録音が終了。
「スペースキー」で今録音した音声の確認ができ、問題なければ「↓」矢印キーで次の録音に進みます。
この次の録音に進んだときだけ、OREMOの下にあるresultフォルダにWAVファイルが保存されるという仕組みです。
ボイスチャット経験者であれば、プッシュトゥトーク(Push to talk)と言えばわかりやすいでしょうか?
Rキーを押している間だけ録音されるわけですが、「あ、いま読み間違えたな」と気が付いたらすぐにRキーを離し、またRキーを押せば再録音されるんです。
下矢印キーで次の録音に進むまでは保留されているし、なんなら次に進んだ後、やっぱやりなおそう、と上に戻っても同じ操作で再録音できます。
文字だけじゃいまいち通じないかも知れないし、1文1文をWindows標準のボイスレコーダーやAudacityで録音したことがない人にはピンとこないかも知れませんが、この操作性はとんでもなく作業効率があがります。ガチで2倍は早い。
なので、OREMOのDLやら設定やらで多少時間がかかったところでそんなもの誤差です。誤差。
OREMOを使うだけで100文の読み上げ録音作業が1時間は短縮できるので、ぜひ使いましょう。
WAVファイルをアレコレする
ノイズ低減の手順については詳しくないので、概要だけで勘弁してください。
おおまかな手順のところで書いたとおり、基本は以下の流れです。
- WavTarで100個のWAVファイルを1つのWAVファイルに結合
- 結合したWAVファイルをAudacityで読み込み、ノイズ低減
- ノイズ低減した1個のWAVファイルをWavTarで100個のWAVファイルに分解
ノイズ低減ではOSSであるAudacityが使われることが多いと思いますし、実際ぼくもAudacityを使いました。
しかし、100個ものファイルを1つずつノイズ低減とかやってられません。
なので、WavTarというフリーソフトで1つのながーいWAVファイルに結合して、まとめてノイズ低減しちゃおう、という話です。
AudacityでWAVファイルを開き、ノイズのみの区間をざっくりと選択してから、[エフェクト]→[ノイズ除去と修復]→[ノイズを低減]を選び、[ノイズプロファイルを取得]。
その後、再度、全体を選択してから[ノイズを低減]を実行すればノイズ低減される…ハズ…です。
短い音声なら何度もこの作業をしたことはあるのですが、100文繋げた状態でどの程度効果があるのかは…いまいち不明です。
もっと良いノイズ除去方法があるかも知れません。もし知っていたらぼくのほうが教えて頂きたいです。
Style-Bert-VITS2用にモデル名ディレクトリとesd.listを作る
Style-Bert-VITS2で学習を開始する際、Dataフォルダの下に新規に作るモデル名のフォルダを作成します。
今回は zizi というモデルを作るので、
C:/Style-Bert-VITS2/Data/zizi
というフォルダを作ります。
そして、このフォルダの直下に、esd.listという、文章と音声の対応表にあたるファイルを置きます。
SBV2には文字起こし機能もあるので、つい使いたくなりますが、ITAコーパスの場合、「ラーテャン」とかワケわからん文章もあり、まず間違いなく文字起こしに失敗するので自分で作ったほうが良いです。
というかITAコーパスの文章があるのだからコピペしてちょっと整形するだけ。
例)
見てのとおり、ファイル名|モデル名|言語|文章という並びになっているだけです。
OREMOで録音すると「文章.wav」になってしまうので、そのままだとesd.listに書くのが面倒ですが、ファイル名をいい感じにするバッチファイルも配布されているので、ありがたく使うと良いでしょう。
esd.listが出来たら、更にrawフォルダを作成し、そこに学習元となる100個のWAVファイルを置きましょう。
例)C:/Style-Bert-VITS2/Data/zizi/raw
Style-Bert-VITS2での学習はモデル名書いて2クリックだけ
SBV2のディレクトリにあるApp.batを起動すると、下記のようなUIが起動します。
[学習]タブを開き、モデル名に zizi (さっき作ったディレクトリ名)を入れ、[自動前処理を実行する]ボタンをポチっと押します。
たぶん数分も待てば「Success: 全ての前処理が完了しました。ターミナルを確認しておかしいところがないか確認するのをおすすめします。」と表示されるハズ。
自動前処理が終わったら、[学習を開始する]ボタンをクリックするだけ。
CPUやGPUがどのくらい影響するのかよくわかりませんが、第12世代IntelとRTX4070のうちのPCでITAコーパス100文の学習に約50分かかります。
尚、先述したとおり、ここで2秒未満の音声ファイルがあるとエラーが発生します。
なんでかはわかりません。自動前処理の説明を読むと[読めないファイルは使わず続行]と書かれているので無視されるかと思ったのですが、pythonでエラーが発生します。
アレかな、データセット作成のスライス処理で2秒未満のファイルは弾いているハズだからエラー処理がちゃんと書かれてないとかなのかな。
ともあれ、収録時に各文章が2秒以上になってさえいれば問題ないはず。
完成例
■合成音声
「おっっさんの声で申し訳ないのですが、こちらが今回作成した合成音声です」
「声質は、わりと近くなったかなと思いますが、全体的にリバーブがかかっている感じがします」
※「おっっさん」は誤字ではなく、「っ」を2つ入れないと正しい発音になりませんでした
■生声録音
「おっさんの声で申し訳ないのですが、こちらが地声です」
「えー、リバーブとかはかかっていない…と思いますが、いかがでしょうか」
なんか、ぼわんぼわんする合成音声になってしまったのですが、これもしかしたら、nVidia Broadcastのせいかも知れません。
RTX Voiceと言ったほうが馴染み深い人もいるかもですが、AIを使って背景ノイズを除去しながらマイク録音できるアプリなんです。
インストールすると「マイク(nVidia Broadcast)」という仮想マイクが追加され、この仮想マイク経由で録音すると余計なノイズがカットされるんですね。
例えば空調の音、扇風機の音、キーボードを叩いている音、外を走るトラックの音…などなど、マイク録音時に拾ってほしくない音が巷にはあふれています。
そのせいで深夜遅くに小声で宅録している人や、お高い吸音材を買っている人も多いかと。
しかし、このnVidia Broadcastを使えば、それらのノイズをがっつりカットしてくれるんですよ。
なので最近テストを兼ねてよく使っているのですが、遅延を減らすためなのか、何なのか、たまに声が壊れるんですよねー。
学習はまだしも、ITAコーパスの収録のやりなおしはガチで面倒臭すぎるので今回は諦めましたが、これから収録する人はこういう余計なソフトいれないほうが良いかも知れません。
以上、当初思ったより長い記事になってしまいましたが、どこかの誰かの参考になれば幸いです。











