社内バ美肉しよう (2) ボイチェン編; 主に RVC と VC Client の使い方

この投稿は [ちゅらデータアドベントカレンダー2023](https://qiita.com/advent-calendar/2023/churadata) の16日目の記事です。

---

みなさん、バ美肉（バーチャル美少女受肉）してますか？

かわいいは正義です。社内で Web 会議などするときもぜひアバターで出席して、この正義を世に広めていきましょう。

ちゅらデータの社内では、CTO が演じるロアちゃんを筆頭として、アバターを使って交流することが流行っています。バ美肉には数多くの先端技術が関わっているので、最新の技術に触れる良い機会にもなります。

今年のアドベントカレンダーでは3日に分けて、アバターを作って使うまでの色々をアバター・ボイチェン（音声変換）・配信についてご紹介しています。

https://qiita.com/k-akiyama/items/640199b19e4bea581a3d

https://qiita.com/k-akiyama/items/167438ec555c27f91a83

今回はその第2弾、ボイチェン編です。

---

# ボイチェン編

見た目だけかわいくなるのもいいですが、同時に声もかわいくなると、同僚の脳をバグらせることができておすすめです。

## さまざまなアルゴリズム

リアルタイムボイスチェンジャーには主に音声信号処理によるものと機械学習によるものがあると思います。たぶん。

**音声信号処理ベース**とここで呼んでいるものは、声のピッチやフォルマントを機械的に変換するもののことです。低遅延にできることが多く、リアルタイムで変換した声をヘッドフォンでモニタリングしながら話しても違和感が少ないです。しかし、変換前の声質に大きく依存するため、必ずしも自分の思い通りの声質になれるわけではありません。肉声のボイストレーニングがあわせて必要だとも言われています。

例えば下記ページでは、そうした比較的低遅延なリアルタイムボイスチェンジャーが複数紹介されています。

https://www.moguravr.com/voice-changer-selection/

ちゅらデータでは、ハードウェアのボイストランスフォーマー Roland VT-4 を使っている人が2人ほどいます。これも低遅延らしいです。

https://www.roland.com/jp/products/vt-4/

もう一方の**機械学習ベース**とここで呼んでいるものは、ターゲット話者の声質を再現するように訓練された生成AIのことです。バリエーション豊かな声質を再現できます。高負荷・高遅延であることが多く、変換した声をヘッドフォンでモニタリングすると時間差で聞こえてくるため、それを聞きながら話すのには慣れが必要です。また、会話の中で相手の声に被ってしまうなど、コミュニケーションに不便を感じる場合があります。

機械学習ベースのリアルタイムボイスチェンジャーで使用できるアルゴリズムも近年急速に発展しています。自分でモデルを作ることができるオープンソースのアルゴリズムだと、 [VITS](https://github.com/jaywalnut310/vits) を応用して開発されたアルゴリズムとして [MMVC](https://github.com/isletennos/MMVC_Trainer)、[so-vits-svc](https://github.com/svc-develop-team/so-vits-svc)、[RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)、拡散モデルの応用で開発されたアルゴリズムとして [DDSP-SVC](https://github.com/yxlllc/DDSP-SVC)、そして知識蒸留による変換の高速化を図った [LLVC](https://github.com/KoeAI/LLVC) といったものがあります。

## RVC

RVC (Retrieval-based Voice Conversion) は少量（10分程度）の訓練データからでもターゲット音声への高品質な音声変換を実現できるとして、倫理的な議論を巻き起こしながらも人気を博し、大勢のユーザによって様々なモデルが公開されてきました。

### RVC モデル

モデルを訓練するためのプログラムは、本家である [RVC-Project/Retrieval-based-Voice-Conversion-WebUI](https://github.com/liujing04/Retrieval-based-Voice-Conversion-WebUI) のほか、そこから派生した [ddPn08/rvc-webui](https://github.com/ddPn08/rvc-webui) や [w-okada/rvc-trainer-docker](https://github.com/w-okada/rvc-trainer-docker) が利用できます。これらは NVIDIA GPU を搭載したローカルマシンにサーバを立てて、ブラウザから GUI にアクセスして使用するようになっています。その他にも、使ったことはありませんが、自前の GPU を用意しなくても Google Colab から訓練できる [Easy RVC](https://colab.research.google.com/drive/1r4IRL0UA7JEoZ0ZK8PKfMyTIBHKpyhcw) や [RVC v2 Disconnected](https://colab.research.google.com/drive/1XIPCP9ken63S7M6b5ui1b36Cs17sP-NS) という選択肢もあります。

具体的なモデルの訓練方法はそれだけで長大な記事になるので、他の解説記事を参照してください。

RVC のモデルは主に .pth ファイルと .index ファイルの2つのファイルから構成されます。数十メガバイトの .pth ファイルが、変換モデル本体の学習済みパラメータです。様々な大きさで提供される .index ファイルは、学習データからサンプリングされた特徴量データのインデックスです。.index ファイルがなくてもある程度近い声に変換できますが、使用すると目標の声により近づけやすくなります。

### VC Client

RVC モデルに対応したリアルタイムボイスチェンジャーとしては [w-okada/voice-changer (VC Client)](https://github.com/w-okada/voice-changer/) がよく利用されています。Linux 向けのソースコードに加えて、Windows 向けや Mac 向けのビルド済みバイナリが配布されているほか、遅延は大きくなりますが [Google Colab 上で動作するノートブック](https://github.com/w-okada/voice-changer/blob/master/Realtime_Voice_Changer_on_Colab.ipynb) も提供されているなど、環境構築なしに気軽に実行することができます。モデルを探してこなくても、アプリケーション上から複数のサンプルモデルをダウンロードすることができるようになっています。

### VC Client を使う上でのヒント

[チュートリアル](https://github.com/w-okada/voice-changer/blob/master/tutorials/tutorial_rvc_ja_latest.md) で使い方が詳しく説明されていますが、それに加えて、VC Client で RVC モデルを使う上でのヒントをいくつか記しておきます。

#### インデックスの検索に GPU を使おう

ソースコードやそれを元にビルドされたバイナリでは、インデックスを検索するためのライブラリとして GPU 非対応の faiss が使われています。これによって、インデックスを使用する際 CPU に多大な検索負荷がかかるようになっています。faiss の代わりに faiss-gpu を使用するようにすれば、インデックスの検索に GPU が活用されるようになるため、CPU 負荷が大幅に軽減されます。このトリックは[ノートブック版で使用されています](https://github.com/w-okada/voice-changer/blob/master/Realtime_Voice_Changer_on_Colab.ipynb?short_path=144b9e9#L73)。

具体的には以下のいずれかのような方法になると思います。

- ソースコードをダウンロードして WSL などの Linux 上で環境構築し、`pip install faiss-gpu` してから実行する
- Docker イメージを作成する際に faiss-gpu をインストールする

#### コンソールの出力を見よう

VC Client を起動すると立ち上がるコンソールの黒い画面には、内部でエラーが発生した場合のエラーメッセージも出力されます。モデルが読み込めないときや設定変更がうまく反映されないときなどは、コンソールを確認しながら操作するようにしましょう。

#### RVC の multiple speaker モデル対応は不完全

RVC では、複数の話者の音声をひとつのモデルファイルとして訓練することができます。そのような multiple speaker モデルを VC Client で使用している場合、Voice という設定項目でターゲット話者を瞬時に切り替えることができます。しかし、VC Client ではひとつの .pth モデルファイルに対して複数話者の .index ファイルを指定することに対応していないため、Voice のドロップダウンでターゲット話者を切り替えてもインデックスは切り替えられないことに注意する必要があります。

## マイクについて

マイクはノート PC やイヤホンに付いているからそれをそのまま使っている……という方も多いと思いますが、クリアな声を届けるにはマイクもこだわりたいポイントになります。ボイチェンに通す場合も例外ではありません。音声を録る上で障害となる次の2つの問題をどう克服するか考えなければなりません。

- **環境ノイズ**。閑静な住宅で一人暮らしをしていても、耳をすませば色々な音が聞こえてきます。冷蔵庫、エアコン、PC のファン、キーボードのタイプ音、マウスのクリック音もマイクに拾われる可能性があります。

- **部屋の反響音**。音を吸収するものが少ないフローリングの洋室は、案外声が響きます。反対に、ベッドや布団がある寝室や、絨毯敷きの部屋では声が響きにくいです。試しに色々な環境で自分の声を録音して聞いてみると、反響のある部屋では「声の輪郭」がぼやけてしまうことがわかります。反響音の有無は、ボイスチェンジャーによる変換後の音声に露骨に影響します。

これらの問題を簡単に解決してくれるのが**ダイナミックマイク**です。一般的なマイクはコンデンサマイクなので、感度が高く小さな音も拾ってしまいがちですが、感度が低く口に近づけて使うダイナミックマイクなら、周囲のノイズや反響音が拾われにくくなります。ただし、PC のマイク端子に挿して使うことはできず、何らかのオーディオインタフェース機器を介して接続することになります。

マイクについては明るくないので、USB で PC に直結できて手軽に使える定番ダイナミックマイク **Shure MV7** を用意しました。小さめの環境ノイズはほとんど消え、部屋の反響音の問題も解決しました。

https://www.shure.com/ja-JP/products/microphones/mv7

ただ、RVC への入力に使うだけならここまでしっかりしたマイクでなくても、ノイズや反響が少なくくっきりした声が撮れるマイクなら何でもいいかもしれません。

---

これで姿だけでなく声もかわいくなれたでしょうか？

次回の配信編では、アバターや RVC を使ってビデオ会議をする際のノウハウをお届けします。

https://qiita.com/k-akiyama/items/167438ec555c27f91a83