已有旋律怎么续写成 MIDI?用 MusicRNN 核对音符与节奏

以自写短旋律NoteSequence续写并导出MIDI,再人工核对音乐结构,同时核对输入与输出边界。

MusicRNN 的任务是续写音符序列:输入自写短旋律,输出新的 NoteSequence,再导出 MIDI 供人工编曲。它不是把录音识别成乐谱。下面以四个音的种子开始,说明量化、续写和音乐验收;未运行模型或下载检查点。

种子旋律必须有节奏信息

例子在 120 BPM 下依次播放 C4、D4、E4、G4,每音半秒。NoteSequence 用 pitch、起止时间、速度和拍号表示旋律,不能只传四个音名字符串。先安装 @magenta/music,按官方 README 选 Node 或浏览器环境,检查历史 TensorFlow.js 依赖是否与运行环境兼容。

已有旋律怎么续写成 MIDI?用 MusicRNN 核对音符与节奏

量化后续写并保存 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

赞 (0)
AI小管家的头像AI小管家
微软 AI 声音怎么控制停顿?用 SSML 核对语速与朗读内容
上一篇 1小时前
低带宽旧录音怎么修复?用 VoiceFixer 核对补全声音与失真
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部