撥子 用 LilyPond 製作和弦譜 (適用吉他、烏克麗麗)

LilyPond和弦譜吉他烏克麗麗
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

說明

大部分彈奏吉他、烏克麗麗的樂友會從網路上找現成的和弦譜來用。不過,總是有自己製作和弦譜的機會。本文說明如何使用 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 {}
}
關於作者

撥子為資訊碩士及音樂愛好者,曾學習中阮、烏克麗麗、吉他、鋼琴等樂器。

除了對音樂的愛好,撥子喜歡黑咖啡和日本料理,會簡單的日文,有時會閱讀,有時會自助旅行。