用途
AudioCraft 是 Meta 提供的音频生成工具库,用于从文本描述生成音乐和音效。它主要面向以下需求:根据文字描述生成音乐、创建音效与环境音、构建音乐生成应用、进行旋律条件化的音乐生成、输出立体声音频,以及通过风格迁移实现可控的音乐生成。
主要能力
AudioCraft 包含三个核心组件:
- MusicGen:文本到音乐的生成,支持旋律条件化。
- AudioGen:文本到音效的生成。
- EnCodec:高保真神经音频编解码器。
模型提供多种规模,从 Small(300M)到 Large(3.3B)。支持立体声音频生成,并提供 MusicGen-Style 用于基于参考音频的风格条件生成。
模型变体包括:musicgen-small(300M,快速生成)、musicgen-medium(1.5B,均衡)、musicgen-large(3.3B,最佳质量)、musicgen-melody(1.5B,文本+旋律)、musicgen-melody-large(3.3B,最佳旋律)、musicgen-stereo-*(立体声输出)、musicgen-style(1.5B,风格迁移)、audiogen-medium(1.5B,文本到音效)。
使用方式
安装方式:
# 从 PyPI 安装
pip install audiocraft
# 从 GitHub 安装最新版
pip install git+https://github.com/facebookresearch/audiocraft.git
# 或使用 HuggingFace Transformers
pip install transformers torch torchaudio
基础文本生成音乐(AudioCraft):
import torchaudio
from audiocraft.models import MusicGen
model = MusicGen.get_pretrained('facebook/musicgen-small')
model.set_generation_params(duration=8, top_k=250, temperature=1.0)
descriptions = ["happy upbeat electronic dance music with synths"]
wav = model.generate(descriptions)
torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)
使用 HuggingFace Transformers:
from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda")
inputs = processor(
text=["80s pop track with bassy drums and synth"],
padding=True,
return_tensors="pt"
).to("cuda")
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("output.wav", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())
文本生成音效(AudioGen):
from audiocraft.models import AudioGen
model = AudioGen.get_pretrained('facebook/audiogen-medium')
model.set_generation_params(duration=5)
descriptions = ["dog barking in a park with birds chirping"]
wav = model.generate(descriptions)
torchaudio.save("sound.wav", wav[0].cpu(), sample_rate=16000)
生成参数包括:duration(默认 8.0 秒,范围 1-120)、top_k(默认 250)、top_p(默认 0.0,0 表示禁用)、temperature(默认 1.0)、cfg_coef(默认 3.0)。
MusicGen 还支持旋律条件生成(generate_with_chroma)、立体声生成、音频续写,以及 MusicGen-Style 的风格条件生成(generate_with_style)和纯风格生成。EnCodec 可用于音频压缩,将音频编码为 tokens 再解码还原。
适用场景
- 根据文本描述生成音乐
- 创建音效和环境音频
- 构建音乐生成应用
- 旋律条件化的音乐生成
- 需要立体声音频输出
- 需要风格迁移的可控音乐生成
限制与替代方案
若需要更长的商业音乐生成,可考虑 Stable Audio;文本转语音并带音乐/音效可考虑 Bark;基于频谱图的音乐生成可考虑 Riffusion;带歌词的原始音频生成可考虑 OpenAI Jukebox。
性能方面,GPU 显存需求:musicgen-small 约 4GB(FP32)/ 2GB(FP16),musicgen-medium 约 8GB / 4GB,musicgen-large 约 16GB / 8GB。常见问题包括 CUDA 显存不足(可换小模型或缩短时长)、质量不佳(可提高 cfg_coef 或优化提示词)、生成过短(检查最大时长设置)、音频伪影(尝试不同 temperature)、立体声不工作(需使用立体声模型变体)。
参考资源
- GitHub:https://github.com/facebookresearch/audiocraft
- 论文(MusicGen):https://arxiv.org/abs/2306.05284
- 论文(AudioGen):https://arxiv.org/abs/2209.15352
- HuggingFace:https://huggingface.co/facebook/musicgen-small
- 演示:https://huggingface.co/spaces/facebook/MusicGen