❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦


🎧 “AI作曲新突破!SongGen一键生成高质量歌曲,支持声音克隆和双轨编辑”

大家好,我是蚝油菜花。你是否也遇到过——

  • 👉 音乐创作灵感枯竭,难以快速生成歌曲雏形
  • 👉 视频配乐找不到合适的背景音乐,版权问题让人头疼
  • 👉 想要个性化定制歌曲,却苦于没有专业工具…

今天揭秘的 SongGen ,用AI彻底颠覆音乐创作方式!这个由上海AI Lab、北京航空航天大学和香港中文大学联合推出的单阶段自回归Transformer模型,能够通过文本生成高质量歌曲,支持混合模式和双轨模式,显著提升生成歌曲的自然度和人声清晰度。无论是音乐创作、视频配乐,还是个性化定制,SongGen都能轻松应对——你的音乐创作之旅即将迎来革命性突破!

🚀 快速阅读

SongGen是一个基于自回归Transformer的歌曲生成模型,能够通过文本生成高质量歌曲。

  1. 核心功能:支持混合模式和双轨模式,提供细粒度控制和声音克隆功能。
  2. 技术原理:基于创新的音频标记化策略和训练方法,显著提升生成歌曲的自然度和人声清晰度。

SongGen 是什么

SongGen

SongGen是由上海AI Lab、北京航空航天大学和香港中文大学联合推出的单阶段自回归Transformer模型,能够通过文本生成高质量歌曲。SongGen基于歌词和描述性文本(如乐器、风格、情感等)作为输入,支持混合模式和双轨模式两种输出方式,分别用于直接生成人声与伴奏的混合音频,及分别合成人声和伴奏方便后期编辑。

SongGen基于创新的音频标记化策略和训练方法,显著提升生成歌曲的自然度和人声清晰度,解决传统多阶段方法中训练和推理流程繁琐的问题。SongGen的开源性和高质量数据集为未来音乐生成研究提供了新的基准。

SongGen 的主要功能

  • 细粒度控制:用户基于歌词、描述性文本(如乐器、风格、情感等)对生成的歌曲进行控制。
  • 声音克隆:支持基于三秒参考音频实现声音克隆,使生成的歌曲具有特定歌手的音色。
  • 两种生成模式:提供“混合模式”(直接生成人声和伴奏的混合音频)和“双轨模式”(分别合成人声和伴奏,便于后期编辑)。
  • 高质量音频输出:基于优化的音频标记化和训练策略,生成具有高自然度和清晰人声的歌曲。

SongGen 的技术原理

  • 自回归生成框架:基于自回归Transformer解码器,将歌词和描述性文本编码为条件输入,用交叉注意力机制引导音频标记的生成。
  • 音频标记化:用X-Codec将音频信号编码为离散的音频标记,基于代码本延迟模式处理多代码序列,支持高效生成。
  • 混合模式与双轨模式
    • 混合模式:直接生成混合音频标记,引入辅助人声音频标记预测目标(Mixed Pro),增强人声清晰度。
    • 双轨模式:基于平行或交错模式分别生成人声和伴奏标记,确保两者在帧级别上的对齐,提升生成质量。
  • 条件输入编码
    • 歌词编码:VoiceBPE分词器将歌词转换为音素级标记,基于小型Transformer编码器提取关键发音信息。
    • 声音编码:MERT模型提取参考音频的音色特征,支持声音克隆。
    • 文本描述编码:FLAN-T5模型将描述性文本编码为特征向量,提供音乐风格、情感等控制。
  • 训练策略
    • 多阶段训练:包括模态对齐、无参考声音支持和高质量微调,逐步提升模型性能。
    • 课程学习:逐步调整代码本损失权重,优化模型对音频细节的学习。
    • 数据预处理:开发自动化数据预处理管道,从多个数据源收集音频,分离人声和伴奏,生成高质量的歌词和描述性文本数据集。

如何运行 SongGen

1. 安装环境和依赖

git clone https://github.com/LiuZH-19/SongGen.git
cd SongGen
# 推荐使用conda创建新环境
conda create -n songgen python=3.9.18 
conda activate songgen
# 安装cuda >= 11.8
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch -c nvidia

如果仅使用SongGen的推理模式,可以通过以下命令安装:

pip install .

2. 下载xcodec和songgen的检查点

3. 运行推理

(1). 混合模式

import torch
import os
from songgen import (
    VoiceBpeTokenizer,
    SongGenMixedForConditionalGeneration,
    SongGenProcessor
)
import soundfile as sf

ckpt_path = "..." # 预训练模型的路径
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = SongGenMixedForConditionalGeneration.from_pretrained(
    ckpt_path,
    attn_implementation='sdpa').to(device)
processor = SongGenProcessor(ckpt_path, device)

# 定义输入文本和歌词
lyrics = "..." # 歌词文本
text="..." # 音乐描述文本
ref_voice_path = 'path/to/your/reference_audio.wav' # 参考音频路径,可选
separate= True # 是否从参考音频中分离人声

model_inputs = processor(text=text, lyrics=lyrics, ref_voice_path=ref_voice_path, separate=True) 
generation = model.generate(**model_inputs,
                do_sample=True,
            )
audio_arr = generation.cpu().numpy().squeeze()
sf.write("songgen_out.wav", audio_arr, model.config.sampling_rate)

(2). 双轨模式

import torch
import os
from songgen import (
    VoiceBpeTokenizer,
    SongGenDualTrackForConditionalGeneration,
    SongGenProcessor
)
import soundfile as sf

ckpt_path = "..." # 预训练模型的路径
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = SongGenDualTrackForConditionalGeneration.from_pretrained(
    ckpt_path,
    attn_implementation='sdpa').to(device)
processor = SongGenProcessor(ckpt_path, device)

# 定义输入文本和歌词
lyrics = "..." # 歌词文本
text="..." # 音乐描述文本
ref_voice_path = 'path/to/your/reference_audio.wav' # 参考音频路径,可选
separate= True # 是否从参考音频中分离人声

model_inputs = processor(text=text, lyrics=lyrics, ref_voice_path=ref_voice_path, separate=True) 
generation = model.generate(**model_inputs,
                do_sample=True,
            )

acc_array = generation[0].cpu().numpy()
vocal_array = generation[1].cpu().numpy()
min_len =min(vocal_array.shape[0], acc_array.shape[0])
acc_array = acc_array[:min_len]
vocal_array = vocal_array[:min_len]
audio_arr = vocal_array + acc_array
sf.write("songgen_out.wav", audio_arr, model.config.sampling_rate)

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐