NaturalSpeech 3の中核コンポーネント「FACodec(Factorized Audio Codec)」を使って参照ボイスからVoice Conversion を行う

初めに

FACodec(Factorized Audio Codec)は、NaturalSpeech 3の中核コンポーネントです。

オーディオ仕様は以下になっています

  • : 16kHz、ホップサイズ200サンプル

また以下の制限があります。

  • 音声は最大5秒に制限(長い音声はテンソルサイズ不一致エラーの原因)
  • FACodecは16kHzを期待(librosaが自動変換)

開発環境

環境構築

リポジトリのクローンします

git clone https://github.com/lifeiteng/naturalspeech3_facodec.git
cd naturalspeech3_facodec

uvプロジェクトの初期化します

uv init --no-readme

Pythonバージョンの設定

pyproject.tomlrequires-python>=3.11に変更し、Python 3.11を使用するように設定します。

uv python pin 3.11

次に依存関係のインストールしていきます。

# PyTorch(torch 2.1.2が推奨)
uv add torch==2.1.2 torchaudio==2.1.2

# その他の依存関係
uv add pyworld soundfile "librosa==0.10.1" einops huggingface_hub

# NumPyとsetuptoolsの互換性対応
uv add "numpy<2" setuptools

ns3_codecパッケージのインストールしていきます。

setup.pysetup.py.bakにリネームし、pyproject.tomlでパッケージを管理します。uv add -e .だとうまくいかなったので、uv pipを仕方なく使います。

mv setup.py setup.py.bak
uv pip install -e .

pyproject.tomlの設定します

[project]
name = "ns3-codec"
version = "0.2.2"
description = "FACodec: Speech Codec with Attribute Factorization for NaturalSpeech 3"
requires-python = ">=3.11"
dependencies = [
    "einops>=0.8.1",
    "huggingface-hub>=1.2.3",
    "librosa==0.10.1",
    "numpy<2",
    "pyworld>=0.3.5",
    "setuptools>=80.9.0",
    "soundfile>=0.13.1",
    "torch==2.1.2",
    "torchaudio==2.1.2",
]

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[tool.setuptools.packages.find]
where = ["."]
include = ["ns3_codec*"]

実行

サンプルのテストは以下のように実行できます

uv run python test.py