REMI:基于节奏建模的流行钢琴曲生成
项目介绍
REMI(REvamped MIDI-derived events) 是一种新颖的事件表示法,由黄宇翔和杨亦轩在ACM Multimedia 2020会议上提出,用于将MIDI乐谱转换成文本般的离散令牌。相比现有基于Transformer的音乐创作模型采用的MIDI类事件表示,REMI提供了音乐节奏模式建模所需的节拍上下文。通过使用REMI作为事件表示,研究者训练了一个Transformer-XL模型,能够生成具有表现力、连贯且节奏和谐清晰的一分钟长的流行钢琴音乐,无需任何后期处理来优化结果。此模型还支持局部tempo变化和和弦进展的控制。
项目快速启动
环境准备
首先,确保你的开发环境满足以下依赖:
- Python 3.6(建议使用Anaconda管理)
- TensorFlow-GPU 1.14.0 (
pip install tensorflow-gpu==1.14.0
) - miditoolkit (
pip install miditoolkit
)
下载预训练模型与数据
你可以下载两个预训练检查点用于生成样本:
- REMI-tempo-checkpoint (约428MB)
- REMI-tempo-chord-checkpoint (约429MB)
以及提供的MIDI文件数据集(包括本地tempo变化及估计的和弦)。
运行示例
安装完依赖并获取预训练模型后,通过以下代码进行快速启动:
from model import PopMusicTransformer
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
def main():
# 初始化模型
model = PopMusicTransformer(checkpoint='REMI-tempo-checkpoint', is_training=False)
# 从零开始生成音乐
model.generate(n_target_bar=16, temperature=1.2, topk=5,
output_path='./result/from_scratch.mid', prompt=None)
# 基于已有片段继续生成
model.generate(n_target_bar=16, temperature=1.2, topk=5,
output_path='./result/continuation.mid', prompt='./data/evaluation/000.mid')
# 关闭模型
model.close()
if __name__ == '__main__':
main()
应用案例与最佳实践
使用REMI框架,开发者可以探索不同风格和结构的音乐生成。一个最佳实践是结合音乐理论知识,调整温度和top-k参数以控制生成音乐的多样性和可控性。此外,通过自定义MIDI数据集进行微调,可以适应特定作曲风格或个人偏好。
典型生态项目
虽然该仓库专注于REMI模型本身,但其影响扩展到了音乐生成、人工智能作曲、以及音乐教育领域。开发人员可以利用REMI的原理和技术,构建如在线交互式音乐创作平台,或是集成到数字音频工作站(DAW)插件中,为艺术家提供创新工具。
请注意,由于技术进步,依赖项版本可能需适时更新。记得参考最新的仓库说明进行操作。