日本語化されていたRVC+VC Clientでリアルタイム音声変換への道

リアルタイム音声変換がにわかに話題となっているので試してみたところ、日本語化されていてUIとかがかわっていたので、試しながら手順をまとめました。私も他の人が作ってくれた記事が非常に参考になったので、これもまた誰かの参考になればと思っています。

特にRadeonで動かなかった辺りが・・・。

# はじめに
## 前提
項目                                    |   　前提            | 補足
----------------------------------------|--------------------|-------------
Windows11                               |                    | 10でも同じだと思います
グラフィックボード                        | NVIDIA             | Radeonでは動きません
Retrieval-based-Voice-Conversion-WebUI  | ver20230416updated |
w-okada/voice-changer                   | ver1.5.2.3a        |

## おおまかな流れ
1. 音声データの準備
1. 学習データの作成
1. リアルタイムボイチェン
1. おまけ（DiscordやZoomで使いたい）

# 1. 音声データの準備
手元に音声データがない場合、研究者向けに音声データを公開してくれている[マルチモーダルデータベース配布](https://zunko.jp/multimodal_dev/login.php)があるので、そこからデータをダウンロードしておきます。
ずんだもんの場合、zundamon_voice_data/emotion/normalに利用できる音声データがあります。
（VOICEVOXを利用して他の音声データの準備方法を別途記載予定）

# 2. 学習データの作成
[Retrieval-based-Voice-Conversion-WebUI](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)の使って学習データを作成します。
## 2.1 ダウンロード
[Retrieval-based-Voice-Conversion-WebUI](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)の[READEME](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/README.ja.md)に色々書いてくれているので読みたくなりますが、

[https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/RVC-beta.7z](https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/RVC-beta.7z)

からRVC-beta.7zをダウンロードすればうまくいくようになってます（とREADMEにも書かれています）。タイミングによっては、バージョンが更新されてベータでなくなっているかもしれませんが・・・。

## 2.2 解凍
空白、日本語が含まれていないことに注意して、解凍してください。この後、エラーになる可能性が高いです。不安な場合は、Cドライブ直下とかに解凍すると安全だと思います。うまくいったら移動しましょう。

## 2.3 使い方
1. go-web.bat をダブルクリックします。コマンドプロンプトが起動して処理が走り始めます。
2. 以下画面がブラウザで起動してくるのを待ちます。
    ![2023-04-25_23h18_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/ba8a61bd-b38b-b2f4-44e8-17ecbe4c5ef3.png)
    1. トレーニング後に出力されるファイル名（例：mi-test）
    2. トレーニング用の音源データがあるフォルダを設定（例：C:\voice-changer\zundamon\emotion\normal）
    3. ビデオカードを設定する箇所なのだが、値が入っていればよい（例：0　カード情報 0 NVIDIA GeForce RTX 2600）
    4. 総トレーニング回数（例：10、回数が多いとトレーニングに時間がかかるので最初は10がおすすめ）
    5. ワンクリックトレーニングを押す
3. 1で起動したコマンドプロンプトに諸々処理が流れ、Epoch: {2-4で設定した数} を終えて、exit code 2333333が表示されるのを待ちます。
    ![2023-04-25_23h28_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/a5f4b589-6414-ba3c-0d53-161272204e57.png)
4. RVC-beta/wightsフォルダに {2-1で設定した名前}.pth が出ていることを確認します。

## 2.4 エラー
ValueError: need at least one array to concatenate が出てしまう
![FuRw1CEagAE4RIk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/4ddfd274-5564-fb74-c2e8-898b61c851ed.png)

### 原因
WebUIを開いたときに、2-3でこのような設定になっていなかったでしょうか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/bbdee38e-fff6-8e93-e3f3-fea5884d55b7.png)
`很遗憾您这没有能用的显卡来支持您训练` = トレーニングをサポートするグラフィックス カードが動作していないのは残念です（Google翻訳）、ということで、Radeonだとこうなってしまいます。NVIDIAのカードを買うか、対応してくれるの待つのみです。

# 3. リアルタイムボイチェン（VC Client）
VC Clientこと[w-okada/voice-changer](https://github.com/w-okada/voice-changer)を使用して、いよいよリアルタイムボイチェンです。

## 3.1 ダウンロード
1. [w-okada/voice-changer](https://github.com/w-okada/voice-changer)から事前ビルド済みのBinaryをダウンロードします。
    ![2023-04-26_00h05_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/ca70f7da-e6a2-c010-67a8-96a6204e1195.png)
1. RVC(Retrieval-based-Voice-Conversion)の動作には hubert のモデルが必要になります。この[リポジトリ](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main)からhubert_base.ptをダウンロードします。

## 3.2 解凍
1. 空白、日本語が含ま（略）。
2. 解凍したフォルダ\MMVServerSIOの下にstart_http.batがあると思うので、MMVSeverSIOの下（start_http.batと同じ位置）にhubert_base.ptを格納します。

## 3.3 使い方
1. start_http.batをダブルクリックします。
2. RVC-WebUIで学習データをアップロードします。
    ![2023-04-26_20h29_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/4220bf72-ca8f-d365-80c5-fb1e5d833edf.png)
    1. selectボタンを押して学習させたデータを選択します（例：RVC-beta\weights\mi-test.pth）
    2. uploadボタンを押してアップロードします。アップロード中すぐ横に進捗が%で表示されます。
    3. アップロードが完了するとアップロードしたファイルが表示されます。
3. DeviceSettingのAudioInput=入力となるマイクと、AudioOutput=出力となるスピーカーを設定します。
    ![2023-04-26_20h34_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/ebd7f0f5-65f7-c521-9d8b-1ba23c40f297.png)
4. Startボタンを押すとボイチェンが開始されます。
    ![2023-04-26_20h36_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/6b826fe6-8fcd-db11-ce67-907d5fffe144.png)

## 3.4 その他
### エラー
VC PROCESSING!!!! EXCEPTION!!! 'RVC' object has no attribute 'hubert_model'が出てしまう場合、hubert_base.ptがないためです。3.aのダウンロード手順を参考にしてダウンロードし、3.b.2を参考にしてファイルを配置してください。その後start_http.batからやり直せばうまくいきます。

### 声のトーンがあっていない
私がずんだもんで試したときは、以下を一通りやりました。
1. Speacker Settingの設定。Tuningを14, predic f0にcheckを入れた。これも結構影響の大きいパラメータだと思います。
1. マイクを良いものにする。ノートPCのものから、USBのマイクに変えただけですが、雑音が減ってずんだもんっぽいかどうか判断しやすくなったと思いました。
1. Epocの回数を上げる。20でもよかったかなと思いましたが、30回程度で試したらだいぶそれっぽくなりました。

# 4. おまけ
## DiscordやZoomで使いたい
* [RVC+VC Clientでリアルタイム音声変換してDiscordに参加する話(SoXを使った素材集めの話も)](https://overwhelmingrowth.com/entry/2023/04/09/232415)
の記事の `VB-Audio Virtual Cableの導入` を参考にされると簡単に導入できると思います

## 参考
特に1の記事にお世話になりました。ありがとうございました。
1. [「RVC」+「VC Client」で自分の声を任意の声にリアルタイム変換しよう！](https://eyatu-vrc.hatenablog.com/entry/2023/04/06/193512)
2. [RVC+VC Clientでリアルタイム音声変換してDiscordに参加する話(SoXを使った素材集めの話も)](https://overwhelmingrowth.com/entry/2023/04/09/232415)
3. [【悪用厳禁】自分の声を推しの声にリアルタイム変換する方法(全体公開)](https://maplesyrup.fanbox.cc/posts/5751203)