X-VCをWindowsネイティブ + uvで動かして英語音声変換を試してみる

初めに

今回は、ゼロショットの音声変換ライブラリ X-VC を Windows ネイティブ環境で動かして、英語音声のオフライン変換を試してみます。

github.com

開発環境

  • Windows 11
  • uv 0.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 として出力できました。

出力した音声にノイズが入っている状態だったのでなにか設定がおかしいのかモデルの精度なのかは調査中です