Symi 语法
控制信息
影响解析行为的全局属性定义
拍号
拍号定义了每小节的拍数和每拍的时值。格式为 (拍数/每拍时值)。例如:
(4/4)表示每小节4拍,每拍四分音符。(3/8)表示每小节3拍,每拍八分音符。
拍号实际上不影响音符事件的时间计算,但是由于Symi中每行表示一个小节,强烈建议定义正确的拍号,以允许编译器检查每小节时值是否正确。
理论上任何有理数都可以作为拍号,但是不建议使用非二的幂次的时值作为分母。受限于MIDI文件的格式,含有这种拍号的Symi无法导出为MIDI。
如果不定义拍号,默认在文件的开头使用 (4/4)。
BPM
BPM(每分钟节拍数)定义了节奏的快慢。格式为 (BPM),或 ([时值]=BPM)。例如:
(120)表示每分钟120个四分音符。([8]=160)表示每分钟160个八分音符。([8:3]=140)表示每分钟140个 八分之三音符 或 附点四分音符。
省略时值部分时,默认以四分音符为基准。时值部分的具体语法参见后文。
如果不定义BPM,默认在文件的开头使用 (120)。
基准音
基准音(参考音)定义了音高的参考频率。格式为 <基准音名=音高链>,其中两部分都可以分别和等号一同被省略。音高的具体语法参见后文。例如:
<C4=261.63> // 定义基准音C4为261.63Hz
<D4> // 定义D4为基准音,其频率根据音名(以及之前定义的基准音)自动计算,即等同于<D4=293.67>或者<D4=D4>
<440> // 定义基准音为440Hz,其音名根据频率(以及之前定义的基准音)自动计算,即等同于<A4=440>
<C4=261.63>
<20c> // 定义基准音频率为之前基准音上调20音分,音名自动计算仍为C4,即等同于<C4=264.67>
<C4=3/2@5/4> // 右侧可使用音高链
a = 3/2@5/4 // alias macro
<C4=a> // 右侧可引用 alias macro
如果右侧使用了相对音高(如上例中的20c),其频率会根据之前定义的基准音计算。
省略音名时,基准音的音名会寻找与所给定音高最接近的音名。
右侧若使用标识符,必须解析为一个 alias macro(且能展开为单个音高链)。
如果不定义基准音,默认在文件的开头使用 <C4=261.63>。
非常建议将歌曲的主音定义为基准音
量化
量化定义了时间信息的基本单位。格式为 {量化时值},例如:
{4}表示以四分音符为量化单位。{12}表示以十二分音符或三连八分音符为量化单位。{8:3}表示以八分之三音符或附点四分音符为量化单位。
理论上控制信息可以在任何位置定义,但量化可能是你最常这样使用的一项。例如你可以写出这样的内容:
{4}C,D,E,{8}F,E,
{12}D,E,D,{4}F,{2}G,
但是过于频繁变动的量化会给阅读带来麻烦,量化并不是时间信息的最小单位,后文会介绍在不改变量化的情况下,处理更细分时间的方法。因此建议将量化定义为一个段落中大部分音符时值的最大公因数,比较方便操作。