跳转到内容

函数速查

函数的参数、默认值和用法与当前版本保持同步。content 表示音符或花括号包裹的内容,label 表示已声明的标签,length 可使用 pxem

@note

别名:@n

创建音符

参数类型默认值
namestring必填
accstring""
octavenumber4
colorstring"#000"
@note(name, acc, octave, color)
参数说明:
- name: [必填]音符名,可以是大写字母或者数字,不允许小写字母(会和降号冲突)。此参数写法有语法糖,见下。
  其中 0 或 Z 是休止符,8 是隐形占位,9 或 X 是只打拍不发音的节拍记号(显示为 X),这三者都不显示升降号和八度点。
- acc: [可选]的额外升降号字符串,例如 "##" 表示再升两个半音,"b" 表示再降一个半音。
- octave: [可选]八度,类型为数字。如果 name 是字母,则此项代表绝对八度;如果是数字,则此项代表相对八度。

语法糖:[音名][升降号][八度] 音名和升降号可以交换
例:A3# === @note(A3#) === @note(A, #, 3)
也支持 A99##bn 的写法。可以设置 note.octave 改变默认的绝对八度

支持 数字音名, 此时 octave 为相对八度
支持使用数字音名时使用相对八度,如 "1,," 代表在当前基准音(由上下文属性"1=?"决定)的基础上降低两倍八度,"1'" 代表在当前基准音的基础上提高一个八度
例:1#' === @note(1#') === @note(1, #, 1)。此时支持升降号写音名前面,如 #1'

@dash

别名:@-

增时线

@dash() 创建一根增时线
语法糖: 一个 '-' 代表一个 @dash()

@bar

别名:@|

小节线

参数类型默认值
typenumber0
lengthlength1.25em
@bar(type, lengthEM) 创建一个小节线
语法糖: 
- type0: '|' 普通小节线
- type1: '||' 终止小节线 左细右粗
- type2: '|:' 重复小节线 左粗右细
- type3: ':|'
- type4: ':|:' 左右反复

@div

别名:@/

减时线

参数类型默认值
第 1 个参数content必填
nnumber1
autobeambooleantrue
@div(C1, 2): C1下方创建2根减时线
@/({C1 C2 @dash()}, 3): C1、C2和增时线下方创建3根减时线并连接
语法糖:在音符后加斜杠'/',可以多个
@div(C1, 2) === C1//
@div(C1 C2/ @dash(), 2) === {C1 C2/ @dash()}//
设置命名参数前缀: div

@dot

别名:@.

附点

参数类型默认值
第 1 个参数content必填
nnumber1
@dot(C1, 2): C1右侧创建2个点 仅接收一个可接收元素
语法糖:在目标后加'.',可以多个
@dot(C1, 2) === C1..
{1^2}. === {1.^2}
@dot(C1 C2/ @dash(), 2) 报错 因为点只能接收一个可见时间元素

@tuplet

多连音

参数类型默认值
第 1 个参数content必填
normalnumber必填
@tuplet({1/23}, 4): 内容含5个最短时值单位,压缩到4倍最短单位的总时长,所以是八分音符的五连音,总时长为二分音符

@voice

别名:@v

声部

参数类型默认值
第 1 个参数content必填
namestring""

支持额外参数(位置参数类型:string)。

@voice({}, name, 歌词1名=歌词1, 歌词2名=歌词2, ...)
第一个参数为音符内容,第二个参数为写在最左侧的声部名称(可不填);
命名参数为歌词左侧的名称和内容,可以任意多个。也可以是位置参数,表示不需要名称。
例:
@voice({C1 D1 E1}, 钢琴, 男=ha ha ha, 女=la la la)
@voice({C1 D1 E1}, , ha ha ha, 女="la la la") 表示音符和第一个歌词都没有名称
歌词可以被引号包裹,如果包含逗号等歧义字符一定需要引号
语法糖:
N(name): C1 D1 E1
L(name): ha ha ha...
L: ...
前面可以有任意空白,但最后换行表示结束。歌词此时允许有逗号而不加引号
如果一定要换行,最后加上'\'
英文歌词用空格和连字符'-'分词,用'@'占位

@voices

别名:@vs

多个声部

支持额外参数(位置参数类型:content)。

@voices(
    @voice({C1 D1 E1}, 钢琴, 男=ha ha ha),
    @voice({C2 D2 E2}, , "la la la")
)
语法糖:当多个 voice 用 voice 的语法糖写在一起时,会自动创建一个 voices 组件包裹它们。
例:
N(钢琴): C1 D1 E1
L(男): ha ha ha
N: C2 D2 E2
L: la la la

@br

换行

参数类型默认值
offsetnumber1
@br(offset=1): 在后续事件前偏移指定行数
@br() === @br(1)
@br(2): 空出一行后继续
语法糖: [仅限顶层]至少连续两个换行

@page

设置文档页面尺寸、边距、最小谱面行间距和页码

参数类型默认值
widthlength794px
heightlength0px
toplength45px
bottomlength48px
leftlength40px
rightlength40px
gaplength1em
numberingstring""
@page(width=794px, height=1123px, top=48px, bottom=48px, left=40px, right=40px, gap=1em, numbering="1/1")

@head

提供左、中、右三块布局,常用于曲谱头部信息展示;也可用连续的 H.*: 行声明构造

参数类型默认值
leftcontent""
centercontent""
rightcontent""
gaplength5px
@head(left={{@key(C) @meter(4,4)}}, center={@text(标题)}, right={@text(作者)})
语法糖:相邻的 H.*: 声明合并为一个 head,每条声明生成对应槽的一行;空行或普通内容结束组合
H.title: 标题       center 槽,预设大字号居中 Text
H.subtitle: 副标题  center 槽,预设小字号居中 Text
H.author: 作者      right 槽,预设小字号右对齐 Text
H.signature: 1=C 4/4  left 槽,同一行生成 Key 和 Meter
H.tempo: 94           left 槽,生成 Tempo
H.left: / H.center: / H.right: 接受对应槽的任意零时长 DSL 内容
以 @ 或 { 开头时按 DSL 解析,否则按该字段的裸文本规则生成 Text

@stack

临时多声部

支持额外参数(位置参数类型:content)。

@stack(content1, content2, ...)
语法糖: &
{content1} & {content2} & ...
表示content1和content2在时间上完全重叠,通常用于和声等需要对齐的场景。可以有任意多个参数,至少需要两个参数。

@up

把同一时间位置的可见对象向上堆叠

支持额外参数(位置参数类型:content)。

@up(content1, content2, ...)
语法糖: ^
{content1} ^ {content2} ^ ...
第一个参数是宿主,其余依次叠在它的上方,常用于和弦、变速记号、音符注释。
全体成员折叠成一个事件、共享宿主的时值;需要各自独立时值的并行分支请用 & / @stack。

@down

把同一时间位置的可见对象向下堆叠

支持额外参数(位置参数类型:content)。

@down(content1, content2, ...)
语法糖: _
{content1} _ {content2} _ ...
第一个参数是宿主,其余依次叠在它的下方,常用于力度记号等写在音符下面的标记。
与 ^ 混写时全部绑到同一个宿主:1^2_3 表示 2 在上、3 在下。

@arp

别名:@arpeggio

琶音

参数类型默认值
contentcontent必填
directionstring""
@arp({1 ^ 3 ^ 5}) 默认从低到高,无箭头
    @arp({1 ^ 3 ^ 5}, direction=up) 从低到高,顶端带箭头
    @arp({1 ^ 3 ^ 5}, direction=down) 从高到低,底端带箭头

@grace

倚音

参数类型默认值
hostcontent必填
gracecontent必填
sidestring"pre"

支持额外参数。

前倚音: @grace(宿主, 倚音, side=pre) 后倚音: @grace(宿主, 倚音, side=post)
语法糖:'>' 与 '<',箭头永远指向宿主
2>1     前倚音:2 是 1 的倚音,画在 1 的左上角
1<2     后倚音:2 是 1 的倚音,画在 1 的右上角
{3 2}>1 多个倚音用大括号括起来
1>2>3   允许嵌套:1 是 2 的倚音,2 是 3 的倚音
倚音默认就是八分音符(自带一条减时线),再写 '/' 变成十六分音符

@tie

连音线

支持额外参数(位置参数类型:label)。

@tie(label1, label2, ..., height=0.5em)
    将端点依次连接;同行用一条弧线,跨行拆成分段连接;若不传端点则找最近的

@beam

减时线连接

支持额外参数(位置参数类型:label)。

@beam(label1, label2, ...): 将多个已标记音符按顺序连接为减时线组

@dyn

渐强渐弱

参数类型默认值
fromlabel必填
tolabel必填
dvnumber必填
@dyn(from, to, dv) 在两个标签之间线性改变力度
from、to 必须位于同一音轨且时间不同
dv 为正时渐强,为负时渐弱;变化量叠加在每个音符原有力度上

1 ^ $p 2@a 3 4@b
@dyn(a, b, 24)

@box

给目标结构或对象加外框

参数类型默认值
第 1 个参数content必填
paddinglength0em
strokelength1px
widthlength-1px
@box(content, padding=0.2em, stroke=0.08em, width=-1px)

@volta

反复房子

参数类型默认值
fromlabel必填
tolabel必填
passnumber必填

支持额外参数(位置参数类型:number)。

@volta(from, to, pass, ...) 只在指定遍数演奏的一段区间
from 和 to 是区间首末音符的标签,因此房子可以横跨谱面行
pass 是遍数:整段谱面演奏到第几遍时才播这里,必填正整数
再写几个遍数就是几遍共用一个房子,顺序随意,标签按升序写成 1.2.

|: 1 2 | 3@a 4@b :| 5@c 6@d | 7
@volta(a, b, 1)  @volta(c, d, 2)

@adjust

别名:@adj

微调目标的位置与占位

参数类型默认值
第 1 个参数content必填
dxlength0px
dylength0px
dwlength0px
dhlength0px
@adjust(content, dx=0px, dy=0px, dw=0px, dh=0px)
    dw/dh 在排版前增减占位,最终尺寸不小于 0;dw 按原左右占位比例分配,dh 调整下方;
    dx/dy 在排版完成后平移目标,邻居不会让开,因此可以故意重叠。
    括住的若是关系对象(连音线等)且其中没有对象,平移的就是这条关系对象

@set

设置局部默认值

支持额外参数。

@set(fontSize=20) 则当前块内默认字体变为20px
可以设置其他函数的默认值: {函数名}.{属性}=值,例:
@set(note.octave=5, note.color=#f00)

注意:@set 作用域仅在其所处 '{}' 内、其出现之后。离开当前作用域会恢复为之前的设置。此设置和时序无关,类似于局部变量。

@key

别名:@1

设置时间线上的 1= 调性基准

参数类型默认值
tonalitystring必填
sizelength1em
@1(C4) 或 @key(F#3)
它不会修改 parser 的局部变量,而是在时间固化阶段影响其后的数字音名解释
画出来的记号只含音名和升降号,不含八度;通常叠在音符上方书写:1 ^ @1(F#)

@meter

设置拍号

参数类型默认值
numnumber必填
dennumber必填
sizelength0.7em
@meter(6, 8) 设置 6/8 拍号

@tempo

设置时间线上的速度

参数类型默认值
bpmnumber必填
sizelength1em
@tempo(96) 将其后的时间状态速度设置为 96 BPM

@program

别名:@instrument

设置当前音轨的 MIDI 音色

参数类型默认值
programnumber必填
@program(40) 将后续音符切换到 MIDI program 40

@text

文本标记。括号内可直接换行,支持 left、center、right 对齐

参数类型默认值
第 1 个参数string必填
sizelength1em
lineheightnumber1.25
alignstring"left"
@text(进入主题)
语法糖:直接写双引号字符串,如 "进入主题";可跨行,引号未配对则不生效

@symbol

别名:@$

创建一个乐谱符号

参数类型默认值
namestring必填
sizelength0.5em
@symbol(name, size)
语法糖: $name
内置:
  $tr 颤音:本音与调内上方二度交替
  $fermata 延长记号:覆盖区间速度减半,目标音实际时长翻倍
  $prall 上波音:本音、调内上方二度、本音
  $mordent 下波音:本音、调内下方二度、本音
  $accent 重音
  $ppp 极弱
  $pp 很弱
  $p 弱
  $mp 中弱
  $mf 中强
  $f 强
  $ff 很强
  $fff 极强
  $dc 从头反复:跳回曲首再演一遍
  $ds 从记号处反复:跳回最近的 $segno
  $segno 反复记号:D.S. 的回跳目标
  $fine 终止记号:回跳之后经过这里就结束乐曲