直接答案:先用
POST /api/music/separate生成两轨或十二轨,拿到需要导出的分轨song_id,再调用POST /api/music/download-file,请求体传{"song_id":"stem_clip_id","kind":"midi"}。响应就是可直接导入 DAW 的.mid文件。
为什么不能直接从原曲拿 MIDI
MIDI 不包含音频,只记录音高、起止时间和力度。接口需要先识别人声、鼓、贝斯等分轨中的音符,所以必须先完成分轨。原始整曲 ID 没有独立轨道的音符数据,不能直接作为 MIDI 来源。
完整流程
- 提交
POST /api/music/separate,选择两轨或十二轨。 - 轮询分离任务,确认目标轨道已经完成。
- 保存该轨道的
song_id,它不是原歌曲 ID。 - 调用 MIDI 下载接口,得到
.mid。 - 导入 Ableton、FL Studio、Logic、Cubase 等 DAW。
直接下载 MIDI 文件
curl -X POST "https://www.suno-api.io/api/music/download-file" -H "Authorization: Bearer $SUNO_API_KEY" -H "Content-Type: application/json" -d '{"song_id":"stem_clip_id","kind":"midi"}' --output track.mid
响应体是二进制 MIDI,不是 JSON。使用 --output 或程序文件流保存,不要把响应当文本打印到终端。
先拿下载地址再保存
curl -X POST "https://www.suno-api.io/api/music/download-url" -H "Authorization: Bearer $SUNO_API_KEY" -H "Content-Type: application/json" -d '{"song_id":"stem_clip_id","kind":"midi"}'
返回的 URL 仍需要 Authorization 请求头。适合服务端先记录地址、再异步下载或打包。
文件格式
| 项目 | 取值 |
|---|---|
| 格式 | SMF format 1 |
| 时间精度 | 480 PPQ |
| 速度 | 固定 120 BPM |
| 时间轴 | 1 秒 = 960 tick |
| 力度 | 0–127 |
| 鼓组 | MIDI Channel 10 |
固定 120 BPM 不代表原曲只有 120 BPM,而是用固定比例把秒数映射到 tick。这样导入 DAW 后,音符在时间轴上的位置与原音频一致。
导入 DAW 后要做什么
- 为 MIDI 轨选择音色,接口不会携带原始合成器或采样器;
- 重新设置速度、拍号和需要的量化;
- 自行添加音量、声像、EQ、压缩和混响;
- 鼓轨已经放在通道 10,确保 DAW 使用鼓映射;
- 没有音符的 FX 轨可能返回合法空 MIDI,这也可能是正常结果。
常见问题
原始歌曲 ID 能直接下载 MIDI 吗?
不能。必须先用分轨接口得到轨道 clip ID,再用该 ID 导出 MIDI。
为什么 MIDI 看起来是 120 BPM?
接口用 120 BPM 和 480 PPQ 写入秒级时间点,保证音符在时间轴上的位置正确;进入 DAW 后可以改速度。
MIDI 会带混响和音量吗?
不会。MIDI 只保存音符信息,音色和所有混音参数都需要在 DAW 里重新设置。
继续阅读:MIDI API 文档、分轨 API、提取人声与伴奏、分轨后混音。


