用户手册

MIDI 语法

OnSong 使用基于文本的语法来表达 MIDI 命令。虽然您可以在元数据编辑器中使用 MIDI 事件,但您也可以在文本中表达 MIDI 命令。

分隔值

首先,多个 MIDI 命令可以用各种字符分隔,包括:制表符、逗号、分号、竖线或换行符。逗号是最常见的分隔符。例如:

1.2:0@0, PC1.2:3@0, N67@1, START, SS8

通道

每个条目可能包含一个 @ 符号。符号后面的数值是要在其上发送命令的通道。由于 MIDI 中的通道从零开始,第一个通道将是零 (0),第二个通道是一 (1),等等。

如果不使用 @ 符号,命令将在所有通道上发送或接收。

前缀

列表中的每个条目都包含一个前缀。此前缀决定要发送的 MIDI 命令的类型。这些包括:

  • PC无前缀是程序更改事件。
  • N 是音符事件
  • CC 是控制变化事件。
  • NRPN 是非注册参数号。
  • SS 是歌曲选择事件。
  • START 是开始命令。
  • STOP 是停止命令。
  • CONTINUE 是继续命令。
  • WAIT 在发送更多事件之前等待特定的时间。
  • F0 前缀为 SysEx 消息。
  • @ 前缀为 MIDI 全局标签。

命令的值出现在 @ 符号之前,或者如果没有给出 @ 的话则出现在条目的末尾。这是基于前缀的程序更改、控制变化、音符或歌曲选择的值。对于 SysEx 条目,SysEx 的十六进制值直接在 F0 前缀后提供,该前缀用作所有 SysEx 命令的标头。

子值

在某些情况下,附加信息在 MIDI 命令中作为子值传递。例如,MSB 和 LSB,以及控制值的速度可以这样发送。这是通过在值部分中添加冒号来表达的。子值的含义取决于发送的 MIDI 命令的类型:

  • 程序更改的子值与程序更改的 MSB/LSB 对齐。这些值用句号分隔,MSB 在左边,LSB 在右边。
  • 控制变化具有使用此设置的控制值。该数字可以在 0 到 127 之间。如果省略,将推断值为 127。您也可以用连字符分隔多个值来逐步执行值。例如,127-0 将在打开和关闭状态之间闭锁值 127。
  • 音符事件具有与应播放音符的速度相关的子值。这可以设置为 0 到 127 之间的数值。您可以通过用连字符分隔多个音符速度来逐步执行。

示例

让我们从一个简单的程序更改开始。在这种情况下,我们使用程序更改 8,它还在第 1 个通道上发送 MSB 为 4 和 LSB 为 2。该示例从此变化的最复杂版本开始,并删除库选择和通道以变得更广泛:

PC3.1:7@0, 3.1:7@0, 3:7@0, 3:7, 7@0, 7

控制变化类似,只是语法的左侧是控制变化号,右侧是可选值。如果未提供该值,则改为发送 127。我们将在第 3 个通道上发送控制变化 106,值为 64。

CC105:63@2, CC105:63. CC105@2, CC105

现在让我们看一下音符事件。我们想在第 8 个通道上以 75% 速度播放 C4,我们会输入以下内容,因为 OnSong 在 MIDI 音符刻度上将 MIDI C0 计算为 0:

N60:95@7, N60@7, N60:95, N60

同样,重要的是要记住,当从 MIDI 语法中删除值时,MIDI 语句变得更加广泛和不太具体。例如,音符事件的最后一个版本将在所有通道上以 100% 速度发送 C4。

我们也可以通过添加 WAIT 命令来延迟 MIDI。以下内容将 MIDI 延迟 2 秒以及 500 毫秒(半秒)。您可以将秒数指定为 1-10 秒或以毫秒为单位。

WAIT2, WAIT500

最后,我们可以引用 MIDI 全局值,这是可以引用的预配置 MIDI 事件列表。如果您有一个标签为"on"的 MIDI 全局值(不带引号),那么您可以使用以下方式引用该全局值:

@on
OnSong 2026 — 上次更新于 March 11, 2020