雖然上網很方便,在網路上看資料無法取代真正的音樂養成教育。時間和經濟許可的話,仍建議找老師學習音樂,會少走許多彎路。
若本文內容有誤,請詢問你的音樂老師。
本網站未代理文章及贊助商連結中提及的樂器、器材及其他產品。
說明
LilyPond 是一套使用代碼 (code) 來撰寫樂譜的軟體。寫好 LilyPond 代碼後,由 LilyPond 主程式編譯 (compile) 出樂譜。由於 LilyPond 非所見即所得的記譜軟體,學習起來較為困難,故撥子撰寫這篇入門教學文章。
雖然 LilyPond 相對難上手,但 LilyPond 排出來的樂譜還算漂亮,而且該軟體是完全免費的,故仍有值得學習之處。
但 LilyPond 使用起來較不直觀,不熟悉時還要花時間除錯,故不建議直接用 LilyPond 來編曲。除錯時編曲的靈感就跑掉了。編曲時還是建議用比較直觀的工具,像是 MuseScore,或是直接用紙筆來編曲。
LilyPond 可以撰寫的樂譜種類
LilyPond 主要是用在西樂樂譜。以下是 LilyPond 可以排版出來的項目:
- 五線譜
- 單聲部譜。大部分的樂器
- 大譜表。鋼琴、豎琴等
- 多聲部譜。合奏
- 擊樂譜
- TAB 譜
- 吉他
- 烏克麗麗
- 其他。像是斑鳩琴
- 簡譜 (搭配 jianpu-ly 腳本)
其實還有其他少見的樂譜,像是古代樂譜。但那些樂譜比較少用,故不列出。
免安裝的雲端 LilyPond
Hacklily 是一個免安裝的雲端 LilyPond 編輯器:
這不是所見即所得的視覺化編輯器,仍然要寫 LilyPond 代碼。不過不需要建置環境,編譯出來的結果會即時顯示在右半側。
對編輯的結果滿意的話,就把左側的 LilyPond 代碼自行存在文字檔案即可。該雲端編輯器提供的存檔功能是 不必要 的。
這不是用來取代正規的 LilyPond 開發環境,只是在無法安裝 LilyPond 時的替代品,像是在使用公共電腦的時候。
雲端編輯器會不會偷存資料是有疑慮的。(警告) 重要的機密資料不要用雲端編輯器撰寫。
建置 LilyPond 開發環境
安裝 LilyPond
到 LilyPond 的官網下載給 Windows 使用的安裝程式,點擊安裝程式,按照指示安裝即可。本小節簡要地列出在 Windows 下的安裝過程。
一開始展示 LilyPond 的授權文件:
LilyPond 採用 GPL 授權。這個授權主要影響 LilyPond 的原始碼 (source code) 的使用方式,對一般使用者來說,只要知道 LilyPond 可免費使用即可。
選擇 LilyPond 的安裝位置:
除非有特殊理由,使用預設路徑即可。
選擇 LilyPond 的元件 (component):
基本上就是全選。
開始安裝 LilyPond:
很快就安裝完成了。
安裝 PDF 閱讀器
LilyPond 原始碼是文字檔案,經 LilyPond 編譯成 PDF 檔案。使用者可在電腦上觀看轉出來的樂譜,或是將樂譜印出來。
常見的 PDF 閱讀器有 Acrobat Reader 和 Foxit Reader。兩者功能重疊,擇一使用即可。撥子自己使用 Foxit Reader,因為比較輕量、運行速度快。本小節展示安裝 Foxit Reader 的過程。
到 Foxit Reader 的官網下載 PDF Reader 的 Windows 安裝程式,按照其指示安裝。本小節展示在 Windows 下的安裝過程。
一開始進入 Foxit Reader 的安裝畫面:
這裡建議開啟「Custom Installation」。至少看一下安裝程式對系統做了什麼更動。
展示 Foxit Reader 的授權文件:
同意授權即可繼續下一步。
選擇安裝路徑:
除非有強烈理由,使用預設路徑即可。
選擇 Foxit Reader 的元件:
基本上全部選取即可。
選擇額外的任務:
這些是選擇性的,可視自身需求取消不需要的任務。
不要安裝 McAfee Webadvisor:
這個軟體其實和 Foxit Reader 無關,算是 Foxit 的工商服務。即使按「DECLINE」也可以安裝 Foxit Reader。很多免費軟體會偷包一些非必要的東西,安裝時還是要看一下,才不會中招。
開始安裝 Foxit Reader:
結束安裝程式:
安裝後不需要馬上打開 Foxit Reader。Windows 會自動將 PDF 文件和 Foxit Reader 建立關連,之後點擊 PDF 文件時會自動以 Foxit Reader 開啟。
(選擇性) 安裝 VS Code
LilyPond 的設計是透過輸入代碼來撰寫樂譜,所以沒有 (所見即所得的) 樂譜編輯器。LilyPond 內建的主程式只是一個簡易的文字編輯器。
即使不使用 LilyPond 內建的編輯器,也可以先在別的編輯器寫好 LilyPond 文檔後,再由 LilyPond 編譯出樂譜。本小節介紹使用 VS Code (Visual Studio Code) 編輯 LilyPond 文檔的方式。
到 VS Code 的官網下載給 Windows 使用的安裝程式,按照其指示安裝。這裡展示在 Windows 上安裝 VS Code 的過程。
一開始展示 VS Code 的授權文件:
按同意後繼續即可。
選擇安裝 VS Code 的路徑:
注意 VS Code 並非安裝在系統路徑,而是安裝在個人路徑。這是因為 VS Code 會有許多延伸套件 (extension),使用個人路徑的話,安裝套件時就不需提升至管理員權限。
選擇開始功能表的名稱:
按照預設的設置即可。
選擇附加的工作:
這些工作不是必要的,按需求來勾選即可。
準備安裝:
安裝完成:
剛裝完的 VS Code 無法辨識 LilyPond 文檔。因為 VS Code 設計成可擴充的編輯器,每位使用者可根據自身的需求安裝延件套件。
在 VS Code 的主程式的左方欄,選擇 VS Code Marketplace (第五個按鈕):
在 Marketplace 的搜尋框輸入「lilypond」:
搜尋結果往往會有多個。通常找排比較前面的、星號較多的就會是可用的套件:
在 LilyPond 的頁面按下「Install」即可安裝該套件。即使套件不符需求,日後要反安裝也很簡單。
當樂友讀到這裡時,應該已經安裝好 LilyPond 相關軟體了。我們會在後文提供範例文檔,讓樂友體驗一下使用 LilyPond 的方式。
確認 LilyPond 版本號
撰寫 LilyPond 文檔時,需要輸入 LilyPond 的版本號。這裡提供兩個確認系統上的 LilyPond 版本號的方式。
第一種方式是開啟 LilyPond 的主程式。在起始頁面會提到 LilyPond 的版本號:
第二種方式是在命令提示字元 (command prompt) 輸入指令來確認版本號:
> "c:\Program Files (x86)\LilyPond\usr\bin\lilypond.exe" --version
GNU LilyPond 2.22.1
Copyright (c) 1996--2021 by
Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
and others.
This program is free software. It is covered by the GNU General Public
License and you are welcome to change it and/or distribute copies of it
under certain conditions. Invoke as `lilypond --warranty' for more
information.
樂友的系統上的 LilyPond 的版本號可能和這裡的版本號相異。請不要直接抄文章內的版本號。
這個指令很長,每次都要重打很浪費時間。可以參考這篇文章修改 Windows 的 PATH
環境變數,以後就不用打那麼長的指令。
第一次使用 LilyPond
本節用簡短的 LilyPond 文檔來體驗 LilyPond 的使用方式。
開啟編輯器,儲存名為 helloworld.ly (副檔名為 .ly) 的文字檔案。輸入以下 LilyPond 代碼:
{
c' d' e' f' g' a' b' c''
}
暫時不需要理解 LilyPond 代碼的意義,直接輸入一模一樣的代碼即可。
在 LilyPond 文檔上按右鍵:
選擇「Generate PDF …」即可編譯 PDF 文檔。
使用命令列的話,則輸入以下指令:
$ lilypond helloworld.ly
如果 LilyPond 文檔沒有寫錯,即可順利編譯出樂譜。以本例來說,在命令列編譯樂譜的訊息如下:
GNU LilyPond 2.22.1 (running Guile 2.2)
正在處理 ‘helloworld.ly’
分析中...
helloworld.ly:1: 警告: no \version statement found, please add
\version "2.22.1"
for future compatibility
Interpreting music...
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Converting to `helloworld.pdf'...
Success: compilation successfully completed
這個範例文檔編譯出來的樂譜如下:
如果 LilyPond 文檔寫錯,不會產出樂譜。這時候要閱讀 LilyPond 產生的紀錄 (log) 來除錯。
Windows 上使用圖形介面,所以會產生 log 檔。LilyPond 紀錄檔的檔案名稱和 LilyPond 文檔相同,但副檔名為 .log 。Log 檔是文字檔案,同樣用 VSCode 即可開啟。
LilyPond 文檔的架構
先前的 LilyPond 文檔過短,無法看出 LilyPond 文檔的架構。本節使用稍長的範例來觀看 LilyPond 文檔的架構。
使用相對模式簡化輸入
本小節使用 LilyPond 來撰寫生日快樂歌的樂譜。以下是 (加上註解的) LilyPond 範例文檔:
% 生日快樂歌
% 設置 Lilypond 版本號
\version "2.22.1"
% 標題
\header {
% 樂曲名稱
title = "生日快樂歌"
% 作曲者
composer = "Mildred J Hill"
}
% 使用相對模式,以中央 C 為起始點
% 差距小於五度音不需升降
\relative c' {
% 使用高音譜號
\clef treble
% 使用 F 大調
\key f \major
% 設置拍子符號
\time 3/4
% 弱起
\partial 4 c8. c16 |
d4 c4 f4 |
e2 c8. c16 |
% 大於等於五度
d4 c4 g'4 |
f2 c8. c16 |
c'4 a4 f4 |
%平滑 % 延長
e4( d4\fermata ) bes'8. bes16 |
a4 f4 g4 |
% 結束
f2 \bar "|."
}
以 %
開頭的文字為註解 (comment)。LilyPond 會忽略註解部分的內容,可在註解內寫入自由文字 (free text) 做為註記,不需寫 LilyPond 指令。
\version
指令用來指定 LilyPond 的版本號。新版的 LilyPond 建議在每份 LilyPond 文檔的開頭輸入該份文檔所用的 LilyPond 版本。"..."
內的文字視為字串 (string)。有些指令填入的內容要使用字串。
\header
區塊用來填寫樂諎的標題欄。區塊要用一對 {
和 }
包起來。區塊可跨越多行。本範例文檔填入樂曲名稱 (title) 和作曲者 (composer)。
\relative
區塊用來填入樂諎。當使用該指令時,LilyPond 會使用相對模式 (relative mode)。使用相對模式不是必需的,下一小節會展示不使用相對模式的 LilyPond 文檔。
此樂譜區塊的相對模式的起始點是 c'
(中央 C)。在相對模式中,每個音符相對前一個音符的音程小於五度時,不需要加上升降八度的符號。
\clef
指令用來輸入譜號。此處輸入 treble
(高音譜號)。
\key
指令用來指定樂曲的調性。\major
指令代表使用大調。本範例文檔使用 F 大調。
\time
指令用來設置樂曲的拍子符號。
由於生日快樂歌是弱起的樂曲,這裡使用 \partial
指令來指定弱起的拍子數為 4
(四分音符)。之後就是音符的部分。由於篇幅限制,這裡不詳談音符的撰寫方式。
這個範例將每個小節寫在獨立的一行。在小節的後方的 |
只是視覺提示,不寫也不影響產出的樂譜。但最後的 \bar
指令則會影響小節線。
此範例文檔所編譯出來的樂譜如下:
不使用相對模式
在前一小節中,我們使用相對模式來簡化音符輸入。本節不使用相對模式,可以和前一小節相互比較。
這裡使用同一首樂曲 (生日快樂歌),但去除重覆的註解:
% 生日快樂歌
\version "2.22.1"
\header {
title = "生日快樂歌"
composer = "Mildred J Hill"
}
% 未標註相對模式時,使用絕對音高
% 預設為 C3 (比中央 C 低八度)
{
\clef treble
\key f \major
\time 3/4
\partial 4 c'8. c'16 |
d'4 c'4 f'4 |
e'2 c'8. c'16 |
d'4 c'4 g'4 |
f'2 c'8. c'16 |
c''4 a'4 f'4 |
e'4( d'4\fermata ) bes'8. bes'16 |
a'4 f'4 g'4 |
f'2 \bar "|."
}
不使用相對模式時,c
的絕對音高是 C3,比中央 C 低一個八度。由於本樂曲大部分的音域在 C4 所在的八度,所以皆要提升一個八度。
樂友可以比較一下這兩個範例文檔的音符的撰寫方式,就可以知道相對模式和非相對模式間的差異。
繼續學習 LilyPond
由於篇幅限制,本文未說明 LilyPond 的語法。我們會在下一篇文章介紹 LilyPond 的基本概念和語法。