短い参照音声 + 歌詞から楽曲を生成できる楽曲生成AIフレームワーク「SongBloom」を動かす

初めに

Sunoなど多くの楽曲生成サービスが出ていますが、ローカルで同じくらいの精度のものが出てきたということで触ってみます

ライセンスが学術目的のみ使用可能で商用利用は禁止されているため、注意が必要です。 対応言語は英語と中国のみです

開発環境

環境構築

まずは uvの環境を作っていきます

uv python pin 3.12

次に pyproject.tomlを作成します

[project]
name = "songbloom"
version = "0.1.0"
description = "Coherent Song Generation via Interleaved Autoregressive Sketching and Diffusion Refinement"
readme = "README.md"
requires-python = ">=3.10,<3.13"
dependencies = [
    "cn2an==0.5.22",
    "descript-audio-codec==1.0.0",
    "einops==0.8.0",
    "g2p-en==2.1.0",
    "huggingface-hub==0.24.6",
    "jieba-fast==0.53",
    "lightning==2.2.1",
    "nltk==3.8.1",
    "num2words==0.5.13",
    "numpy<2",
    "omegaconf==2.2.0",
    "pypinyin==0.51.0",
    "spacy==3.7.4",
    "torch==2.2.0",
    "torchaudio==2.2.0",
    "transformers==4.44.1",
    "vector-quantize-pytorch==1.14.8",
    "wordsegment==1.3.1",
]

[[tool.uv.index]]
url = "https://download.pytorch.org/whl/cpu"

依存関係をインストールします

uv sync

実行

推論は以下のようなコマンドで実行します

# 環境変数を設定
export PYTORCH_ENABLE_MPS_FALLBACK=1
export DISABLE_FLASH_ATTN=1

# 推論実行(float32必須、bfloat16は非対応)
source set_env.sh
uv run python infer.py --input-jsonl example/test.jsonl --device mps --dtype float32

実行する際にモデルを指定できますが、モデルは以下の通りです

Name Size Max Length Prompt type 🤗
songbloom_full_150s 2B 2m30s 10s wav link
songbloom_full_150s_dpo 2B 2m30s 10s wav link
songbloom_full_240s$^{[1]}$ 2B 4m 10s wav link
...