做音乐软件之前,我先去看了传统编曲工作站。大家平时说的 DAW 就是数字音频工作站,负责录音、编排音符、混音和导出音频。我当时还不会编曲,于是转头去找 AI 音乐生成模型。直接生成一首歌有了着落,想接着细改又碰到了麻烦。再往下看,就找到了 Suno Studio 这样把生成能力接进工作台的产品。Demotif 的念头就从这里冒了出来,能不能做个用语音操作的浏览器 DAW,像面对面跟制作人商量怎么改歌?后来我做了 Demotif。

拿一个常见的修改来说,给副歌前四小节加鼓,主唱别动。手上是一份多轨工程,还是一段已经混好的音频,做起来差别很大。

传统 DAW

拿 FL Studio 来说,可以在 Channel Rack 的步进网格里给底鼓和军鼓各点一排节奏,再把这段 Pattern 放到 Playlist 的时间轴上。时间轴上的片段通常叫 clip,既可以放录好的人声音频,也可以引用一组由乐器播放的音符。

在 Cubase 的 Drum Editor 里,可以打开一段 MIDI 片段,在底鼓、军鼓和踩镲各自的行上画音符,横向位置就是落点。想试个过门,就在第四小节末尾多排几下,再和主唱一起听。

主唱如果已经放在独立的音频轨上,鼓点就可以单独编排。对当时还不会编曲的我来说,难的是到了网格面前,还得弄明白底鼓该踩在哪一拍,军鼓怎么接,过门怎么写才顺。

生成整首歌

不会手写鼓点,很自然就会去看 AI 音乐生成模型。拿一段提示词生成立体声成曲,可以快速试一试整首歌的气质、旋律走向和乐器搭配。

端到端成曲通常交付一份双声道混音。如果只是想在已有的立体声混音上面再叠一条独立的鼓轨,可以保留原文件,把新鼓放到另一条轨道。可要是原本生成的混音里已经带了一套不满意的鼓,想在副歌前四小节把它换掉,你没法把原鼓当成一个独立的项目对象直接从混音里抽走。叠鼓也可能触发总线上的压缩器,改变最终听到的声音。

生成接口

截至 2026 年 11 月 13 日,Suno 已经推出了能生成音乐的 MCP Beta,授权后就能从兼容的客户端生成音乐,结果会进入账户曲库。

在查阅的 Suno 公开官方文档里,我没有找到面向普通开发者自助调用的通用 HTTP 音乐生成 API。Suno 公开的 C2PA 接口用于核验音频的来源凭证。

在歌曲编辑器里,Suno 还提供 Replace Section,可以选中一段时间范围重新生成。

Eleven Music 面向付费用户提供音乐 API,Compose 接收文本 prompt 或结构化的 composition_plan。Music v2 和 v2.5 的计划按顺序放置多个块,可以分别设定歌词、风格和时长。

做 inpainting 时,可以从已存储的成曲或上传的音频里挑几段原样保留,把剩下的段落交给模型。生成块还可以用最长 30 秒的音频片段作为条件。这样可以保留四小节之外的混音,四小节之内的主唱和鼓仍会一起重生成。

两版也都支持 Audio Reference,可以用一段参考音频引导新曲的风格与音色。

Google 的 Gemini API 用 Interactions API 提供 Lyria 3 Clip 和 Lyria 3.5,前者生成 30 秒片段,后者能生成整曲。接口还可以返回歌词和结构信息,用来定位段落。

这里看的是 Google AI Studio 与 Gemini API 面向开发者的入口,截至 2026 年 11 月 13 日,其官方支持地区清单里列出了台湾、日本和新加坡,没有列出中国大陆、香港和澳门。

而在企业级的 Google Cloud 上,Gemini Enterprise Agent Platform 维护着单独的 Lyria 模型文档和对应的 location 说明。

Suno Studio

沿着如何继续编辑的问题往下找,我看到了 Suno Studio 2.0。它把时间轴、音频和 MIDI 轨、钢琴卷帘、自动化和内置效果器放进了同一个工作台。用 Chat Bar 输入文字,还能生成音频或 MIDI clip,或者改当前的编排。拿那四小节来说,工程里已经有独立主唱轨时,可以在另一条轨上补一个鼓 clip,再进钢琴卷帘调整鼓点。

如果手头只有一首已经混好的单文件成曲,Suno Studio 2.0 提供了 stem separation 功能,可以从整轨混音里提取人声、鼓、贝斯等分轨音频,也就是常说的 stems。这种后处理分轨技术通过算法从混合波形里反推并估计出各个声部的独立音频,分离之后确实能单独拉低某条轨道的推子,或者把估计出来的鼓轨静音再换上新鼓。但从工程角度看,逆向估计出来的 stem 偶尔会带有声部之间的串音或算法伪影,而且它拿回来的终究只是渲染后的波形,并不会凭空还原出原始工程里的源素材切片、MIDI 音符位置以及挂在轨道上的插件状态。

YuE2 的 ABC 谱面

要是音符在生成音频前就能拿到,就省去了从混音里往回猜这一步。YuE2 论文把这条路径叫作 symbolic CoT,先生成一份 ABC 记谱计划,再以它为条件生成音频,项目仓库也提供了单独生成谱面的入口。ABC 用纯文本写出小节线、节拍、段落、和弦和旋律。

有了这层可读的文本中间态,程序就能把音乐结构和音符直接解析出来供人修改,或者把改完的 ABC 重新作为条件喂给下半程的模型去渲染音频。ABC 留下的是音乐骨架,主唱录音、鼓组采样、完整配器和混音设置仍属于音频或工程素材。

假设在 ABC 文本里把副歌前某一小节的和弦从 C 改成了 Am,或者改动了几个旋律音符,如果想要听到完整配器下的真实变化,依然需要让模型重新跑一遍音频渲染。而且在神经网络合成音频的过程中,哪怕只改输入条件里的一个符号,整次渲染的演奏细节也可能跟着变。反过来,如果已经把生成的混音音频和解析出来的音符同时导入到了本地工程里,你直接在本地工程的钢琴卷帘里拖动一颗音符,本地的音符数据确实变了,但那条已经导入进来的立体声混音波形是静态文件,显然不会跟着你的鼠标操作自动重新渲染。

Demotif

导入谱面和混音

Demotif 可以把 YuE2 的输出放进轨道,接着裁剪、拆分、混音,或者导出 WAV。Plan 对应 plan_project_score,只生成 ABC 谱面。Render 可以通过 render_arrangement 取回同一次生成的立体声混音和对应的 ABC,也可以走 render,只把混音放进工程。

当服务端拿到 ABC 记谱后,会将其中的人声旋律和器乐旋律按照小节边界切分整理,转换成 DAW 时间轴上可编辑的音符 clip,同时保留和弦、拍号等记谱信息,并把可导入的段落带到时间轴上。混音和谱面同时导入时,旋律轨默认静音,避免合成器与成曲叠着放。单独试听人声旋律轨时,听到的是合成器按谱面弹出的音符。录音中的音色、气口和咬字仍在混音里。

日常播放和循环试听由浏览器用 Web Audio 按时间轴调度,整曲生成则作为异步任务交给后端。我部署在 Qoder Sites 上的在线版本,利用平台提供的函数能力桥接了 Modal 的云端算力。

前端发起生成请求后,桥接层会提交远端任务、轮询执行状态并支持中途取消,源码里默认配置的远端环境是 NVIDIA L4 GPU 搭配 CUDA。

语音 Producer

做语音交互的初衷,是希望人在编曲的时候能把眼睛留在时间轴上,耳朵听着循环播放的乐段,嘴上直接说出下一步想怎么改,就像在录音棚里跟制作人面对面交流一样。对 Producer 说的话走对话通道,录到轨道上的歌声和哼唱则会成为可以移动、裁剪和混音的音频素材。

在支持实时语音的部署上,Demotif 通过 WebSocket 接入 StepAudio 3 Realtime,支持连续语音输入、流式回复和开口打断。语音通道负责对话,需要改工程时,交给文本 Producer 生成结构化命令,两边共用会话记录。

假设 Demotif 的工程里已经有一条独立的主唱音频轨,时间轴上方打好了副歌的段落标记。你可以点选时间轴上的起点,再开口或打字告诉 Producer 要改哪四小节,让它新增一条鼓轨并在这四小节放一个鼓 clip。如果是四四拍的工程,四小节正好是十六拍的长度。你可以在对话里描述得更具体一点,像是让它在一、三拍放底鼓,二、四拍放军鼓,第四小节末尾加个短过门,或者顺嘴补一句把军鼓的力度调低一点。

编辑与撤销

落到工程里,轨道上排着 clip,每个 clip 内部记录着它在时间轴上的起拍位置、持续长度与内部偏移量,并通过 ID 指向底层的音符集合或音频素材,同一份素材可以被多个 clip 复用。

当文本 Producer 根据刚才的四小节加鼓需求生成修改动作时,它可以用项目命令新增轨道、鼓素材和对应的 clip。这些命令在真正落地之前,必须经过工程锁、版本号检查以及严格的结构校验。这一步能检查修改是否符合工程约束,改得是否合意还得看轨道、听声音。一轮对话结束后,通过校验的命令会作为一批写入当前草稿。鼓点听着不对味,可以一次撤销这批改动。试听满意后,再单独保存工程。

鼓 clip 放进去之后,可以把这四小节放进循环里一起听。听到第四小节末尾时,你觉得进副歌的那串过门塞得太满,有点抢主唱的气口。可以开口让 Producer 把第四小节最后一拍的加花少排两下,也可以打开鼓步进器,自己点掉两颗军鼓,再把底鼓力度往下拉一点,回到时间轴听一遍过门。