DDSP-SVCを使った音声変換をMacで試してみた

はじめに

音声の特徴を別人のものに変えることができる、DDSP-SVCMacで試した時の記録です。 今回はDDSP-SVCのコードと学習済みモデルを使って音声変換を試しました。

2024-02-24 : Ver5.0に合わせて更新を行いました。

環境について

動作環境は以下になります。

準備

pythonがインストールされていることが前提になります。

実行コードの準備

適当なディレクトリへ、以下のgitリポジトリからコードをクローンします。

github.com

ターミナルで任意のディレクトリに移動し、

git clone https://github.com/yxlllc/DDSP-SVC.git

を実行します。

または、DownloadZipでコードを直接ダウンロードし展開します。

CUDA以外で音声変換の処理を実行するためにencoder/rmvpe/inference.pyの以下のコードを変更します。

        def __init__(self, model_path, hop_length=160):
        self.resample_kernel = {}
        model = E2E0(4, 1, (2, 2))
-      ckpt = torch.load(model_path)
+      ckpt = torch.load(model_path, map_location=torch.device('cpu'))
        model.load_state_dict(ckpt['model'], strict=False)
        model.eval()
        self.model = model
        self.mel_extractor = MelSpectrogram(N_MELS, SAMPLE_RATE, WINDOW_LENGTH, hop_length, None, MEL_FMIN, MEL_FMAX)
        self.resample_kernel = {}

必要な訓練済みモデルのダウンロード

DDSP-SVCリポジトリから訓練済みモデルをダウンロードします。

github.com

遷移先の以下の項目のContentVec、HuberSoft、NSF-HiFiGan、RMVPEをクリックしてダウンロードします。

2. Configuring the pretrained model

Feature Encoder (choose only one):
(1) Download the pre-trained ContentVec encoder and put it under  pretrain/contentvec folder.

(2) Download the pre-trained HubertSoft encoder and put it under pretrain/hubert folder, and then modify the configuration file at the same time.

Vocoder or enhancer:
Download the pre-trained NSF-HiFiGAN vocoder and unzip it into pretrain/ folder.

Or use the https://github.com/openvpi/SingingVocoders project to fine-tune the vocoder for higher sound quality.

Pitch extractor:
Download the pre-trained RMVPE extractor and unzip it into pretrain/ folder.

「pretrain」に以下の構成になるように配置します。

モデルの準備

DDSP-SVCのモデルを準備します。 Google Colaboratroryで訓練する方法は以下になります。

y-kitaro.hatenablog.com

学習済みのモデルと設定ファイルを同じディレクトリに配置する必要があります。 例として以下のようにモデルを配置していきます。

./exp
        ┗/model_name
                ┣モデル.pt
                ┗config.yml

環境の準備

実行のためのライブラリを準備します。

ターミナルでDDSP-SVCディレクトリに移動して、仮装環境を構築します。

python -m venv venv

作成した仮装環境へ切り替えます。

. ./venv/bin/activate

必要なライブラリのインストールを行います。

pip install -r requirements.txt

以上で準備は完了です。

音声変換

以下のコマンドで音声変換を行います。

ver4.0、Ver5.0の場合

python main.py -i "変換する音声" -o "変換した音声の出力先" -diff "./exp/model_name/モデル.pt"

音声への処理とモデルによる変換が行われます。 初めて変換する音声の場合、音声への処理が長くなります。 二回目以降の変換では音声の要素への分解処理は、キャッシュを利用して省略されるため処理時間が短くなります。

キーを変更する場合は以下のように指定します。

python main.py -i "変換する音声" -o "変換した音声" -diff "./exp/model_name/モデル.pt" -k キーの値

ver2.0の場合(旧バージョン)

python main.py -i "変換する音声" -o "変換した音声の出力先" -m "./exp/model_name/モデル.pt"

キーを変更する場合は以下のように指定します。

python main.py -i "変換する音声" -o "変換した音声" -m "./exp/model_name/モデル.pt" -k キーの値

終わりに

モデル学習時のデータセット精度によりますが、RVCでは掠れた声になっていた箇所がしっかりと変換できていると感じました。 初回の音声の場合、多少時間がかかりますが、Macでも生成は十分に可能なことがわかりました。

最後に、関連するリポジトリをメンテナンスしている皆様に感謝いたします。