Skip to content

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)”生成音乐。

流程如下:

  1. 编写音乐描述(例如风格、节奏、乐器)
  2. 使用 processor 将文本转换为模型输入
  3. 使用 model.generate() 生成音频
  4. 转换为 numpy 格式
  5. 保存为 .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)

运行后即可在页面中点击播放 🎧