ONSONG CHARTS AVAILABLE NOW! LEARN MORE HERE
用户手册
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
现在让我们看一下音符事件。我们想以 75% 速度在第 8 通道上播放 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