撥子 用 LilyPond 撰寫刷弦的 TAB 譜 (適用吉他、烏克麗麗)

LilyPondTAB節奏吉他烏克麗麗
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

說明

我們在先前的文章已經說明過如何用 LilyPond 製作 TAB 譜。然而,那篇文章的 TAB 譜著重在彈奏單音。對吉他、烏克麗麗來說,刷弦是家常便飯。所以本文繼續討論製作 TAB 譜的話題,但會著重在刷弦上。

關鍵指令

LilyPond 用來製作刷弦譜的指令如下:

% 模擬刷弦 (Strumming) 的 LilyPond 代碼
% 當成固定的樣板來套用即可
\new Voice \with {
    \consists "Pitch_squash_engraver"
} {
    \improvisationOn
    % 此處不是寫入原來的旋律,而是利用單音寫入節奏
    c4\downbow c8\downbow c8~\upbow c8~ c8\upbow c8\downbow c8\upbow
}

與其試著一行行去理解指令,倒不如把這段程式碼直接當模板來套用即可。反正少了其中一行,做出來的圖就會怪怪的,所以整段複製貼上即可。

根據上述範例做出來的刷弦圖如下:

用 strum-pattern 製作刷弦圖表

一定會有樂友覺得這圖有點奇怪,跟巿面上吉他教材的刷弦圖不太一樣。撥子當時也費了一番心力在漫漫網海上搜尋,一時半刻也找不出比這段模板更好用的 LilyPond 指令。如果真的很介意的話,這個部分就用別的軟體製作吧。

完整程式碼

承上節,我們根據該模板寫出完整的範例,讓樂友可以參考現成的代碼,依此改出自己所需的圖表。

刷弦的範例代碼

以下範例模擬吉他長刷:

% 模擬吉他刷弦


% 指定 LilyPond 相容版本
\version "2.22.1"

% 設置樂譜大小
#(set-global-staff-size 28)

% 裁切多餘的空白
% 製作 PNG 圖檔時會用到
#(ly:set-option 'crop #t)

piece = {
    % 把刷弦還原成原本在音樂上的意義
    % 即同時撥奏多根琴弦
    <e, c\5 e\4 g c'\2 e'>4                         <e, c\5 e\4 g c'\2 e'>8 <e, c\5 e\4 g c'\2 e'>8
    <e, c\5 e\4 g c'\2 e'>8 <e, c\5 e\4 g c'\2 e'>8 <e, c\5 e\4 g c'\2 e'>8 <e, c\5 e\4 g c'\2 e'>8
}

% 製作樂譜
\score {
    <<
    % 記錄和弦名稱
    \new ChordNames {
        \chordmode {
            c1
        }
    }

    % 模擬刷弦 (Strumming) 的 LilyPond 代碼
    % 當成固定的樣板來套用即可
    \new Voice \with {
        \consists "Pitch_squash_engraver"
    } {
        \improvisationOn
        % 此處不是寫入原來的旋律,而是利用單音寫入節奏
        c4\downbow c8\downbow c8~\upbow c8~ c8\upbow c8\downbow c8\upbow
    }

    % 製作 TAB 譜
    \new TabStaff {
        % 預設定弦即為吉他定弦
        % 不需再指定

        \time 4/4
        \piece
    }
    >>

    % 設置樂譜版面
    \layout {}
}

沒做過這種圖表的樂友,一開始可能會想不出來怎麼在樂譜上表達刷弦。其實就是把刷弦還原成在音樂上的意義即可,即同時撥動多根琴弦。

根據這段程式碼排出來的圖表如下:

用 LilyPond 模擬吉他長刷

雖然跟巿面上吉他教材的圖表有些差異,但上半部看刷奏方向,下半部看指法,應該還算看得懂。

以下範例則模擬吉他短刷:

% 模擬吉他刷弦


% 指定 LilyPond 相容版本
\version "2.22.1"

% 設置樂譜大小
#(set-global-staff-size 28)

% 裁切多餘的空白
% 製作 PNG 圖檔時會用到
#(ly:set-option 'crop #t)

piece = {
    % 把刷弦還原成原本在音樂上的意義
    % 即同時撥奏多根琴弦
    <e, c\5 e\4>4               <e, c\5 e\4>4
    <g\3 c'\2 e'>8 <g\3 c'\2 e'>8 <g\3 c'\2 e'>8 <g\3 c'\2 e'>8
}

\score {
    <<
    \new ChordNames {
        \chordmode {
            c1
        }
    }

    \new Voice \with {
        \consists "Pitch_squash_engraver"
    } {
        \improvisationOn
        c4\downbow c4\downbow c8\downbow c8\upbow c8\downbow c8\upbow
    }

    \new TabStaff {
        \time 4/4
        \piece
    }
    >>

    \layout {}
}

短刷在音樂上的意義為僅撥動部分琴弦,將其寫成相對應的 LilyPond 代碼即可。

根據這段程式碼排出來的圖表如下:

用 LilyPond 模擬吉他短刷

指彈的範例代碼

除了刷弦以外,指彈也是另一種常見的吉他演奏模式。以下是吉他指彈的範例代碼:

% 模擬吉他指彈


\version "2.22.1"

#(set-global-staff-size 28)

#(ly:set-option 'crop #t)

piece = {
                            % 把指彈還原成原本在音樂上的意義
                            % 即同時撥奏多根琴弦
    \repeat unfold 2 { c8\5 <g\3 c'\2 e'>8 e8\4 <g\3 c'\2 e'>8 }
}

\score {
    <<
    \new ChordNames {
        \chordmode {
            c1
        }
    }

    \new Voice \with {
        \consists "Pitch_squash_engraver"
    } {
        \improvisationOn
                           % 指彈沒有方向性,所以這裡沒有加入技法
        \repeat unfold 8 { c8 }
    }

    \new TabStaff {
        \time 4/4
        \piece
    }
    >>

    \layout {}
}

這段程式碼排出來的圖表如下:

用 LilyPond 模擬吉他指彈

由於這裡使用指彈,所以不會提示刷弦方向。但會保留上半部的譜,用來觀察指彈的節奏。

使用烏克麗麗的情境

先前的範例圖表皆是針對吉他。這裡提供一個烏克麗麗刷弦的範例代碼:

% 模擬烏克麗麗刷弦


\version "2.22.1"

#(set-global-staff-size 28)

#(ly:set-option 'crop #t)

piece = {
    % 把刷弦還原成原本在音樂上的意義
    % 即同時撥奏多根琴弦
    <g' c'\3 e'\2 c''>4 <g' c'\3 e'\2 c''>8 <g' c'\3 e'\2 c''>8 <g' c'\3 e'\2 c''>8 <g' c'\3 e'\2 c''>8
}

\score {
    <<
    \new ChordNames {
        \chordmode {
            c1
        }
    }

    \new Voice \with {
        \consists "Pitch_squash_engraver"
    } {
        \improvisationOn
        c4\downbow c8\downbow c8\upbow c8\downbow c8\upbow
    }

    \new TabStaff \with {
        % 指定使用烏克麗麗定弦
        stringTunings = #ukulele-tuning
    } {
        \time 3/4
        \piece
    }
    >>

    \layout {}
}

LilyPond 的 TAB 譜模式採用的預設定弦即為吉他標準定弦,這是因為吉他比其他彈撥樂器來得普及。當使用吉他特殊定弦或其他彈撥樂器時要修改定弦才能製做出相對應的 TAB 譜。

前述範例排出來的圖表如下:

用 LilyPond 模擬烏克麗麗刷弦

免費小工具

透過前面數個範例,我們已經知道如何製做刷弦圖表。然而,重覆製作多個類似的圖表仍是一件重覆性高的任務。

有鑑於此,撥子寫了個命令列小工具。透過這個小程式,可以快速地製作所需的刷奏圖表,不必手動撰寫 LilyPond 代碼。

如果會用 Git 的話,使用 Git 拷貝該專案到本地端:

$ git clone https://github.com/fourstringmate/strum-pattern.git

將此專案移動到合適的位置,設置好 PATH 環境變數即可使用。如果不會用 Git,下載 ZIP 檔解壓縮也可以。

該程式需要系統上安裝 LilyPondRuby 才能使用。這裡不需要寫程式,這些開發工具只是拿來跑程式的。

使用該程式的指令如下:

$ strum-pattern D-DU-_U-DU

打完指令後,會在工作目錄產生 D-DU-_U-DU.png ,該圖檔即為刷弦圖表。製作出來的圖表長這樣:

用 strum-pattern 製作刷弦圖表

樂友可以注意到,TAB 譜的部分省略掉了。因為刷奏的重點是右手的模式,去掉 TAB 譜代表該圖表在不同彈撥樂器間皆通用。

有些刷弦或指彈模式需要搭配 TAB 譜。這個小工具也可以產生 LilyPond 代碼。樂友可以根據該程式產出的代碼,再修改成自己所需要的圖表。

對於複雜的刷弦或指彈模式,寫成指令的話會造成指令過長。太困難的指令實用性很低,所以我們沒有做出那樣的功能。所以我們保留產生 LilyPond 代碼的功能,給樂友一些彈性。

該程式在背景利用暫時檔案 (temporary file) 產生 LilyPond 命令稿,所以不會覆蓋使用者的檔案,也不會在工作目錄留下多餘的檔案。

我們是音樂網站,不是程式設計網站。這裡不講解工具程式的程式碼。有興趣的樂友可以自行到專案頁面追蹤程式碼。

關於作者

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

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