用途
AudioCraft 是 Meta 的 PyTorch 音频生成库,用于文本生成音乐(MusicGen)和文本生成音效(AudioGen),并提供 EnCodec 神经音频编解码器。当需要从文字描述生成音乐、创建音效与环境音频、构建音乐生成应用、进行旋律条件生成、输出立体声或需要可控风格迁移时,可使用本库。若需要更长的商业音乐生成可考虑 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,文本转音效)。
生成参数包括 duration(默认 8.0 秒,范围 1-120)、top_k(默认 250)、top_p(默认 0.0,0 表示禁用)、temperature(默认 1.0)和 cfg_coef(默认 3.0,无分类器引导)。
使用方式
安装方式:
# 从 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)
EnCodec 音频压缩:
from audiocraft.models import CompressionModel
import torch
import torchaudio
model = CompressionModel.get_pretrained('facebook/encodec_32khz')
wav, sr = torchaudio.load("audio.wav")
if sr != 32000:
resampler = torchaudio.transforms.Resample(sr, 32000)
wav = resampler(wav)
with torch.no_grad():
encoded = model.encode(wav.unsqueeze(0))
codes = encoded[0]
with torch.no_grad():
decoded = model.decode(codes)
torchaudio.save("reconstructed.wav", decoded[0].cpu(), sample_rate=32000)
适用场景
- 音乐生成流水线:封装 MusicGenerator 类,支持单条与批量提示生成。
- 音效设计批处理:根据规格列表批量生成爆炸、脚步、开门等音效。
- Gradio 演示:搭建交互式音乐生成界面。
- 音频压缩与重建:使用 EnCodec 编码为 token 再解码回波形。
限制
- GPU 显存需求:musicgen-small 约 4GB(FP32)/2GB(FP16),medium 约 8GB/4GB,large 约 16GB/8GB。
- 常见问题包括 CUDA OOM(需更小模型或更短时长)、质量不佳(提高 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