当扩散模型变成乐器:Daydream团队打造实时音乐“演奏引擎”的全记录

这项由Daydream团队完成的研究以预印本形式于2026年5月27日发布在arXiv平台,编号为arXiv:2605.28657,感兴趣的读者可通过该编号查阅完整论文。

音乐创作工具的发展史,本质上是一部"等待时间不断缩短"的历史。从管风琴到电子合成器,演奏者手指按下琴键到耳朵听到声音之间的延迟,已经被压缩到了几乎感知不到的程度。然而,当AI音乐生成技术横空出世时,这个延迟却一夜之间倒退回了几秒乃至几十秒——你输入一段文字描述,然后等待,然后听。这与"演奏"二字相去甚远。

Daydream团队的研究人员显然对此感到不满。他们的问题是:能不能让AI音乐生成模型变得像真正的乐器一样——你动,它就响;你调,它就变?这篇论文给出的答案,就是他们构建的系统DEMON,全称"Diffusion Engine for Musical Orchestrated Noise",直译过来是"音乐编排噪声的扩散引擎"。

为了理解DEMON究竟做了什么,先要明白一种叫做"扩散模型"的AI技术是怎么工作的。简单来说,扩散模型的工作原理有点像雕塑:从一块满是随机纹理的石料(噪声)出发,一刀一刀地去除多余部分,最终雕刻出你想要的形状(音乐)。每"刻一刀"叫做一个去噪步骤,完整地刻完通常需要好几刀。问题在于,等你刻完最后一刀,时间已经过去了相当长一段,根本谈不上实时互动。

DEMON的核心思路,是把这个雕刻过程变成一条"流水线"。不是雕完一件作品再开始下一件,而是同时开工好几件,让它们处于不同的完工阶段——有的刚开始粗凿,有的已经在精修,有的马上就要完工。每隔一小段时间,就有一件完成品从流水线末端出来。这个技术来自一个叫StreamDiffusion的图像生成框架,DEMON团队把它移植并大幅改造,用于音乐生成。

这套流水线究竟有多快?在一块消费级显卡RTX 5090上,DEMON每秒最多能完成12.3次完整的60秒音乐生成,或者在常用的4深度模式下完成11.3次。换句话说,每隔不到100毫秒,系统就能吐出一首全新版本的60秒音乐。这个速度,已经快到让参数调节变成了真正意义上的"实时控制"。

一、为什么这件事比听起来要难得多

流水线的高速运转带来了一个新矛盾,而这个矛盾正是这篇论文最核心的问题所在。

流水线里同时有好几件"作品"在加工,每一件都是在某个时刻以某个特定设置"入队"的。如果你突然想调整某个参数——比如让音乐更有创造性还是更贴近原曲——你的指令并不能立刻影响正在加工中的那些作品,因为它们已经按照旧设置开工了。你的新指令只能被贴在下一个"新入队的作品"上,然后等它走完整条流水线才能听到效果。

这就好比你在一家流水线餐厅点了一道新菜,但厨房里已经有好几道菜在不同阶段进行中了,你的新要求只能从下一批食材开始执行。等你吃到新菜,可能已经过去了相当长时间。在DEMON的默认设置下(8步去噪、8深度流水线),这个等待时间大约是649毫秒;调整为4深度时,降到了约471毫秒。

471毫秒,对于弹钢琴来说太慢了,但对于慢慢调节一个风格旋钮来说其实还能接受。更麻烦的问题是:在原始的StreamDiffusion设计里,如果你调整一个叫"去噪强度"的关键参数,系统会直接把整条流水线清空重来。那8个正在加工中的作品?全部作废,重新排队。这意味着在清空后的若干百毫秒里,系统什么都输出不了——就是静音。对于一个现场演奏的音乐家来说,这种突然的静默无异于灾难。

DEMON的第一个核心创新,就是解决这个"清空重来"的问题。

二、让流水线的每个工位都有自己的"工单"

传统StreamDiffusion流水线只有一张全局"工单",所有工位共用同一份参数设置。一旦参数变了,这张工单作废,所有工位停工,重新发新工单。

DEMON的做法是:给流水线上的每个工位都配发一张独立的工单,工单在这个作品"入队"时就已经打印好了,记录着它这一整个加工旅程要用的参数。当你调整去噪强度旋钮时,新的工单只影响下一个新入队的作品,而已经在加工中的那几件,继续按照它们自己的工单做完,不受干扰。

这样一来,即使你一直在拨动去噪强度旋钮,流水线也从不停工。系统持续不断地输出音乐,只是后续输出会逐渐反映你的新设置。实验数据非常直接:在连续60次参数调整的压力测试中,DEMON的完成率是100%(60次全部输出),而传统清空重来设计的完成率只有1.7%(60次里只输出了1次)。另外98.3%的时间,传统系统都在沉默。

这个机制还带来了一个额外的好处:因为不同工位可以同时运行不同的参数设置,同一批次的前向计算里,不同"作品"实际上处于不同的去噪强度。这在技术上叫"异质时间步调度",听起来很复杂,实际上就是流水线上的每件作品按自己的工单独立运作,所有作品的计算被打包在一起以节省算力。

值得一提的是,在DEMON之前已经有一个相关实现(同一团队更早期的StreamDiffusion分支),那个版本允许在不清空缓冲区的情况下直接编辑全局时间步列表。但那仍然是"一张工单管所有",强度一变,所有在制品同时切换,产生的是轨迹不连贯的"混搭品"。DEMON的每工位独立工单才是真正让每件完成品都是一条连贯轨迹的关键。

三、比流水线更快的控制方式:共享的"实时便签"

上面说的"每工位独立工单"解决了流水线不中断的问题,但参数改变到听到效果的等待时间(约470毫秒),本身并没有被缩短。DEMON的第二个机制,专门对付这个延迟。

想一想:流水线上每件作品在加工的每一步,都需要查询某些参数。如果某个参数不是写死在入队时的工单上,而是每步都去查一个"公共公告板"上的当前值,那会怎样?——任何时候你修改公告板上的内容,所有正在加工的作品在下一步就会读到新值,立刻生效。

这就是DEMON的"共享可变逐步状态"机制。对于那些每步都需要读取的参数,系统把它们放在公共公告板上,而不是锁在每件作品的工单里。你修改公告板,效果在下一个计算周期(即一个"tick",约81毫秒)就能显现,无需等待整条流水线走完。

当然,不是所有参数都适合放在公告板上。如果把"这首歌是什么风格"这种定义整件作品的参数放上去,中途改变会让正在加工的作品变成一个四不像——前半段按旧设置做的,后半段突然按新设置做,结果就是一件轨迹混乱的"混搭品"。所以公告板适合的是那些每步施加的"动态效果",而不是定义整体走向的结构性参数。

论文把所有参数按照这个逻辑分成了四类,可以理解为四种"指令到达速度"。第一类是"随单参数",比如提示词、源音频、音色参考,这些在作品入队时就锁定了,要等整条流水线走完才能看到效果(约470-649毫秒)。第二类是"迁移调度",相当于把公告板上的工单骨架替换掉,所有工位立刻用新骨架,1个tick就能看到变化,但因为此前的加工状态和新骨架不匹配,会产生短暂的"混搭"过渡音效,要等若干个tick才能完全收敛到新状态。第三类是"共享可变参数",放在公告板上、每步都读,1个tick生效,并且因为每件在制品都在各自剩余步数上逐渐消化新值,效果是渐进收敛的,不会产生混搭。第四类是"模型权重",通过运行时LoRA(一种动态加载风格参数包的技术)直接修改底层模型的所有计算,1个tick生效,立刻收敛,没有任何过渡期。

这四类的区别,就像餐厅里四种不同速度的"换菜"方式:换整个菜单(随单参数)要等当前这批菜做完;更换厨师手册骨架(迁移调度)立刻影响所有厨师但接下来几道菜味道会有点奇怪;在黑板上更新今日调料配比(共享可变参数)让所有人下一步就用新配比,口味渐渐转变;直接换厨师(模型权重)则是所有菜立刻变成新风格。

四、每一帧都不一样:在60秒音乐内部塑造渐变

上面三个机制解决的都是"时间轴上如何快速响应控制变化"的问题。DEMON的第三个核心创新方向,解决的是另一个维度:在一首60秒音乐的内部,让不同的时间段有不同的处理效果。

这件事听起来理所当然,但实现起来并不简单。传统的"去噪强度"参数是全局的——它决定整首曲子被改造多少,但无法让前30秒保留更多原曲风格、后30秒自由发挥。DEMON通过一种叫"SDE逐帧源混合"的机制实现了这一点。

每次去噪步骤中,系统计算两个"候选方向":一个是完全按照AI模型的预测走(自由发挥),另一个是把结果向原始音频的方向拉(保留原曲)。然后,系统按照一条预设的"混合曲线",对音乐的每一帧(25帧每秒)分别决定这两个方向各占多少比例。比如你可以设置一条从0渐变到1的曲线,让音乐开头紧贴原曲,结尾完全由AI自由创作。

研究团队用6种风格的音源(电子、氛围、爵士、Lo-Fi、金属、前卫摇滚)进行了测试,每种风格11个随机种子,共66个样本。结果非常稳定:当使用"从0到1的渐变曲线"时,每个样本的前15秒都比后15秒更接近原始音源,且这种梯度方向在所有66个样本中无一例外。梯度幅度因风格而异——电子风格的变化相对平缓(-0.043),Lo-Fi风格变化最大(-0.399),但方向始终一致。

这种逐帧控制和传统的去噪强度截然不同,实验数据也证实了这一点:两者产生的音频在波形层面有0.5到6.1分贝的差异,说明它们不是同一种效果的不同表达,而是从根本上不同的两个控制维度。

与SDE混合机制配套的另一个工具,是"x0目标变形"。这个机制允许你预先准备一个"目标音乐版本",然后通过一条渐变曲线,让正在生成的音乐在每一帧逐渐向那个目标靠拢。效果就是:音乐开头听起来像版本A,结尾听起来像版本B,中间有一段流畅的过渡。测试中,3组"源到目标"配对、每组3个随机种子,共9个样本,全部呈现出向目标单调递增的相似度,平均梯度为+0.217。

此外,DEMON暴露给用户的逐帧控制曲线还包括:逐帧CFG引导强度(控制AI对文字描述的遵从程度,比如开头紧贴描述、结尾自然衰退)、速度比例(控制每帧向最终状态靠近的速度)、ODE噪声曲线(在确定性路径上注入可控的逐帧随机性)、APG动量系数和CFG缩放曲线(更精细的引导调节工具)。这些曲线都通过共享可变状态机制实现,修改后1个tick即可生效。

五、解决VAE解码瓶颈:只看你正在听的那一段

流水线的主力消耗在DiT解码器(每次前向计算约80毫秒),但还有另一个不小的开销:VAE解码。

ACE-Step模型工作在一个"压缩的潜在空间"里,每秒25帧、每帧64维。生成的是这个压缩表示,最后需要通过一个叫VAE的解码器把它还原成真正的音频波形。对于60秒的音乐,完整解码一次需要约56毫秒,几乎和DiT前向计算一样贵。

DEMON的解决方案是:你在听的时候,每次只需要解码你正在播放的那一小段,而不是整首60秒。这就是"窗口化VAE解码"。

但这里有个技术难题:VAE内部使用的是膨胀1D卷积,这种运算会"看"前后一定范围内的帧来决定当前帧的输出。如果直接切一段出来,切口处因为缺少上下文会出现音频瑕疵。研究团队通过实验找到了这个"视野范围"的边界:333毫秒(约8.3帧)之外,窗口内部的解码结果就和完整解码完全一致(在16位PCM精度下逐采样点完全相同)。

基于这个发现,窗口化解码的做法是:取你想要播放的时间窗口,向前后各多取0.5秒作为"边缘缓冲",完整解码这段扩展后的区域,然后把两端的缓冲扔掉,只保留中间干净的部分。扩展的0.5秒远超333毫秒的视野边界,所以内部结果和完整解码逐字节相同。

效果如何?对于一个3秒的播放窗口,解码时间从56毫秒降到了7毫秒,提速8倍。对于15秒窗口,降到20毫秒,提速2.8倍。更重要的是:无论音乐多长(60秒还是240秒),VAE解码的耗时只取决于播放窗口大小,而与总长度无关。这意味着生成更长的音乐,只有DiT解码器的时间会增加,VAE这块始终保持不变。

六、让TensorRT加速实际工作:混合精度的必要性

把AI模型跑快,通常要用到TensorRT这样的推理加速框架。但把模型全部压缩成fp16(半精度浮点数)并不总是有效的——DEMON团队发现了一个严重问题。

ACE-Step的DiT解码器有24层,每层用来控制整个生成过程走向的"门控"(AdaLN,自适应层归一化)对数值精度极为敏感。如果这些门控用fp16计算,每层误差约为0.92倍,经过24层连续累积:0.92的24次方约等于0.14,也就是说最终输出的速度向量被缩小了约7倍。而且在某些时间步(t<0.5)还会出现数值崩溃(NaN)。

解决办法是混合精度策略:注意力层和MLP层用fp16(占绝大部分计算量,精度要求相对宽松),而AdaLN门控、时间步嵌入和RMSNorm层保留fp32(精度敏感但计算量小)。同时在构建TRT引擎时强制指定STRONGLY_TYPED标志,防止自动优化器把fp32层偷偷换回fp16。这个策略在维持高速度的同时保证了数值稳定性。

另一个加速手段是运行时LoRA热替换。LoRA是一种轻量风格参数包,通常切换风格需要重新构建整个TRT引擎(耗时数分钟)。DEMON通过启用REFIT构建标志,配合TRT的IRefitter API,可以在不重建引擎的情况下直接修改模型权重。整个替换过程约1.2秒(一次性成本),替换后的推理延迟和不带LoRA相比几乎没有变化(在B=8时约增加8%)。多个LoRA可以按各自的强度叠加使用。

七、系统有多快、有多稳:实验数据说话

在RTX 5090上,B=8、深度=8的配置下,每个tick(一次批量前向计算)耗时81.1毫秒,每秒能完成12.3次完整的60秒音乐生成。加上15秒窗口的VAE解码,端到端每次输出约102毫秒。深度4时,tick耗时42.8毫秒,每秒完成11.3次,首次参数变化效果约471毫秒后可听到。

论文还在RTX 4090和RTX 3090上进行了验证。4090每秒8.9次生成(超过实时速度),3090每秒4.2次(低于实时但功能完整)。4090和3090的显存占用约12GB,在24GB显卡上留有充裕余量,研究者认为16GB显卡也应该能运行。

窗口化VAE的加速比在三块GPU上分别是2.80、3.10和3.22倍(15秒窗口对比完整60秒解码),差异很小,说明这是VAE本身的特性而非特定硬件效果。参数变化传播的模式同样跨GPU一致:随单参数在所有GPU上都精确在tick 8出现效果,共享可变参数在tick 1就出现,逐步收敛,两者的latent空间RMS数值在三块GPU间差异不超过0.02。

在流媒体质量方面,深度=8的流水线输出与传统批量模式在16位PCM精度下逐采样点完全相同(信噪比无穷大),即流水线架构本身不带来任何音质损失。

对于SDE源混合的文字描述匹配度(CLAP对齐度)测试,使用渐变曲线时整首曲子的平均CLAP分数(0.489-0.519)处于平曲线(0.425-0.480)的范围内,符合预期——开头保留原曲的帧拉低了整体的"文字描述匹配度",但这正是源保留的意图。FAD(频谱分布距离)检测显示SDE曲线模式(0.829)高于基线(0.649),同样符合预期:锚定原曲会让输出分布偏向输入录音而非模型学到的通用分布。

八、这套系统的边界在哪里

DEMON的研究者们对自己系统的局限非常坦诚。

从控制的本质来说,DEMON控制的是去噪的动态过程,而不是音乐内容本身。你可以通过逐帧曲线控制某个时间段"被改造多少",但你无法通过这些旋钮精确放置一个音符、规定一个和弦或保证一个小节的下拍在特定时刻出现。这些仍然由基础模型ACE-Step 1.5的学习分布决定。

DiT模型使用全局时间注意力,这意味着模型在计算某一帧的输出时会"看"所有帧,所以逐帧控制的效果会被模型的全局注意力平滑掉。SDE曲线在段落2之后的饱和现象(ramp 1→0曲线没有线性上升而是在第2段后趋于平稳)就是这个效应的直接体现。你调的是每帧的参数,但模型给你的是跨帧平滑后的结果。

系统生成的是固定长度的音乐(60秒或240秒),而不是无限流。ACE-Step 1.5会自然地在潜在空间边界处开头和结尾,这更适合"重新演绎一首完整的歌"或"制作循环片段",而不是像Lyria那样无限延续下去。要做到无限流,需要微调或架构改变。

源条件是静态的,在开始时编码一次,无法接受实时输入的音频流。内存方面,激活LoRA时VRAM增加约40%,且DiT的工作集内存随歌曲长度线性增长(这也是为什么240秒配置下tick时间从81毫秒增至381毫秒)。

研究者还特别指出:论文中所有证据都是客观指标(CLAP分数、FAD、波形SNR),没有进行任何人类听感测试。"这些参数真的快到可以当乐器用"、"这个控制响应对现场演奏足够"——这些主张建立在延迟测量和客观代理指标上,而非有音乐家参与的正式感知评估。特别是迁移调度模式,客观探针显示正常,但研究者自己听到的是一种短暂的"闷掉"感,这就是为什么他们推荐异质调度作为主用去噪控制方式,迁移调度只作为明确标注的"快速起效备选项"。

归根结底,DEMON这套系统说明的事情其实很朴素:当AI音乐生成足够快、架构足够精心设计时,那些原本只能"提交参数等待结果"的旋钮,真的可以变成你手下的弦。流水线不中断、快速参数响应、逐帧空间塑形——这三件事拼在一起,让扩散模型第一次有了乐器的质感。至于它到底算不算一件好乐器,还需要音乐家们真正上手才能评判。这也是研究者自己承认的、最重要的一块未完成的验证工作。

Q&A

Q1:DEMON系统和Lyria RealTime这类AI音乐生成工具的核心区别是什么?

A:Lyria RealTime是自回归流式系统,控制更新只在每2秒的音频块边界生效,无法在块内调整,且已生成的token不可修改。DEMON是扩散模型架构,控制作用于每一步去噪循环内部,逐帧分辨率为40毫秒(25Hz),部分参数(如SDE混合曲线)在约42-81毫秒内即可听到效果,而不是等待2秒的块边界。两者都不能直接修改已输出的音频,但DEMON的控制粒度更细,且运行在本地消费级GPU上而非云端API。

Q2:DEMON的"每工位独立工单"机制和传统StreamDiffusion的全局清空重建有什么实际区别?

A:传统StreamDiffusion的prepare()路径在每次调整去噪强度时会清空整个缓冲区并重建时间步张量,导致流水线里所有在制品作废,需要重新等待填充期,期间无任何输出(约649毫秒静默)。DEMON的每槽位异质调度让每个槽位携带入队时锁定的独立时间步计划,调整滑块只影响新入队槽位,已在制的槽位按原计划完成。压力测试中60次连续参数调整的完成率:DEMON 100%,传统清空设计1.7%。

Q3:窗口化VAE解码为什么能保证和完整解码结果完全一致?

A:Oobleck VAE使用膨胀1D卷积,其感受野在距边界333毫秒(约8.3帧)处收敛。DEMON在目标窗口两侧各扩展0.5秒作为缓冲(远超333毫秒阈值),解码整个扩展区域后丢弃边缘只保留中心。由于中心部分的每个帧都能看到足够的上下文,其计算结果与完整解码在16位PCM精度下逐采样点完全相同。这是VAE本身的结构特性,在RTX 5090、4090、3090三块GPU上均得到验证,加速比分别为2.80、3.10、3.22倍(15秒窗口)。