初めに
今回は、ゼロショットの音声変換ライブラリ X-VC を Windows ネイティブ環境で動かして、英語音声のオフライン変換を試してみます。
開発環境
- Windows 11
uv0.9.x- Python 3.10
- NVIDIA GeForce RTX 4070 Ti
torch==2.5.1+cu124
重要なポイント
requirements.txtにはdeepspeedが入っていますが、今回は推論だけなので使いません- そのため、推論用の依存関係だけをまとめた
requirements.infer.txtを使います - speaker encoder と X-VC 本体のチェックポイントは別途取得が必要です
環境構築
まず Python 3.10 の仮想環境を作成します。
uv python install 3.10 uv venv .venv --python 3.10
次に CUDA 版 PyTorch を入れます。
uv pip install --python .venv\Scripts\python.exe ` torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 ` --index-url https://download.pytorch.org/whl/cu124
続けて推論用の依存関係を入れます。
uv pip install --python .venv\Scripts\python.exe -r requirements.infer.txt
以下で CLI が起動することを確認します。
.\.venv\Scripts\python.exe -m bins.infer_single --help
モデルの準備
まず保存先を作成します。
New-Item -ItemType Directory -Force ckpts, pretrained\speech_eres2net_sv_en_voxceleb_16k, examples\english | Out-Null
X-VC のチェックポイントを取得します。
.\.venv\Scripts\hf.exe download chenxie95/X-VC xvc.pt --local-dir ckpts --max-workers 4
speaker encoder と英語サンプル音声は以下で取得します。
$ProgressPreference = 'SilentlyContinue' Invoke-WebRequest -UseBasicParsing ` 'https://www.modelscope.cn/api/v1/models/iic/speech_eres2net_sv_en_voxceleb_16k/repo?Revision=master&FilePath=configuration.json' ` -OutFile 'pretrained\speech_eres2net_sv_en_voxceleb_16k\configuration.json' Invoke-WebRequest -UseBasicParsing ` 'https://www.modelscope.cn/api/v1/models/iic/speech_eres2net_sv_en_voxceleb_16k/repo?Revision=master&FilePath=pretrained_eres2net.ckpt' ` -OutFile 'pretrained\speech_eres2net_sv_en_voxceleb_16k\pretrained_eres2net.ckpt' Invoke-WebRequest -UseBasicParsing ` 'https://www.modelscope.cn/api/v1/models/iic/speech_eres2net_sv_en_voxceleb_16k/repo?Revision=master&FilePath=examples/speaker1_a_en_16k.wav' ` -OutFile 'examples\english\speaker1_a_en_16k.wav' Invoke-WebRequest -UseBasicParsing ` 'https://www.modelscope.cn/api/v1/models/iic/speech_eres2net_sv_en_voxceleb_16k/repo?Revision=master&FilePath=examples/speaker2_a_en_16k.wav' ` -OutFile 'examples\english\speaker2_a_en_16k.wav'
初回推論時には zai-org/glm-4-voice-tokenizer も Hugging Face から自動取得されます。
実行
今回は以下の英語音声を使いました。
- source:
examples\english\speaker2_a_en_16k.wav - reference:
examples\english\speaker1_a_en_16k.wav
.\.venv\Scripts\python.exe -m bins.infer_single ` --config configs/xvc.yaml ` --ckpt ckpts/xvc.pt ` --source_wav_path examples\english\speaker2_a_en_16k.wav ` --target_wav_path examples\english\speaker1_a_en_16k.wav ` --save_dir outputs\xvc_english ` --device 0
生成されるファイル:
outputs\xvc_english\speaker1_a_en_16k_speaker2_a_en_16k_offline.wav
実行結果
今回確認したファイルは以下です。
- source:
examples\english\speaker2_a_en_16k.wav - reference:
examples\english\speaker1_a_en_16k.wav - offline 出力:
outputs\xvc_english\speaker1_a_en_16k_speaker2_a_en_16k_offline.wav
16kHz の wav として出力できました。
出力した音声にノイズが入っている状態だったのでなにか設定がおかしいのかモデルの精度なのかは調査中です