初めに
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.tomlのrequires-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.pyをsetup.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