MusicRNN 的任务是续写音符序列:输入自写短旋律,输出新的 NoteSequence,再导出 MIDI 供人工编曲。它不是把录音识别成乐谱。下面以四个音的种子开始,说明量化、续写和音乐验收;未运行模型或下载检查点。
种子旋律必须有节奏信息
例子在 120 BPM 下依次播放 C4、D4、E4、G4,每音半秒。NoteSequence 用 pitch、起止时间、速度和拍号表示旋律,不能只传四个音名字符串。先安装 @magenta/music,按官方 README 选 Node 或浏览器环境,检查历史 TensorFlow.js 依赖是否与运行环境兼容。

量化后续写并保存 MIDI
const mm = require("@magenta/music");
const fs = require("fs");
async function main() {
const seed = {totalTime: 2, tempos: [{time: 0, qpm: 120}],
timeSignatures: [{time: 0, numerator: 4, denominator: 4}],
notes: [60,62,64,67].map((pitch,i) => ({pitch, velocity: 90,
startTime: i*0.5, endTime: (i+1)*0.5, isDrum: false}))};
const q = mm.sequences.quantizeNoteSequence(seed, 4);
const model = new mm.MusicRNN(
"https://storage.googleapis.com/magentadata/js/checkpoints/music_rnn/basic_rnn");
await model.initialize();
const continuation = await model.continueSequence(q, 32, 1.0);
fs.writeFileSync("continuation.mid", Buffer.from(mm.sequenceProtoToMidi(continuation)));
console.log(continuation.notes.length);
model.dispose();
}
main().catch(console.error);
32 是续写的离散步数,不是 32 秒。生成结果是 continuation,不能假定已经拼回输入种子;需要完整乐段时先在 MIDI 编辑器按节拍连接。官方导出实现可将量化序列转回时间序列。
检查音乐而不只检查文件
在 MIDI 编辑器中看拍号、速度和音域,听种子末尾到续写开头的衔接。重复音过多、跳进太大、落点不合和声时,标为待编曲修改;音符数量非零只说明有输出。相同种子改变 temperature 可能影响采样,不能由某个值保证悦耳。
老项目依赖与创作边界
检查点加载失败先核对网络资源、路径和 TensorFlow.js 环境,不要误报“模型没有创意”。先保存种子和未经编辑的输出,再保存人工修订版,方便评估哪些部分由模型生成。模型可协助产生候选乐句,不保证音乐原创性或完整授权;公开使用前仍需审查素材和成品。
参考资料
依据 2026-10-03 读取的官方资料整理:官方文档 1;官方文档 2;官方文档 3;官方文档 4。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33101.html