モバイル端末で動くボイスチェンジャーを作る方法の模索
RVCを使った方法
何
RVCでは、「Retrieval(検索)」の名前の通り、faissによるベクトル類似検索を利用しています。
学習時、VITSのモデルを学習データからHuBERTを用いて作られたEmbeddingでチューニングします。加えて、faissを用いてデータベースに学習データのEmbeddingを格納します。
推論時、話者音声から得られたEmbeddingをfaissを用いて学習時に作られたデータベースから検索し、学習データ中の特徴が似通ったEmbeddingを取得します。
取得されたEmbeddingと話者音声から得られたEmbeddingとを線形補完で混ぜ合わせることにより、より学習元に近いEmbeddingをVITSの入力とすることができるため、話者の特徴に寄らない安定した声質変換を実現しています。
結局Transformerだ。音声データをEncoderで学習してモデルを作り、モデルと音声をDecoderに突っ込んで変換した音声を出力する感じ。
手順
学習データの音源をwavで大量に用意する
音源をGoogle Driveに配置
Notebookでの作業
安装依赖(依存関係のインストール)
克隆仓库(リポジトリのクローン)
安装aria2(aria2のインストール)
下载底模(カウンターをダウンロード)
下载人声分离模型(音声分離モデルをダウンロード)
下载hubert_base(hubert_baseをダウンロード)
挂载谷歌云盘(GDriveをマウント)
WebUIで学習
というのが一例。
モバイルで動かすには
各人のモバイル端末に1GB近いサイズのモデルを配るのは難しそう(無理ではないが...)
Decoderで音声変換処理をするのも端末によっては重くて動くのか微妙。iOS/Androidごとのアーキテクチャに対応しないといけなそうだし。
そうなるとユーザーに音声をサーバーにアップロードしてもらい、サーバー上で変換を行い、生成結果のデータのURLを返す、みたいな感じが安定するイメージ
だるいポイントとしては
サーバーを維持管理しないといけない
金がかかる
そもそもV向けのリアルタイム変換やってる人しかいないっぽくて、ボイスチェンジャーサーバーを立ててAPI作ってるみたいな事例がweb上にない
リンク