弹钢琴弹到一半卡住了,不知道接下来该怎么继续?一款名为RollTab的iPhone应用,能让你弹奏的旋律自动延续下去——AI会在你停下后,用不到2秒的时间生成接下来的演奏。
这款应用由开发者西蒙·爱德华森(Simon Edwarson)打造,面向iPhone和iPad免费发布。它的核心是一个拥有1.25亿个参数的Transformer架构AI模型,由爱德华森独立训练完成。和常见的音频生成AI不同,RollTab处理的是MIDI文件,而不是录音波形。
MIDI:把音乐变成事件序列
MIDI和MP3这类音频格式有本质区别。音频文件保存的是"录下来的声音",而MIDI保存的是一连串"事件"——比如"某个音高、某个力度下按下琴键""松开琴键""踩下延音踏板""切换乐器"等等。爱德华森的项目聚焦钢琴演奏,因此在数据准备阶段,他主要保留钢琴类素材,其他内容则被删除或压缩。
要把MIDI喂给Transformer模型,第一步是把这些事件转换成模型能读懂的离散序列,也就是"token"。爱德华森尝试过几种方案:一种是把NOTE_ON、NOTE_OFF、TIME_SHIFT等事件逐个转成token;另一种是让每个音符自带"音高、音量、时长"属性。但两种方式都有问题——模型在演奏中管理不好音符,处理速度变慢,能输入的演奏长度也受限。
最终方案:一次只处理一个音符
爱德华森最终采用的表示方法是NOTE(pitch, delta_onset, duration, velocity)——即"音高、起始偏移、持续时长、力度"四元组。比如弹完C4之后,隔24个时间步再弹D4,就按这种方式记录。相比之前需要4次转换才能生成一个音符属性的做法,新方法每次只推进一个音符,大幅提升了效率。
实测效果相当可观:在iPhone上,这个大型模型每秒能处理约108个音符,远超人类现场演奏所需的速度。延音踏板也没有单独做成事件,而是被合并进"音符时长"属性里,让模型只需预测音高、起始、持续时间和力度四件事,从而在相对较小的模型规模下实现快速响应。
数据清洗比堆量更重要
训练数据主要来自公有领域的古典音乐,最终收集了数十万份MIDI文件,包含约3亿个音符事件。不过爱德华森特别强调,单纯增加数据量并不会自动提升效果——数据清洗和筛选比数量更关键。
在模型评估阶段,最初靠爱德华森自己听生成结果做人工比较。但这种方式既耗时,又因为输入只有短短几个音符、缺乏音乐上下文而难以判断优劣。后来他改用Gemini 3.5 Flash来对比两个生成结果,判断"哪个更像是输入演奏的合理延续",借此构建了一个相当大的偏好数据集。
DPO训练:让模型更可靠
基于这些偏好数据,爱德华森还做了Direct Preference Optimization(DPO)追加训练。DPO的思路是:从同一输入生成多个候选结果,选出被评价为"更好"的那个,然后调整模型参数,让它更倾向于生成这类结果。爱德华森表示,DPO是效果最显著的一步,把模型提升到了能稳定生成可信旋律的水平。
在他的博客上,可以听到用《宝可梦 红/绿》的"真新镇"BGM、《最终幻想VI》的"蒂娜主题"以及《致爱丽丝》等曲目作为输入、由AI续写的示例片段。
RollTab的使用方式很直接:把MIDI键盘连上手机,开始弹奏,屏幕上会实时记录演奏内容;停下后,AI随即生成后续旋律。对创作卡壳的钢琴爱好者来说,这相当于一个随身携带的"续写灵感机"。
热门跟贴