前言
04 年有部动画短片叫 Bravo 东东,男主角东东有副口琴,大概就是那时有了玩口琴的想法,去年折腾 Vercel 部署 Galgame 网页播放器前后端指北 前后碰巧看到 B 站上的 小星星大师版,惊为天人,于是买了副东方鼎 24 孔复音口琴,摩拳擦掌准备学习一番。一年下来也没学几首歌,吹得比较熟的也就那么几十首,真正拿得出手的可能就「残酷天使的行动纲领」和「共同渡过」。大师版视频里莫扎特改编的「小星星变奏曲」不谈,难一点的「达拉崩吧」之类的换气就完全跟不上,更不用说双琴。想来主要还是对五线谱和乐理不够熟悉,一些高级的口琴技法也没怎么努力学。
口琴本身种类也比较多,分为复音口琴、半音阶口琴和布鲁斯口琴(aka. 全音阶口琴、蓝调口琴、十孔口琴),和本文没什么关系就不展开了。接触 ABC 记谱法的契机是整理 Obsidian vault 时我更喜欢精简的格式,而复音口琴用的乐谱很多就是单纯的图片简谱/五线谱,能凑合用,但可以用 ABC、MID、MusicXML 等乐谱常用的格式(说的比较绕,其实就是 lead sheet)来替代,选 ABC 记谱法也没什么特别的理由,单纯是搜了一圈 Obsidian 插件,只找到 obsidian-plugin-abcjs 可以调用 ABCJS 渲染乐谱,而且功能很完善,就一直这么用着。
介绍
直接搬个 维基百科的介绍:
ABC 记谱法是 19 世纪出现的一种记谱法,以 A 到 G 的 字母记录音高,再配以其他符号用来记录变化音、音长等,由克里斯・瓦尔莎发明。后来由于计算机使用 ASCII 字符集又要处理音乐,ABC 记谱法再度受重视,并成为一部分音乐软件的信息存储法。
使用场景简单来说就是节省空间的同时储存音乐,和图片/音频相比,文件要小得多。
示例
直接上个谱面,先对 ABC 记谱法有个基本概念,示例的是世界名曲「Frère Jacques」,看名字可能没印象,但听到旋律应该就知道了。
X:1
T:Frère Jacques
M:4/4
L:1/4
K:C
c d e c| c d e c| e f g2| e f g2
g/2a/2 g/2f/2 e c| g/2a/2 g/2f/2 e c | c G c2| c G c2|]
因为 Hugo 调用 ABCJS 的 shortcode 尝试失败,就不加网页渲染的功能了,下面放张图片细品,实际上是可以播放的,所以请手动点开 Tom and Jerry Touché, Pussy Cat! 这集并定位到 4:50 处(YouTube TV 原版 240p,AcFun AI 修复高清版 1080p),假装有配乐。
格式
该部分内容大量转载自 老王详解 ABC 记谱法【2019 年 8 月 30 日修正版】1,只做了一点格式上的修改和精简,需要系统了解建议去原帖,内容更丰富。
这里就不卖关子了,上面提到的「Frère Jacques」就是著名儿歌「两只老虎」的原版,也是「国民革命歌」的旋律来源。
X:1
T:两只老虎
M:4/4
L:1/8
Q:1/4=120
K:F
F2 G2 A2 F2 | F2 G2 A2 F2 | A2 B2 c4 | A2 B2 c4 |
cd cB A2 F2 | cd cB A2 F2 | G2 C2 F4 | G2 C2 F4 |]
解释:
X:1
表示这首曲目是第一手曲目。也就是说,同一个文件中可以存放 n 手曲目,编号从 1 开始,各首曲目之间用空行隔开M:4/4
表示这首曲目的拍子是四四拍L:1/4
表示以下音符中的字母如果没有加上其他符号,则视为四分音符Q:1/4=120
代表速度为每分钟 120 个四分音符X:
为表头的开头,而K:
为表头的结束。其余参数项则放在这二者之间,顺序随意- 对支持 ABC 代码的打谱软件来说,一般只有
X:
,M:
,L:
,Q:
,K:
五个参数项很重要 - ABC 记谱法用大写字母来表示小字一组的音符。
C
就是中央 C,简谱 C 调的中音 do,对应的 MIDI 音符编号是 60;D
就是小字一组的 D,简谱 C 调的中音 re,对应的 MIDI 音符编号是 62 - 用在小写字母后面加一个半角的单引号
'
表示小字三组的音符;在小写字母后面加两个单引号''
表示小字四组的音符;以此类推 - 在大写字母后面加一个半角的逗号
,
表示小字组的音符;在大写字母后面加两个逗号,,
表示大字组的音符;以此类推 - 休止符:用半角的英文小写字母 z 来表示休止符,大写的 Z 来表示整小节休止中的休止符
关于格式我只学了这么多,尝试写了个「粉刷小工人」的节选 ABC 谱,听起来怪怪的,就没继续尝试了。后面附带整理的一些表格,还是那句话,更多内容请见原文。不感兴趣的话可以直接跳到 #合唱。
K:
参数
K:
表示曲目的调性。冒号后面写英文的调式主音音名加英文的调式名,调式名也可以不写K:C
代表 C 大调。降 E 大调就是K:Eb
,升 G 大调就是K:G#
,A 小调就是K:Am
,依此类推- 在调性名后还可以加入指定调式中某音要做特殊处理的参数值。比如对某音升高或降低半音,就在这个半角英文小写字母音名钱加半角的上尖号
^
或者半角的下划线*
记号,^
表示升高半音,*
表示降低半音
- 调式主音音名
- 主音音名必须是一个半角的英文大写字母,在字母后面可以加半角的井号
#
或半角的英文小写字母b
来表示带有升记号与降记号的主音音名 - 国际通用的书写规则:临时变音记号写在音名后,如
C
、D
、E
、F
、G
、A
、B
七个基本音名;临时变音记号写在音符、音符级数钱,如旋律中的音符,或者和弦名称后面的5
、6
、7
、9
等 - 这里的调式主音音名是音名,所以临时变音记号应写在音名的后面。而且读的时候,也应该把临时变音记号读在音名之后。
C#
应该读作C Sharp
,而不是C 升
或者升 C
;Bb
应读作B Flat
,而不是降 B
或者B 降
- 主音音名必须是一个半角的英文大写字母,在字母后面可以加半角的井号
- 调式
K:F lydian
表示 F 利底亚调式,K:C
表示 C 自然大调,这里的自然大调的调式名可以不写,如果写上就是后面的这个样子K:C maj
- 调式主音音名与调式之间的半角空格符号可以省去,但最好写上以便阅读
- 调式名称无大小写区别,而且可以只写前三个字母作为缩写
- 在 ABC 记谱法中,通常用到的调式名有如下这几个:
major
自然大调、minor
自然小调、dorian
多里安、phrygian
佛里吉亚、lydian
利底亚、mixolydian
混合利底亚、locrian
洛克里亚
参数一览表
T:Title % 曲名
C:Composer % 作者
D:discography % 专辑名称
H:History % 历史
S:Source % 来源
N:Notes % 备注
Z:Transcription note % 译注
A:Area % 地区
B:Book % 书名
R:Rythm % 节奏
P:AB.AC.ABA (AC) 3 % 月段反覆模式
临时变音记号一览表
符号 | 意义 | 说明 |
---|---|---|
^ | 升记号 | 升高半音 |
^^ | 重升记号 | 升高一个全音 |
^/ | 向上微调 | 升半个半音 |
_ | 降记号 | 降低半音 |
__ | 重降记号 | 降低一个全音 |
_/ | 向下微调 | 降半个半音 |
= | 还原记号 |
常见表情记号
表情记号 | 说明 |
---|---|
!ppp! | 极弱 |
!pp! | 很弱 |
!p! | 弱 |
!mp! | 中弱 |
!mf! | 中强 |
!f! | 强 |
!ff! | 很强 |
!fff! | 极强 |
!breath! | 呼吸 |
!///! | 三根斜线的震音记号 |
!arpeggio! | 琶音记号 |
!<(! | 见强开始点!<)! |
!>(! | 见弱开始点!>)! |
合唱
上面几个例子都是单声部的,ABC 记谱法显然也能处理一些比较复杂的情况。 举两个🌰️:
X:1
T: 小星星
C: 王晓波整理
%%score { 1 | 2 }
M:4/4
L:1/4
Q:1/4=96
K:C
V:1 treble
V:2 bass
V:1
C C G G | A A G2 | F F E E | D D C2"^Fine" |] G G F F | E E D2 | G G F F | E E D2"^D.C. al Fine" |]
V:2
C,2 E,2 | F,2 E,2 | D,2 C,2 | G,2 C,2 |] E,2 D,2 | C,2 G,2 | E,2 D,2 | C,2 G,2 |]
X: 1
T: Chorus
V: T1 clef=treble name="Soprano"
V: T2 clef=treble name="Alto"
V: B1 clef=bass name="Tenor"
V: B2 clef=bass name="Bass"
L:1/8
K:G
P:First Part
[V: T1]"C"ed"Am"ed "F"cd"G7"gf |
[V: T2]GGAA- A2BB |
[V: B1]C3D- DF,3 |
[V: B2]C,2A,,2 F,,2G,,2 |
渲染出来的效果:
GPT
在 ChatGPT, Bible Tower and Chinese Room 中我曾提到几个测试,判断 ChatGPT 这些 LLM 的能力,然后 CloseAI 的模型全军覆没,一个能打的都没有。前几天又基于 gpt-3.5-turbo-0613
和 gpt-4-0613
测试了一番,GPT 依旧惨败。刚好这几天在鼓捣 ABC 记谱法,就顺便测试了一些 GPT-3.5 在编谱方面的能力(GPT-4 实在是有点贵,没开 Plus 着实用不起)。
Prompt:
I want you to act as a music composer. You will create a musical piece using ABC notation for a chosen song. My first suggestion request is "I need help composing an ABC notation of Frère Jacques."
然后 GPT 返回了一段内容:
X:1
T:Frère Jacques
M:4/4
L:1/4
Q:1/4=120
K:C
C D E C | C D E C | E F G | E F G | G A G F | E C D C | G G G | F E D C ||
第一行还好,稍微改改就能用,第二行就太乱了。而且测试下来 GPT 一遇到有休止符的地方就不行了,提示它补上结果还是一模一样的结果,只能说水平比我还差。简单修改后长这样 (可以把第二行当课后练习,反正答案上文也给了):
X:1
T:Frère Jacques
M:4/4
L:1/4
Q:1/4=120
K:C
C D E C | C D E C | E F G2 | E F G2 |
G A G F | E C D C | G G G | F E D C |]
结语
有空要再次尝试在 Hugo 中添加 ABCJS,就能很方便地分享一些自制歌曲。此外我从小就一直想学点钢琴,但家里实在容不下一台古典钢琴,何况既不是地主也没有这么多的余粮,购琴计划就一直搁置。去年买了口琴之后感觉还是钢琴有意思,看了圈感觉 MIDI 键盘或电钢琴是更合适的选择,有机会一定搞一把玩玩,顺带试试和 MoeGoe 殊途同归的 Vocaloid。
BTW,侧边栏简介来自林子祥的「数字人生」,最近在看 TVB 在千禧年制作的情景喜剧「男亲女爱」,真的和歌词说的一样,「谁人能够预知 4 点 34 价位暴升变咗 1004,凭号码来认识」。
该论坛为视障者音乐制作交流基地,通篇文字的排版也是为了便于读屏软件(Screen Reader)阅读。 ↩︎