4.1 MusicGen-medium 生成音乐 - Colab
Introduction:
MusicGen 是由 Meta 推出的文本生成音乐模型,能够根据自然语言描述(prompt)直接生成高质量的音频片段,在音乐创作、内容生成和多媒体应用中具有很高的实用价值。
本教程基于 Google Colab 环境,演示如何使用 facebook/musicgen-medium 模型,从零开始完成:
- 环境依赖安装
- 模型加载
- 文本到音乐的生成流程
- 音频保存与播放
通过本实践,你可以快速掌握使用 MusicGen 进行 AI 音乐生成的基本方法,并能够根据不同的文本描述生成多样化风格的音乐内容。
点击直接运行 Colab:MusicGen-medium 生成音乐-Colab.ipynb
如果你没有 Colab 环境,可以阅读下文详细单元格及讲解,或参考后续章节,通过本地或 ModelScope 部署模型进行推理。
📦 安装依赖库
这个步骤用于安装运行 MusicGen 所需的核心库,包括:
librosa:音频处理encodec:音频编码器(Meta 提供)transformers:加载 MusicGen 模型accelerate:加速推理soundfile:音频读写gradio:后续可用于做 Web UI(可选)
使用 -q 参数可以减少安装日志输出,让界面更清爽。
!pip install -q librosa encodec transformers accelerate soundfile gradio
⚙️ 检查运行环境(GPU)
这个步骤用于确认当前运行环境是否启用了 GPU。
MusicGen 模型较大,如果使用 CPU 生成会非常慢,因此推荐使用 GPU(Colab 的 T4)。
如果显示 GPU 不可用,请在:
Runtime → Change runtime type → Hardware accelerator → GPU
进行设置。
import torch
if torch.cuda.is_available():
print("GPU is available!")
print("GPU name:", torch.cuda.get_device_name(0))
else:
print("GPU is NOT available. Please ensure your Colab runtime type is set to GPU.")
🤖 加载 MusicGen 模型
这里我们加载:
AutoProcessor:用于处理文本输入MusicgenForConditionalGeneration:MusicGen 音乐生成模型
使用的是:facebook/musicgen-medium
说明:
- medium 是中等大小模型(效果与速度平衡)
- 模型会自动加载到 GPU(如果可用)
import torch
from transformers import AutoProcessor, MusicgenForConditionalGeneration
import soundfile as sf
import gradio as gr
import numpy as np
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")
# 加载处理器和模型
processor = AutoProcessor.from_pretrained("facebook/musicgen-medium")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-medium").to(device)
🎼 根据文本生成音乐
在这个步骤中,我们通过“文本提示词(prompt)”生成音乐。
流程如下:
- 编写音乐描述(例如风格、节奏、乐器)
- 使用 processor 将文本转换为模型输入
- 使用 model.generate() 生成音频
- 转换为 numpy 格式
- 保存为
.wav文件
关键参数:
- max_new_tokens:控制生成时长(越大 → 音乐越长)
示例 prompt:
Light jazz-inspired piano, optimistic and airy...
你可以修改 prompt 来生成不同风格的音乐 🎵
import torch
import soundfile as sf
# 输入文本描述
prompt = ["bright piano piece | hopeful uplifting mood | light staccato touches | clean articulation"]
# 编码输入
inputs = processor(
text=prompt,
padding=True,
return_tensors="pt"
).to(device)
# 生成音频
with torch.no_grad():
audio_values = model.generate(
**inputs,
max_new_tokens=512 # 控制长度(越大越长)
)
# 转 numpy
audio = audio_values[0].cpu().numpy()
# 保存为 wav
sf.write("musicgen_medium_output.wav", audio.T, samplerate=32000)
print("生成完成!")
🔊 播放生成的音乐
使用 IPython.display.Audio 在 Notebook 中直接播放生成的音频。
参数说明:
- audio:生成的音频数据
- rate=32000:采样率(需与生成时一致)
from IPython.display import Audio
Audio(audio, rate=32000)
运行后即可在页面中点击播放 🎧