雖然上網很方便,在網路上看資料無法取代真正的音樂養成教育。時間和經濟許可的話,仍建議找老師學習音樂,會少走許多彎路。
若本文內容有誤,請詢問你的音樂老師。
本網站未代理文章及贊助商連結中提及的樂器、器材及其他產品。
說明
大部分彈奏吉他、烏克麗麗的樂友會從網路上找現成的和弦譜來用。不過,總是有自己製作和弦譜的機會。本文說明如何使用 LilyPond 製作和弦譜。
範例和弦譜
以下是一份範例和弦譜:
由於這首歌曲很簡單,此處的重點會放在和弦譜的組成上。
一份和弦譜的主要成份是歌詞和和弦記號。為了讓樂友便於使用,通常會附上和弦指法和刷弦指法。本文的目標即為製作出有這些要素的和弦譜。
重要步驟
由於完整程式碼比較長,本節先摘錄出一些關鍵步驟。讓樂友更容易消化 LilyPond 代碼。
撰寫範例和弦指法
此處展示撰寫範例和弦指法的 LilyPond 代碼:
% 載入預先寫好的烏克麗麗和弦指法
% 這樣就不用從頭撰寫指法
\include "predefined-ukulele-fretboards.ly"
% 將多個欄位放在同一行,不要塞滿整行
\markup \justify {
% 同一欄位內置中
\center-column {
"烏克麗麗" % 直接在欄位內寫字串即可
\vspace #0.3
% 撰寫烏克麗麗和弦指法範例
% 其實內部指令是樂譜,但從完成品上看不出來
\score {
<<
\new ChordNames {
\chordmode {
c1 f1 g1
}
}
\new FretBoards {
\chordmode {
\override FretBoards.FretBoard.size = #'1.8
% 使用烏克麗麗定弦
\set Staff.stringTunings = #ukulele-tuning
c1 f1 g1
}
}
>>
}
}
\hspace #5 % 現在兩者是水平並排
\center-column {
"Baritone 烏克麗麗"
\vspace #0.3
% 同上,撰寫 baritone 烏克麗麗和弦指法範例
\score {
<<
\new ChordNames {
\chordmode {
c1 f1 g1
}
}
\new FretBoards {
\chordmode {
\override FretBoards.FretBoard.size = #'1.8
% 使用烏克麗麗定弦
\set Staff.stringTunings = #ukulele-tuning
% 移調至 baritone 烏克麗麗
\transpose c' f { c1 f1 g1 }
}
}
>>
}
}
}
在 LilyPond 內部,其實和弦指法表是樂譜,只是產出的圖表不像樂譜。這裡其實有兩份指法表,用水平並排比較節省紙張。
細心的樂友應該已經發現到,若將這個部分代換成吉他、吉他麗麗、甚至是曼陀林的和弦指法表,同一份和弦譜就可以給另一種樂器使用。有興趣的樂友可以自行嘗試看看。
撰寫範例刷奏
此處展示範例刷弦的 LilyPond 代碼:
\score {
\header {
piece = "參考刷奏"
}
<<
\new Voice \with {
\consists "Pitch_squash_engraver"
} {
\improvisationOn
\time 3/4
c4\downbow c4\downbow c4\downbow
}
>>
\layout {}
}
這裡不僅僅是製作刷弦表而已,指彈表也可以製作。有興趣的樂友可參考我們先前的文章。
撰寫和弦譜
以下即為撰寫和弦譜的代碼:
% 撰寫和弦譜 (chord chart)
% 和弦譜沒有旋律,只有和弦和歌詞
\score {
\new ChoirStaff <<
\new ChordNames {
\time 3/4
% 呼叫預先寫好的和弦
\chord
}
\new Lyrics = "lyrics" \with {
% 去除和弦和歌詞間多餘的空白
\override VerticalAxisGroup.staff-affinity = ##f
% 將和弦對齊歌詞左側
\override LyricText.parent-alignment-X = #LEFT
\remove Forbid_line_break_engraver
}
{
% 任意選擇的空白寬度
% 只是為了讓歌詞排起來好看一點
\override Score.SpacingSpanner.shortest-duration-space = 5.0
\time 3/4
% 呼叫預先寫好的歌詞
\verse
}
>>
% 設置樂譜的版面
\layout {
% 去除首行縮排
indent = #0
% 不要填滿每一行,歌詞看起來才不會太寬
ragged-right = ##t
% 同理,不要填滿最後一行
ragged-last = ##t
% 修改整份樂譜的語境
\context {
\Score
% 省略小節數
\remove "Bar_number_engraver"
}
% 修改和弦模式的語境
\context {
\ChordNames
% 在每一小節加入小節線
\consists "Bar_engraver"
% 設置小節線長度
\override BarLine.bar-extent = #'(-0.25 . 2)
}
}
% 產生 MIDI 檔
% 這行不是必要的,可省略
% \midi {}
}
除了一般的 LilyPond 樂譜指令外,此處的關鍵在於使用一些排版相關指令,讓 LilyPond 排出來的和弦譜看起來更像巿面上的和弦譜。
完整程式碼
最後列出完整的 LilyPond 代碼。這段代碼有點長,請耐心閱讀:
% 生日快樂歌 - 和弦譜版
% 設置 LilyPond 相容版本
\version "2.22.1"
% 調整樂譜大小
#(set-global-staff-size 28)
% 自動裁切圖檔
#(ly:set-option 'crop #t)
% 撰寫歌詞
% 注意要按照既有節奏寫
verse = \lyricmode {
% 弱起拍 % 手動斷行的小技巧
\partial 4 祝你4 生4 日 快 樂2 祝你4 生4 日 快 樂2 \bar "" \break
祝你4 生4 日 快 樂2 祝你4 生4 日 快 樂2
}
% 撰寫和弦
% 注意要按照既有節奏寫
chord = \chordmode {
% 沒和弦的地方不顯示任何字串
% 預設字串是 N.C.。太占空間,不建議使用
\set noChordSymbol = ""
% 沒和弦的地方用休止符 (rest)
r4 c2. g2. g2. c2.
c2. f2. c2 g4 c2
}
% 撰寫標題和作曲者
\header {
title = "生日快樂歌"
composer = "佚名"
}
% 建立垂直空白
\markup { \vspace #2 }
% 載入預先寫好的烏克麗麗和弦指法
% 這樣就不用從頭撰寫指法
\include "predefined-ukulele-fretboards.ly"
% 將多個欄位放在同一行,不要塞滿整行
\markup \justify {
% 同一欄位內置中
\center-column {
"烏克麗麗" % 直接在欄位內寫字串即可
\vspace #0.3
% 撰寫烏克麗麗和弦指法範例
% 其實內部指令是樂譜,但從完成品上看不出來
\score {
<<
\new ChordNames {
\chordmode {
c1 f1 g1
}
}
\new FretBoards {
\chordmode {
\override FretBoards.FretBoard.size = #'1.8
% 使用烏克麗麗定弦
\set Staff.stringTunings = #ukulele-tuning
c1 f1 g1
}
}
>>
}
}
\hspace #5 % 現在兩者是水平並排
\center-column {
"Baritone 烏克麗麗"
\vspace #0.3
% 同上,撰寫 baritone 烏克麗麗和弦指法範例
\score {
<<
\new ChordNames {
\chordmode {
c1 f1 g1
}
}
\new FretBoards {
\chordmode {
\override FretBoards.FretBoard.size = #'1.8
% 使用烏克麗麗定弦
\set Staff.stringTunings = #ukulele-tuning
% 移調至 baritone 烏克麗麗
\transpose c' f { c1 f1 g1 }
}
}
>>
}
}
}
\markup { \vspace #0.8 }
\score {
\header {
piece = "參考刷奏"
}
<<
\new Voice \with {
\consists "Pitch_squash_engraver"
} {
\improvisationOn
\time 3/4
c4\downbow c4\downbow c4\downbow
}
>>
\layout {}
}
% 建立垂直空白
\markup { \vspace #1.6 }
% 撰寫和弦譜 (chord chart)
% 和弦譜沒有旋律,只有和弦和歌詞
\score {
\new ChoirStaff <<
\new ChordNames {
\time 3/4
% 呼叫預先寫好的和弦
\chord
}
\new Lyrics = "lyrics" \with {
% 去除和弦和歌詞間多餘的空白
\override VerticalAxisGroup.staff-affinity = ##f
% 將和弦對齊歌詞左側
\override LyricText.parent-alignment-X = #LEFT
\remove Forbid_line_break_engraver
}
{
% 任意選擇的空白寬度
% 只是為了讓歌詞排起來好看一點
\override Score.SpacingSpanner.shortest-duration-space = 5.0
\time 3/4
% 呼叫預先寫好的歌詞
\verse
}
>>
% 設置樂譜的版面
\layout {
% 去除首行縮排
indent = #0
% 不要填滿每一行,歌詞看起來才不會太寬
ragged-right = ##t
% 同理,不要填滿最後一行
ragged-last = ##t
% 修改整份樂譜的語境
\context {
\Score
% 省略小節數
\remove "Bar_number_engraver"
}
% 修改和弦模式的語境
\context {
\ChordNames
% 在每一小節加入小節線
\consists "Bar_engraver"
% 設置小節線長度
\override BarLine.bar-extent = #'(-0.25 . 2)
}
}
% 產生 MIDI 檔
% 這行不是必要的,可省略
% \midi {}
}