乐谱渲染为 MIDI 文件及可变动态与速度的实现
1. 乐谱映射到 MIDI 文件
将乐谱转换为 MIDI 文件的目标是设计一种算法,以便使用数字音频工作站(DAW)或其他 MIDI 应用程序在计算机上播放音乐。这涉及分析乐谱的各个组件如何映射到 MIDI 或 MIDI 文件的概念,具体包括以下几个方面:
- 映射问题 :
- 如何将声部映射到音轨?
- 如何将乐器映射到通道?
- 如何将音符转换为 MIDI 消息?
- 如何在 MIDI 消息中添加音符速度?
- 解决方案 :将每个乐谱的乐器声部映射到一个通道,每个乐器声部的每个声部都有一个与该乐器声部通道关联的唯一 MIDI 音轨。这样可以将通道数量保持在最低限度,因为 MIDI 只有 16 个通道。
- 音符转换过程 :对于每个乐器声部的每个声部,获取该声部中的所有音符,按起始位置排序,然后将它们转换为与每个声部关联的音轨的 MIDI 消息。
2. 时间转换
MIDI 使用与速度无关的时间测量单位“节拍”(ticks)。MIDI 文件有一个全音符时间转换因子“ticks_per_beat”,通常为 480,表示每四分音符的节拍数。MIDI 速度以每四分音符的微秒数来衡量。
- 全音符时间到 MIDI 节拍的转换 :假设以四分音符为节拍,转换公式为 (T = t\times\frac{1}{4}\times tpb = 4\times t\times tpb),其中 (t) 是全音符时间量,(T