怎样自己制作五线谱?
Table of Contents
本教程基于苹果电脑系统(macOS),如果你是Winodws,可以在一定的程度上参考,但具体安装设置可能略有不同,只要配置好了软件,使用上还是差不多的!
直接操作类制谱软件
要制作乐谱,肯定得要安装制谱软件,“直接操作类”制谱软件可直接用键盘鼠标来添加音符制作乐谱,之所以有“直接操作类”制谱软件,是因为还有“代码生成类”制谱软件(后面会讲到,别看到代码两个字就慌,很简单的)。
软件一:Sibelius
Sibelius大致相当于Photoshop在平面设计中的地位,进入首页往下滚动就看的到下载按钮,付费软件,挺贵的,使用鼠标点击就可以制作,安装完大小为789M,但是安装包有900多M,而且它是pkg包,要双击安装,而不是常见的移动到“应用程序”目录中。
软件图标
软件界面
软件二:Finale
Finale是最多人拿来与Sibelius相互比较的制谱软件了,而且两者在官网互掐。
Finale用户购买Sibelius价格有优惠
但是在Finale官网点购买,没有看到有对Sibelius用户的优惠信息(2021.12.23),但这个可能不同时间不一样,说不定以后它又有优惠也不一定。
根据网上的信息,一般认为Windows用Finale多,而macOS用Sibelius多,但因为软件一直在更新,以前在Windows不好用或者在Mac不好用,不代表现在不好用,如果你确实要购买,那可以具体再去多查查资料。
但大体上还是使用Sibelius的用户更多!
软件三:Encore
官网很垃圾,更像是个人作坊,现在(2021.12.23)2021年都差不多过去了,而它官网更新的对macOS的支持还是在2019年10月,也就是两年前!
所以这个软件我是不推荐使用的!
软件四:MuseScore(强烈推荐)
MuseScore是一款免费开源的制谱软件,可以在官网下载,也可以在github下载。
当然,由于开源软件是众多开发者业余时间开发的,一般对最新的系统支持都会有问题,因为开发者自己可能都不愿意更新最新系统(更新最新系统会导致他用的其它软件可能出问题),另一个原因就是他们工作忙,没时间搞。
代码生成类制谱软件
软件一:Texpad
付费软件,使用LaTex语法编写,官网:Texpad。
文档:Texpad使用文档、别人的使用Texpad的经验
安装软件我就不说了,打开Texpad软件后,粘贴以下语句进去
documentclass{article}
\usepackage{musixtex}
\begin{document}
\instrumentnumber{1}
\setstaffs1{2}
\generalmeter{\meterfrac24}
\startextract
\zendextract
\end{document}
然后点击这个齿轮进行编译
这个点右边那个Allow(允许)就行,意思是它要自动下载支持的库
上边点击齿轮后,它会报错,报缺少软件包的错,如下图,需要点击下载按钮,下载音乐相关的Tex包(MusiXTeX),这个要等一段时间(看网络情况,也许要10分钟左右)
安装好之后,就会自动显示了
这样就调试完成了,接下来就是通过编写代码来生成自己的乐谱了,可以参考文档:Texpad使用文档、别人的使用Texpad的经验,不过我不太推荐这个,建议使用下边的LilyPond(编写代码更简单)。
软件二:LilyPond(推荐)
LilyPond是一款开源免费的制谱软件,它除了可能制作五线谱,还可以制谱吉他六线谱等其它乐谱,github:LilyPond,LilyPond入门,LilyPond使用LaTeX写乐谱,当然LilyPond不像TexPad是一个有界面的软件,它是一个没有界面的命令软件(但可以配合其它有界面的软件使用)。
macOS安装LilyPond
brew install lilypond
创建test.ly
文件(后缀为.ly
),把以下内容粘贴进去(可以看到,这种命令跟前面的TexPad又有很大的不同,看起来更简单,当然有些人可能也觉得更难理解)
{
c' e' g' e' f'
}
运行命令
lilypond /path/to/test.ly
它会在当前目录下生成一个test.pdf
文件,这个文件就是生成的乐谱(你在哪个目录下运行lilypond命令,当前目录就是哪个,可以用pwd
来查看当前在哪个目录)
更多lilypond使用方法可以查看它的帮助信息lilypond --help
,比如可以设置导出pdf到哪个文件夹,或者设置不导出pdf,而是导出svg或png等格式的乐谱。
至于命令具体怎么写,以及更多复杂的语法,可以查看:LilyPond入门。
配合有界面的软件使用lilypond:
lilypond虽然开源免费,但不能即时预览,每次编写完命令都要自己运行一次生成pdf,再打开pdf,比较麻烦,所以可以使用第三方软件来配合预览,其实这些软件的本质也是调用系统里的lilypond来生成pdf,只不过可以让你更方便查看,所以还是要安装lilypond命令的。
目前所知的有两款软件:
- 1、Frescobaldi,开源免费;
- 2、VSLilyPond,是vsCode插件,同样开源免费,喜欢用vscode的可以用它。
LilyPond配合界面软件使用
注意,一定要先安装Lilypond,然后再配合界面软件使用,直接用界面软件是没有效果的!
界面软件一:Frescobaldi
下载地址:Frescobaldi,先下载安装,然后打开之后要设置一下lilypond可执行文件路径。
设置lilypond可执行文件路径:进入:Frescobaldi偏好设置→LilyPond偏好设置,然后把右侧默认的那个LilyPond删掉(我的截图是我已经换过的了)
再点“添加”,然后直接把下边的路径粘贴进去,不要点右边的选择文件夹
/usr/local/bin/lilypond
如下图所示
添加后是这样的
修改lilypond路径后,如果直接用,还是会报错,报的是gs
(ghostscript,用来处理pdf文件的)的错误,运行以下命令即可解决
cd /Applications/Frescobaldi.app/Contents/Resources/lib/python3.9/ && curl https://patch-diff.githubusercontent.com/raw/frescobaldi/frescobaldi/pull/1397.patch | patch -s -p1
当然python3.9这个文件夹,以后随着python的更新,可能变成4.0、4.1、……,到时自己右击“Frescobaldi.app”→查看包内容,进去看看就知道具体是哪个版本了。
最后重启一下Frescobaldi(就是退出再打开),就能正常使用了(如下图所示)
至于具体要怎么写,可以看这儿:LilyPond入门。
界面软件二:VSLilyPond
VSLilyPond是vscode的一个扩展,你需要先安装vscode,然后在vscode里搜索安装这个扩展就行(vscode基本使用教程(基于macOS)),安装好之后,最好重启一下vscode(不重启我也不知道行不行,理论上应该也可以)。
测试:在vscode里新建一个test.ly
文件,把以下代码粘贴进去
{
c' e' g' e' f'
}
按command+s
保存,它会自动编译并在test.ly
相同目录下生成一个test.pdf
,这个就是乐谱了。理论上我们可以在vscode里开两个栏,一边写,一边预览pdf,然而我发现这个pdf无法自动刷新,这相当于没法用呀…我已经提交issue问了,等结果吧!不过可以用自带的“预览”App来打开它,用cmd+tab
切换一下就能刷新。
这哥们是在Windows平台上写的,都没macOS来测试,不过他刚毕业就进入Facebook工作也是厉害!
VSLilyPond的设置:在vscode中按command+shift+p
,在里面搜索:>vslilypond:
开头的,都是它的设置,或者干脆在vscode的偏好设置里,搜索“vslilypond”,也能找到它的所有设置,比如保存触发自动编译生成pdf这个操作,也是可以在设置里设置的,只不过它默认就是保存自动编译!比如你可以指定python可执行文件的位置(比如你有不同版本,这个工具依赖于python)等等。
LilyPond语法
一个例子明白结构
以下是C大调欢乐颂的lilypond代码(看不懂先别慌,往下看)
version "2.22.1"
\header {
title = "欢乐颂"
composer = "贝多芬 曲"
tagline = ##f
}
\relative c' {
\clef "treble"
\key c \major
\time 4/4
\tempo 4=130
e4 e f g | g f e d | c c d e | e4. d8 d2 | \break
e4 e f g | g f e d | c c d e | e4. c8 c2 | \break
d4 d e c | d e8 f e4 c | d e8 f e4 d | c d g, e'~ | \break
e e f g | g f e d | c c d e | e4. c8 c2 | \break
d4 d e c | d e8 f e4 c | d e8 f e4 d | c d g, e'~ | \break
e e f g | g f e d | c c d e | d4. c8 c2 | \bar "|."
}
生成的乐谱是这样的
欢乐颂C大调版详细解释
% lilypond版本,用:lilypond --version可以获取
\version "2.18.2"
% 标题部分
\header {
title = "欢乐颂"
composer = "贝多芬 曲"
% 去掉页脚的文字,也可以把##F改成双双引号包裹文字,这样就是自定义文字
tagline = ##F
}
% 设置相对音,相对音可以是任意音名,但是要小写,不过一般都用c(do)作为相对音,
% c为小字组的do,每加一个单引号,提高一组,每加一个逗号,降低一组,也就是说
% c'为小字一组的do(即中央c),而"c,"为大字组,“c,,”为大字一组,以此类推
\relative c' {
% clef是谱号的意思,treble表示高音谱号(不写默认高音谱号),bass表示低音谱号,alto为中音谱号,不过钢琴用不到
\clef "treble"
% 调号,默认是c大调,major表示大调,minor表示小调
\key c \major
% 拍号,不写默认是4/4拍,但4/4拍不会显示成4/4拍,只会显示成c
\time 4/4
% \tempo是速度的意思,其实前面已经知道是4分音符为一拍,所以这里4就是4分音符的意思,而130表示每分钟有130个4分音符(其实就是每分钟有130拍)
\tempo 4=130
% 字母就是音名(统一用小写,不能用大写),字母后面的数字表示几分音符,e4中的4就表示4分音符
% 在相对音高语法中,每个音都会选择一个离它前一个音最近的音作为当前音,而第一个音前面没有音,所以第一个音是相对\relative指定的音
% 比如本例是\relative c',说明第一个音是相对小字一组的c(中央c),此时我们写两个音:c e,第一个音c,五线谱中有很多c,这个c到底指哪个?那就要相对
% \relative c'了,由于c'离c’最近,所以这个c'就是指c',而e的话,就要相对前面的c了,由于c已经是c‘,cde,比c高两位有个e,根据cdefgabc
% 比c低5位也有个e,很显然这个应该是指小字一组的e,因为它离上一个音最近
% 如果要给音符标手指数字(即用哪个手指弹),可以这样:c4_1表示在五线谱下方音符位置标数字1,c4^1表示在五线谱上方音符位置标数字1
% 波浪线表示连音线,可以连接它后面的一个音,比如:g4~ g表示两个4分音符g用连音线连起来
% 竖杠表示小节线,\break表示换行,附点音符直接在音名后面加个点就行
% 复纵线用\bar "||",终止线用\bar "|.",即用\bar表示要添加小节线,后面接上双引号里面的线表示具体用什么线
e4 e f g | g f e d | c c d e | e4. d8 d2 | \break
e4 e f g | g f e d | c c d e | e4. c8 c2 | \break
d4 d e c | d e8 f e4 c | d e8 f e4 d | c d g, e'~ | \break
e e f g | g f e d | c c d e | e4. c8 c2 | \break
d4 d e c | d e8 f e4 c | d e8 f e4 d | c d g, e'~ | \break
e e f g | g f e d | c c d e | d4. c8 c2 | \bar "|."
}
注释
只要是代码,那肯定有注释,lilypond代码使用百分号开头来注释,比如
% 这是注释,注释是给人看的,方便你备注用,程序不会识别它
{
c' d'
}
指定lilypond版本号
由于新版本语法可能会有一些变动,如果你当前用的是最新版的lilypond,那么指定版本可以让当前的新版lilypond按你指定的某个老版本来解析代码。
指定lilypond版本为2.18.2
version "2.22.1"
{
c' d'
}
头部/尾部信息
version "2.22.1"
% 头部信息
\header {
title = "欢乐颂"
composer = "贝多芬 曲"
% 这里是作品号
opus = "Op. 9"
% 尾部信息
tagline = ##f
}
{
c' d'
}
如下图所示
由上图可知,头部信息用\header
来标记,里面有多个属性,我就不解释了,大家看代码直接就能看懂。
主要需要讲的是tagline
属性,tagline = ##f
表示不显示尾部的信息,否则它会显示以下这句话(当然那个2.22.1要看你当前版本),其实就是一个指向官网的链接
Music engraving by LilyPond 2.22.1—www.lilypond.org
如果你想把它修改为自定义的文字,只要把##f
换成你想输出的文字即可(要用双引号)
version "2.22.1"
% 头部信息
\header {
title = "欢乐颂"
composer = "贝多芬 曲"
% 这里是作品号
opus = "Op. 9"
% 尾部信息
tagline = "试试"
}
{
c' d'
}
如下图所示,但是不能添加链接,我试了用a链接它会直接输出
谱号
clef是谱号的意思,钢琴只用的到treble和bass,也就是高音谱号和低音谱号
version "2.22.1"
\relative c' {
% 高音谱号
\clef "treble"
c1
}
\relative c' {
% 中音谱号
\clef "alto"
c1
}
\relative c' {
% 次中间谱号
\clef "tenor"
c1
}
\relative c' {
% 低音谱号
\clef "bass"
c1
}
输出如下,不过钢琴只用到高音和低音
调号
\key g \major
表示G大调,其中\key g
表示G=1,\major
表示大调,\minor
表示小调
version "2.22.1"
% 不写调号,默认为C大调
\relative c'' {
c d e f | g a b
}
\relative c'' {
% g大调,major表示大调
\key g \major
c d e f | g a b
}
\relative c'' {
% a小调,minor表示小调
\key a \minor
c d e f | g a b
}
输出乐谱如下,以我目前(2021.12.22)的乐理知识,还无法理解C大调和a小调显示成一样到底要如何区分,G大调5线上的音符为什么要加还原符号(它自动生成的,我代码没写)
拍号
拍号用\time 3/4
这样表示,其中4/4
默认会显示为C
而不是4/4
(当然也可以显示成4/4
,请看这里)
version "2.22.1"
\relative c'' {
\time 4/4
a4 a a a
}
\relative c'' {
\time 3/4
a4 a a
}
\relative c'' {
\time 6/8
a4. a
}
速度记号
version "2.22.1"
\relative c'' {
\time 4/4
\tempo "Presto" 4 = 120
a4 a a a
}
\relative c'' {
\time 3/4
\tempo "Andante"
a4 a a
}
\relative c'' {
\time 6/8
\tempo 4. = 96
a4. a
}
输出如下
音高
前面已经写了很多音符,只不过都没有提到过音高,首先它是用英文单引号表示升高一个八度,用英文逗号表示降低一个八度,比如c'
比c
高八度,而c,
比c
低八度。
为什么用单引号和逗号呢?我们知道,用音名表示小字组大字组时,小字组组号是标在音名字母右上角而大字组组号是标在音名字母右下角的,比如c1表示小字一组的C(即中央C),C1表示大字一组。
而单引号和逗号刚好一个在右上角,一个在右下角,大致符合小字组组号标在右上角,大字组组号标在右下角的习惯,只不过lilypond里并没有采用大写字母表示大字组的用法,而是统一采用小写字母。
lilypond有三种音高模式
- 1、绝对音高:用
\absolute {}
关键字指定,绝对音高模式把c
认为是小字组的C,由这个开始向两边延伸,可得出c'
为小字一组的C(即中央C)、c''
为小字二组C、c''
为小字三组的C,而c,
为大字组,c,,
为大字一组,c,,,
为大字二组,同理,d e f g a b都是一样的,反正就是刚好与钢琴键盘完全对应的。 - 2、固定音高:用
\fixed c'{}
关键字指定,其中c'
你可以改为任何其它你觉得方便的音,假设你用的就是c'
,则表示花括号内所有的音都是以c'
为基准,即每个音都要相对c'
来调整音高。 - 3、相对音高:用
\relative c'{}
关键字指定,其中c'
你可以改为任何其它你觉得方便的音,也可以不写,不写则默认c为小字组的C(与绝对音高模式相同),但是相对音高主要原理是,每个音都是相对前一个音的音高,而固定音高是每个音都是相对指定的固定的一个音高,这是两者的区别。
version "2.22.1"
{
c d
}
相对音高
首先看以下例子
version "2.22.1"
% 高音谱表下加一线-小字组一C
\relative c' {
\clef "treble"
c4
}
% 高音谱表下加一间-小字一组D
\relative c' {
\clef "treble"
d4
}
% 高音谱表第一线-小字一组E
\relative c' {
\clef "treble"
e4
}
% 高音谱表第一间-小字一组F
\relative c' {
\clef "treble"
f4
}
% 按规律,这个应该是:高音谱表第二线-小字一组G
\relative c' {
\clef "treble"
g4
}
以上五段代码,按道理,第五段应该是第二线G(5/Sol),为什么跑到下加三间去了?当然下加三间也是G,只不过比第二线低一个八度
出现以上问题的原因是,中央C前面也有G,我们可以看这个CDEFGABCDEFGAB,假设加粗的为中央C(其实就是\relative c'
中的c'
),那么它后面的G离C为CDEFG共5度,而它前面的G是GABC,只有4度,所以这个G会选择离c'
更近的一个位置,也就是下加三间,而不是第二线。
但是,如果我这么写,这个g却是正常显示
version "2.22.1"
\relative c' {
\clef "treble"
c4 d e f g
}
输出如下,可以发现这个G是像我们预料的那样的正常的显示的,而不会像前面那个那样显示在下加三间,这是因为它总是会参考前一个音(这就是relative的意义所在,如果把relative改为fixed,那么所有音都会参考fixed指定的那个音),而第一个音因为前面没有音,所以它会参考relative指定的那个音
拍号4/4不要显示成C
version "2.22.1"
\relative c' {
\numericTimeSignature
\clef "treble"
\time 4/4
c4
}
如下图所示
音符壁纸集合
以下命令可生成高音谱表及低音谱表低到下加二线,高至上加二线的音符。当然生成之后,还需要截取放到合适的大小的背景图片里,成为一张平板或手机能使用的壁纸,特别是手机,由于使用频率高,如果把手机壁纸设置为音符在五线谱中的位置,有助于我们记忆某个音符在五线谱的某个线/间时,发哪个音。
成品壁纸:
version "2.22.1"
% ============= 高音谱表 开始 =============
% 高音谱表下加二线-小字组A
\relative c' {
\clef "treble"
a4
}
% 高音谱表下加二间-小字组B
\relative c' {
\clef "treble"
b4
}
% 高音谱表下加一线-小字组一C
\relative c' {
\clef "treble"
c4
}
% 高音谱表下加一间-小字一组D
\relative c' {
\clef "treble"
d4
}
% 高音谱表第一线-小字一组E
\relative c' {
\clef "treble"
e4
}
% 高音谱表第一间-小字一组F
\relative c' {
\clef "treble"
f4
}
% 高音谱表第二线-小字一组G
\relative c'' {
\clef "treble"
g4
}
% 高音谱表第二间-小字一组A
\relative c'' {
\clef "treble"
a4
}
% 高音谱表第三线-小字一组B
\relative c'' {
\clef "treble"
b4
}
% ------------------
% 高音谱表第三间-小字二组C
\relative c'' {
\clef "treble"
c4
}
% 高音谱表第四线-小字二组D
\relative c'' {
\clef "treble"
d4
}
% 高音谱表第四间-小字二组E
\relative c'' {
\clef "treble"
e4
}
% 高音谱表第五线-小字二组F
\relative c'' {
\clef "treble"
f4
}
% 高音谱表上加一间-小字二组G
\relative c''' {
\clef "treble"
g4
}
% 高音谱表上加一线-小字二组A
\relative c''' {
\clef "treble"
a4
}
% 高音谱表上加二间-小字二组B
\relative c''' {
\clef "treble"
b4
}
% 高音谱表上加二线-小字三组C
\relative c''' {
\clef "treble"
c4
}
% ============= 高音谱表 结束 =============
% ============= 低音谱表 开始 =============
% 低音谱表上加二线-小字一组E
\relative c' {
\clef "bass"
e4
}
% 低音谱表上加二间-小字一组D
\relative c' {
\clef "bass"
d4
\repeat volta 2 { }}
% 低音谱表上加一线-小字一组C
\relative c' {
\clef "bass"
c4
}
% 低音谱表上加一间-小字组B
\relative c' {
\clef "bass"
b4
}
% 低音谱表第五线-小字组A
\relative c' {
\clef "bass"
a4
}
% 低音谱表第四间-小字组G
\relative c' {
\clef "bass"
g4
}
% 低音谱表第四线-小字组F
\relative c {
\clef "bass"
f4
}
% 低音谱表第三间-小字组E
\relative c {
\clef "bass"
e4
}
% 低音谱表第三线-小字组D
\relative c {
\clef "bass"
d4
}
% 低音谱表第二间-小字组C
\relative c {
\clef "bass"
c4
}
% 低音谱表第二线-大字组B
\relative c {
\clef "bass"
b4
}
% 低音谱表第一间-大字组A
\relative c {
\clef "bass"
a4
}
% 低音谱表第一线-大字组G
\relative c {
\clef "bass"
g4
}
% 低音谱表下加一间-大字组F
\relative c, {
\clef "bass"
f4
}
% 低音谱表下加一线-大字组E
\relative c, {
\clef "bass"
e4
}
% 低音谱表下加二间-大字组D
\relative c, {
\clef "bass"
d4
}
% 低音谱表下加二线-大字组C
\relative c, {
\clef "bass"
c4
}
% ============= 低音谱表 结束 =============
大致截取之后,统一用以下的imagemagick命令批量裁剪到图像的边缘,以下命令为把当前目录下的所有.jpg
(可自己修改)格式图片去除空白(即裁剪到图像的边缘)
declare -i j=0;for i in *.jpg; do convert -trim -fuzz 1% +repage $i ${i:0:$[${#i}-4]}_trimmed.jpg;j=j+1;echo $j"."$i" convert succeed"!; done