HeartMuLa音乐生成基础模型
今天大多数AI音乐工具将有趣的部分隐藏在Web UI后面。你键入提示,等待,下载MP3,永远看不到任何东西如何工作。
HeartMuLa不同。
它是一个完全开放的音乐基础栈。你可以下载权重、检查架构,并在本地运行整个管道。更重要的是,论文、架构图和生产代码实际上是一致的。这很罕见。
在本文中,我们将直线移动:
- 使用HeartCodec进行音频令牌化
- 使用HeartMuLa进行音乐生成
- 两者如何在真实代码中出现
- 这个设计在哪里解锁实用工作流程
这有目的地反映了论文和仓库的结构。
1、HeartCodec:为什么音频令牌化首先出现
在我们谈论音乐生成之前,我们需要谈谈音频令牌。
原始波形是巨大的。44.1 kHz的3分钟立体声轨道包含数百万个样本。没有transformer能够以有用的方式直接建模。
HeartMuLa用HeartCodec解决这个问题,它是一个神经音频编解码器,将音频压缩成少量语义丰富的令牌。
1.1 语义丰富的编码器
在左侧,HeartCodec并行使用多个编码器:
- MuEncoder捕获音乐结构
- WavLM捕获音色和声学细节
- Whisper捕获语音和歌词对齐的语义
这是一个重要的设计选择。HeartCodec不仅仅是压缩声音。它正在压缩有意义的音乐表示。
每个编码器产生同一音频的不同视图。这些视图随后被融合。
1.2 超低帧率压缩
在中间,模型执行投影、拼接和基于查询的提取。
此步骤激进地降低时间分辨率。在这个阶段的目标不是完美的重构。目标是产生每秒非常少的令牌,这样长轨道是可行的。
这就是HeartMuLa能够生成多分钟歌曲而不是短剪辑的原因。
1.3 高保真重构
在右侧,解码器使用以下内容重构音频:
- Flow Matching以保持稳定性
- 结构化解码解码
结果是在生产级采样率下的高质量波形重构。
此时,音频变成语言模型可以推理的离散令牌序列。
2、HeartMuLa:音乐令牌的语言模型
一旦音频令牌化,音乐生成就变成序列建模问题。
这就是HeartMuLa进入的地方。
2.1 底部输入
HeartMuLa消耗三个流:
- 来自描述和歌词的文本令牌
- 来自参考音乐的音频嵌入
- 来自HeartCodec在训练期间的音频令牌
这些在进入模型之前被组合成共享表示。
这不是装饰性的。它给模型关于歌曲结构的强先验。
2.2 全局骨干
HeartMuLa全局骨干负责长程规划。
这是模型学习的地方:
- 主歌和副歌重复
- 整体歌曲进展
- 高级音乐一致性
你可以将其视为知道歌曲是什么的部分。
2.3 局部解码器
HeartMuLa局部解码器处理细粒度细节:
- 节奏
- 清晰度
- 短程时机
全局规划和局部实现之间的这种分离是系统中最重要的架构决策之一。
2.4 解码
最后,生成的音乐令牌通过HeartCodec解码器传回以产生音频。
文本变成令牌。令牌变成音乐。
3、从图到代码:在本地运行HeartMuLa
架构图很好,但只有代码尊重它们时才重要。
HeartMuLa确实如此。
下面是一个反映论文的最小示例。
3.1 安装依赖项
python -m venv heartmula-env
source heartmula-env/bin/activate
pip install torch torchaudio
pip install transformers accelerate huggingface_hub soundfile numpy
如果你使用GPU,请确保你的PyTorch安装与你的CUDA版本匹配。
3.2 歌词和风格到音乐生成
import torch
import soundfile as sf
from transformers import AutoTokenizer, AutoModelForCausalLM
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained("heartmula/heartmula-oss-3b")
model = AutoModelForCausalLM.from_pretrained(
"heartmula/heartmula-oss-3b",
torch_dtype=torch.float16,
device_map="auto"
)
lyrics = """
[Verse]
In the quiet of the city night
Neon dreams are burning bright
[Chorus]
Hold on to the echo of our song
We were right here all along
"""
style = "emotional pop ballad, 90 bpm, English, female vocal, acoustic"
prompt = f"LYRICS:\n{lyrics}\nSTYLE:\n{style}"
inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
with torch.no_grad():
audio_tokens = model.generate(
**inputs,
max_new_tokens=80000,
do_sample=True,
top_p=0.95,
temperature=1.0
)
在这个阶段,模型输出音频令牌,而不是波形。
3.3 使用HeartCodec解码音频令牌
from heartcodec import HeartCodec
codec = HeartCodec.from_pretrained("heartmula/heartcodec").to(DEVICE)
waveform = codec.decode(audio_tokens[0].unsqueeze(0))
waveform = waveform.cpu().numpy()[0]
sf.write("generated_song.wav", waveform, samplerate=44100)
这完全反映了论文:
- 在令牌空间中的自回归生成
- 只在最后解码
这就是为什么长轨道在消费GPU上可能的原因。
4、为什么这个设计实际上有效
三个决策使HeartMuLa实用。
- 音频令牌而不是波形
这按数量级减少序列长度。
- 提示中的显式结构
歌词被视为小领域特定语言。这显着改善了形式。
- 全局和局部建模的分离
歌曲级结构和微时机在不同层次学习。
这一切都不是偶然的。你可以在论文和代码中看到它。
5、你可以用这个栈构建什么
因为HeartMuLa是一个基础模型,而不仅仅是一个生成器,你可以构建:
- 歌词条件音乐工具
- 多语言歌曲创作系统
- 使用HeartCLAP的音乐搜索引擎
- 使用HeartTranscriptor的歌词转录管道
- ComfyUI中的完整视听管道
重要的转变是控制。你不再局限于SaaS UI。
6、结束语
HeartMuLa有趣不是因为它生成音乐。
它有趣的是因为它展示了当架构、论文和代码对齐时,开放、端到端的音乐基础模型是什么样的。
如果你对生成音频认真,这是目前可用的最清晰的参考系统之一。
原文链接: HeartMuLa: From Architecture Diagrams to Real Music Generation Code
汇智网翻译整理,转载请标明出处