MIDI Scale 映射:改音符、封禁音级、掌控 Fold

Scale 是一张十二列的音符映射表,不是"任何音乐选择都能成立"的承诺。由你决定每个进入的音级去哪里、是否被拒绝、以及它的八度如何处理。

去听被改变的音符,而不只是音阶名

这里的原创 MIDI 旋律包含 C、D、E、G 和 A,结尾的 C 比开头高一个八度。C 小调映射不动 C、D、G,但把 E 变成 E♭、A 变成 A♭。请听过前两个音之后再下判断:它们没有变化,只听开头会错过效果。

把带大调色彩的旋律转向 C 小调

Interactive MIDI example

用 Rewind 从头对比 Bypass。Scale 激活时,第三个音是 MIDI 63 而不是 64,第五个是 68 而不是 69。后面的 E 也变成 E♭。八个音符仍以相同的时序和力度播放;新的色彩来自它们的音高,不是音频滤波或音量变化。

名为 Minor 的映射为每个音级选定了目的地。在这些可编辑的预设映射里,音阶之外的音符被向下映射到一个音阶音,不一定是两个方向中最近的那个。选择一个名字就是载入这十二个决定。它不会检视周围的和弦进行,也分不清一个有意的半音经过音和一个错音。

一次读一列

网格的每一列代表一个相对于 Base 的输入音级,每一行选择它的目的地。Base 为 C 时,E 列的 E♭ 行就是上面听到的那个变化。点击对角线上的 E 到 E 单元格可以恢复自然的 E,同时保留 A 映射到 A♭。由于十二列映射被修改,命名的选择会变成 Custom。

Reset parameters 恢复本例的 Minor 映射和乐器。Base 改变的是读取各列所用的音级参照;它不是简单地给每个音符加那么多半音。学习网格时让 Base 保持在 C,否则它固定的列标签容易被误认为绝对的输入音名。映射之后的统一移位由独立的 Transpose 控件负责。

拒绝留下空隙;改道留下音符

第二个示例从一张几乎恒等的映射表出发。它的 D 列用底行封禁,G 列指向 C。Fold 开启。第一个 C 照常播放,第二个输入 D 缺席,每个 G 都升到它上方的 C。原本八个事件剩下七个。

拒绝 D、把 G 改道,并对比八度落点

Interactive MIDI example

恢复 D 到 D 的对角单元格,让第二个音回来。然后用底行的 Block D 再次移除它。封禁是消灭那个事件;把 D 映射到 C 则会在节奏的同一位置播放 C。即使两者都避开了音高 D,它们也是不同的作曲选择。

Fold 选择邻近的八度,不是一个共享音区

保持 G 映射到 C,关掉 Fold。MIDI 67 的源 G 现在变成 MIDI 60,低七个半音。再打开 Fold:它变成 MIDI 72,高五个半音。听旋律轮廓的变化,并核对变换后的音符行,而不要期待整段乐句坍缩进同一个八度。

已实现的规则按八度调整映射后的音高,直到它落在与输入相距六个半音以内。它运行在 Transpose 之前。因此其后的 +12 st Transpose 仍会把结果抬高一个八度;Fold 不会把最终输出约束到某个固定的键盘区域。

让限制在音乐上成立,不只在数字上成立

Transpose 的范围是 −36 到 +36 个半音,最终音高被钳制在 MIDI 0–127。把几个同时的输入改道到同一个音高,并不保证独立的持续声部:输出流里相互重叠的同音高事件会彼此截短。一个在音级上合法的结果,仍可能失去让乐句成立的运动和间距。

与 Pitch 不同,这块面板没有可调的 Lowest/Range 输入门。它存储的范围如果在别处被收窄,会把范围外的音符原样放行而不是拒绝;两个示例都覆盖完整的 MIDI 范围。想明确拒绝某个音级,用底行的封禁。Scale 改变的是音符音高,不会把弯音或滑音表情也变成保证在调内的演奏。让前后事件解释规则本身,再让旋律决定这条规则是否有帮助。

写一段乐句,选好它的乐器,然后在你自己的 TuttiDAW 项目里试试这些 MIDI 效果器。

探索 TuttiDAW — 免费的浏览器 DAW