跳转到内容

装饰音&装饰符号

倚音是依附于主音的小音符,可以放在主音之前或之后。在 jpFun 中,用 > 和 < 连接倚音与主音,箭头始终指向主音:

  • 2 > 1:2 是前倚音,写在 1 的左上方,先奏倚音,再奏主音。
  • 1 < 2:2 是后倚音,写在 1 的右上方,先奏主音,再奏倚音。
  • 2 > 1 < 3:同一个主音可以同时带有前、后倚音。
前倚音与后倚音
2 > 1   1 < 2   2 > 1 < 3
复制代码

倚音默认是八分音符,自带一条减时线;再加一个 / 就变成十六分音符。播放时,倚音从主音的时值中借用时间,不增加这组音的总时值。

倚音的时值
2 > 1   2/ > 1
复制代码

多个音共同作为倚音时,用大括号把它们括起来。连续的倚音会自动连接减时线。

一组倚音
{3 2} > 1   5 < {6 5}
复制代码

倚音本身也可以带倚音。 连写 1 > 2 > 3 时,1 是 2 的倚音,2 又是 3 的倚音,字号会随着嵌套逐层缩小。这与 {1 2} > 3 不同:后者的 1、2 是同一层的两个倚音。

同层倚音与堆叠倚音
{1 2} > 3   1 > 2 > 3
复制代码

你甚至可以用倚音来画一颗树:

倚音树
1 > {2 < 4} > 3 > 4 < 3 > 5 < 6 < 7
复制代码

>、< 分别向两侧展开,大括号可以把一段嵌套结构组合起来,再作为另一个音的倚音。

琶音让和弦中的音依次起奏,而不是同时发声。用 @arp/@arpeggio 包住一个和弦,就会在和弦左侧画出琶音波浪线。

@arpeggio(content, direction="")
  • content:和弦内容,必填。用 ^ 或 _ 连接至少两个同轨成员,如 {1 ^ 3 ^ 5}。
  • direction:琶音方向。
    • 省略或设为 "":无箭头波浪线,从下到上播放。
    • up:顶端带向上箭头,从下到上播放。
    • down:底端带向下箭头,从上到下播放。
琶音的方向
@arpeggio(1 ^ 3 ^ 5)
@arp({1 ^ 3 ^ 5}, up)
@arp({1 ^ 3 ^ 5}, direction=down)
复制代码

这里的方向按音符在谱面上的上下位置判断。播放时,各音的起音依次错开,但仍在和弦原本的终点一起结束,不会增加和弦的总时值。

理论上琶音非常自由,可以横跨声部、轨道。但是 jpFun 考虑到实用性,限制琶音只能作用于至少包含两个成员的同轨和弦(用 ^ 或 _ 连接),不能用 & 连接的多个声部代替。这是因为如果要支持任意声部,就需要用标签的写法,写起来并不方便。

滑音可以连接两个音,也可以表示单个音的滑入或滑出。目前只有视觉效果,不产生滑音播放,也不改变原来的音高或时值。

先用 @标签 标记两个端点,再用 @gliss(标签1, 标签2) 连接。箭头按音高上行或下行,标签传入顺序不限;两个端点不能同时起音,也不能跨谱面行。

两音之间的滑音
1@a 5@b @gliss(a,b)   6@c 2@d @gliss(c,d)

% 滑音连接非常自由
N: 1@a 2 3 4 5@d
N: 0 3@b 2 1@c 0
@gliss(a,b)
@gliss(a,c)
@gliss(b,d)
@gliss(b,c)
复制代码

用 @slide 包住要修饰的内容:

@slide(content, side=pre, direction=up)
  • side:pre 在左侧画滑入箭头,post 在右侧画滑出箭头。
  • direction:up 表示音高上行,down 表示音高下行。默认是从低处滑入。
上行与下行的滑入、滑出
@slide(5)   @slide(5, direction=down)   @slide(5, side=post)   @slide(5, side=post, direction=down)
复制代码

多个音用大括号括起来:pre 只修饰内容首端,post 只修饰末端,不会给每个音都加箭头。

重音、延长记号、波音和颤音等符号,都收纳在符号函数 @symbol 中:

@symbol(name, size=0.5em)

简写为 $名称,用 ^ 把符号放在音符上方。例如 1 ^ @symbol(tr) 与 1 ^ $tr 等价。

符号名称jpFun 播放效果
$accent重音增强所附着音符的力度,详见 重音
$f 等力度记号持续影响所附着音符及其音轨内之后的音符的力度,详见 力度
$fermata延长记号所附着音符的区间内速度减半,实际时长翻倍,结束后恢复速度
$mordent下波音按“本音、调内下方二度、本音”演奏,三个音均分原音符的时值
$prall上波音按“本音、调内上方二度、本音”演奏,三个音均分原音符的时值
$tr颤音从本音开始,与调内上方二度快速交替,填满原音符的时值
$turn回音按“调内上方二度、本音、调内下方二度、本音”演奏,四个音均分宿主时值
$iturn逆回音按“调内下方二度、本音、调内上方二度、本音”演奏,四个音均分宿主时值
$marcato强调音播放同重音,所附着音符的力度增加 20,最高 127,不改变后续基础力度
$tenuto保持音仅记谱,短横线;不改变时值或力度
$staccato断奏仅记谱,尖端朝下的实心三角楔形;暂不缩短实际发声
$tremolo轮指仅记谱,五个放射状短笔画,无外圈;不改变播放
$harmonic泛音仅记谱,空心小圆;不改变播放
延长记号、下波音、上波音与颤音
1 ^ $fermata   1 ^ $mordent   1 ^ $prall   1 ^ $tr
复制代码

颤音记号后可以紧接 + 添加波浪尾巴(只有视觉效果):$tr+ 是一截,$tr++ 是两截,$tr+++ 是三截。

颤音尾巴
1^$tr++++++++++++ 234
复制代码

上下方二度按当前调内音级计算,不是固定相差两个半音。 例如默认 C 调中,3 的上方二度是 4,1 的下方二度是低音 7。波音、颤音和回音都不额外增加总时值。

延长记号不改变记谱时值,而是延长实际播放时间;由于速度是全篇共享的,同一区间内其他声部也会一起减速。

用 @box 给音符或一组内容加上矩形外框,突出需要注意的部分。外框本身只是视觉装饰,不改变内容的音高、时值或播放效果。

@box(content, padding=0em, stroke=1px, width=-1px)
  • content:要加框的内容,必填。多个音符用大括号括起来。
  • padding:内容与边框之间的四侧留白,默认 0em;允许负值,表示向内收缩。
  • stroke:边框线宽,默认 1px;设为 0px 可以隐藏边框。
  • width:内容的排版宽度,不含留白与边框。默认 -1px,随内容自动确定;设为正值时,按指定宽度调整框内音符的水平间距。
给音符与一组内容加框
@box(1, padding=0.2em) 2   @box({3 4 5}, padding=0.3em, stroke=0.08em) 6
复制代码

留白与边框线宽参与横向排版和纵向占用。给单个音符或复合主体加框时,上下留白也计入 ^、_ 的堆叠间距:

带框成员的上下留白
1 ^ @box(3, padding=0.3em)   @box(5, padding=0.3em) _ 3
复制代码

跨轨范围框只在整体外围预留上下空间,不扩大框内各轨之间的间距。

指定 width 可以让一段内容占据固定宽度;配合 stroke=0px,也可以只调整排版而不显示外框。

固定内容宽度
@box({1 2 3}, padding=0.2em, width=6em)   @box({4 5 6}, stroke=0px, width=6em)
复制代码

同一个外框的内容不能跨越谱面行,需要换行时应分别加框。指定的宽度必须足以容纳内容;负 padding 收缩后也必须能容纳边框,否则会报错。