用途
AudioCraft 是 Meta 的 PyTorch 音频生成库,用于文本生成音乐和文本生成音频。当需要从文本描述生成音乐、创建音效与环境音频、构建音乐生成应用、进行旋律条件音乐生成、需要立体声输出,或需要带风格迁移的可控音乐生成时,可以使用它。
文档同时列出了替代方案:需要更长的商业音乐生成可用 Stable Audio;需要带音乐/音效的文本转语音可用 Bark;基于频谱图的音乐生成可用 Riffusion;带歌词的原始音频生成可用 OpenAI Jukebox。
主要能力
- 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,文本生成音效)。
使用方式
安装方式有三种:
# From PyPI
pip install audiocraft
# From GitHub (latest)
pip install git+https://github.com/facebookresearch/audiocraft.git
# Or use HuggingFace Transformers
pip install transformers torch torchaudio
基础文本生成音乐(AudioCraft):
import torchaudio
from audiocraft.models import MusicGen
# Load model
model = MusicGen.get_pretrained('facebook/musicgen-small')
# Set generation parameters
model.set_generation_params(
duration=8, # seconds
top_k=250,
temperature=1.0
)
# Generate from text
descriptions = ["happy upbeat electronic dance music with synths"]
wav = model.generate(descriptions)
# Save audio
torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)
使用 HuggingFace Transformers:
from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy
# Load model and processor
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda")
# Generate music
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
)
# Save
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
# Load AudioGen
model = AudioGen.get_pretrained('facebook/audiogen-medium')
model.set_generation_params(duration=5)
# Generate sound effects
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-stereo-medium)、音频续写(通过 Transformers 传入音频与文本),以及 MusicGen-Style 的风格条件生成(generate_with_style,可设置 cfg_coef_beta 控制风格影响、eval_q 与 excerpt_length 配置风格条件器,也支持仅风格无文本的生成)。AudioGen 支持批量生成多种音效。EnCodec 支持音频编码为 tokens 再解码重建。
文档还提供了三个常见工作流示例:音乐生成流水线(封装 MusicGenerator 类)、音效设计批处理(batch_generate_sounds 函数)、Gradio 演示界面。
适用场景
- 从文本描述生成音乐。
- 创建音效与环境音频。
- 构建音乐生成应用。
- 旋律条件音乐生成。
- 立体声音频输出。
- 带风格迁移的可控音乐生成。
限制与注意事项
性能优化方面:可使用更小模型、在生成之间清空缓存(torch.cuda.empty_cache())、生成更短时长、使用半精度(model.half());批量处理多个提示比逐个处理更高效。
GPU 显存需求:musicgen-small 约 4GB(FP32)/约 2GB(FP16);musicgen-medium 约 8GB/约 4GB;musicgen-large 约 16GB/约 8GB。
常见问题与解决:CUDA OOM 可改用更小模型或缩短时长;质量不佳可提高 cfg_coef 或优化提示词;生成过短需检查最大时长设置;音频伪影可尝试不同 temperature;立体声不生效需使用立体声模型变体。
文档还引用了进阶用法(训练、微调、部署)与故障排查资料,以及 GitHub、论文、HuggingFace 与 Demo 等资源链接。