五线谱渲染

实现方法

使用 abcjs 库渲染 ABC 记谱法为五线谱,并支持音频播放。

创建 Hugo Shortcode

layouts/shortcodes/abc.html 中创建 shortcode:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<div id="abc-paper"></div>
<div id="abc-audio"></div>
<script src="https://cdn.jsdelivr.net/npm/abcjs@6.4.1/dist/abcjs-basic-min.js"></script>
<script>
  var visualObj = ABCJS.renderAbc('abc-paper', abcNotation, {
    responsive: 'resize'
  });
  // 播放功能
  var synthControl = new ABCJS.synth.SynthController();
  synthControl.load('#abc-audio', null, {
    displayPlay: true,
    displayProgress: true,
    displayWarp: true
  });
  synthControl.setTune(visualObj[0], false);
</script>

最后修改 css 样式。

使用方法

在 Markdown 中使用 shortcode,play="true" 启用播放控件:

1
2
3
4
5
6
7
8
{{< abc play="true" >}}
X:1
T:小星星
M:4/4
L:1/4
K:C
C C G G | A A G2 |
{{< /abc >}}

播放测试

仅高音谱号(Treble Clef)

仅低音谱号(Bass Clef)

高音+低音谱号(大谱表)

常用音符与乐谱标记

附点与时值

休止符

延音线与连音线

三连音与多连音

常见调式

力度记号

速度记号

反复记号

演奏记号

装饰音

八度记号

ABC 记谱法速查

基础语法

语法说明示例
X:曲目编号X:1
T:标题T:小星星
M:拍号M:4/4, M:3/4, M:6/8
L:默认时值L:1/4 (四分音符)
K:调号K:C, K:G, K:Am, K:F
Q:速度Q:1/4=120
C:作曲者C:Mozart

音符与八度

语法说明
C D E F G A B低音区音符
c d e f g a b高音区音符
C,, D,,低两个八度
C, D,低一个八度
c' d'高一个八度
c'' d''高两个八度

时值与附点

语法说明
C2两倍时值
C4四倍时值
C/2C/一半时值
C/4四分之一时值
C3/2附点(1.5倍)
C7/4双附点

休止符

语法说明
z休止符(时值同 L:)
z2二分休止符
z4全休止符
z/2八分休止符

临时升降号

语法说明
^C升 C (C#)
^^C重升 C (Cx)
_C降 C (Cb)
__C重降 C (Cbb)
=C还原 C

连音与延音

语法说明
C-C延音线
(CDE)连音线(圆滑线)
(3CDE三连音
(4CDEF四连音
(6CDEFGA六连音

小节线与反复

语法说明
|小节线
|]结束双线
|:反复开始
:|反复结束
|1第一结尾
|2第二结尾
::前后反复

力度记号

语法说明
!pp!很弱
!p!
!mp!中弱
!mf!中强
!f!
!ff!很强
!sfz!突强
!fp!强后弱

演奏记号

语法说明
!staccato!断奏(顿音)
!accent!重音
!tenuto!保持音
!fermata!延长记号
!trill!颤音
!mordent!波音
!turn!回音
!upbow!上弓
!downbow!下弓

装饰音

语法说明
{g}C前倚音
{ag}C多个倚音
{/g}C短倚音(一条斜线)
{//g}C短倚音(两条斜线)

和弦与歌词

语法说明
"Am"C和弦标记
[CEG]和弦音符
w:歌词行

Reference

[1] https://docs.abcjs.net/