Kame(b)の音楽にまつわる何か

Kame(b)の主に音楽にまつわる適当なことを記します。

Moment's Noticeの楽譜を書く(6)

リズムを追加します。五線の上と下の両方にリズムを書けるようにテンプレート化。でも、そのせいで上下の間隔が変になることがあるので、例えば下側しか書かないなら上側に関係する記載は削除またはコメントアウトするのが良さげですね。具体的には、\Scoreの中の\new RhythmicStaff \with {ごにょごにょ}を削除またはコメントアウトすればOK。

あとmyCodaとかmyMarkですが微調整を簡単にするための文章を入れています(現在はコメントアウト中)。必要に応じてコメント化を解除して弄ります。

面倒なのでコンパイル後の画像は省略!リハーサルマークBやCと、1括弧や2括弧の線の関係が気に食わないですが、面倒なのでこの曲に関してはひとまずこれで完成かな。

\version "2.19.83"

#(set-global-staff-size 24)

\include "incld/lilyjazz.ily"
\include "incld/jazzchords.ily"
\include "incld/jazzextras.ily"

myToCoda = {
  \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup {\fontsize #3 "to" \raise #1.4 
                 \fontsize #-3 \musicglyph #"scripts.coda" }
}

myCoda = {
  %\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.coda"}
}

mySegno = {
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.segno"}
}

myMark =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    %\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
    %\once \override Score.RehearsalMark.X-offset = #-3
    \mark \markup {\rounded-box \fontsize #1 #reharthalText }
  #})


myMarkWithSegno =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    %\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
    %\once \override Score.RehearsalMark.X-offset = #-3
    \mark \markup {\fontsize #-3 \musicglyph #"scripts.segno"
                   \raise #-1.4 \rounded-box \fontsize #2 #reharthalText }
  #})


\header {
  title =  \markup {\fontsize #3 "Moment's Notice"}
  composer = \markup {\fontsize #3 "John Coltrane"}
  meter = \markup {\fontsize #3 "Swing"}
  tagline = ""
  copyright = ""
}

\paper {
  indent = 0
  left-margin = 15\mm
}

myMelody = \relative c'' {
  \clef treble
  \key ees \major
  \time 4/4

  \myMark "Intro"
  r8 g4. g4-. g-. | g4. f8 g f r bes~ | bes1 | R | \break
  r8 f4. f4-. f-. | f4. ees8 f ees r aes~ | aes1 | g2 f | \break
  ees1 | c' | bes2 g | ees f| \break
  g2 ees | f4. ees8 d ees f g | \bar "||"

  ees1 | f | g | f| \break
  ees2 f | g f | ees4 r r2 | R1 | \break

  \myMarkWithSegno "A"
  \repeat volta 2 {
    r8 g4. g4-. r8 g~ | g4 g-. r8 g-. r4 | r8 g4. aes4-. bes-. | bes4. aes8~ aes2 | \break
    r8 f4. f4-. r8 f~ | f4 f-. r8 f-. r4 | r8 f4. g4-. aes-. |  g2 f |  \bar "||" \break
  }
  \alternative {
    {
      \myMark "B"
      ees1 | c' | bes2 g | ees f | \break
      r4 g aes2 | bes2 ces4. des8 ~ | des4. bes8 ges ees ges ees~ | ees4. f8~ f4 r | \break
    }
    {
      \myMark "C"
      ees1 | c' | bes2 g | ees f |  \break
      g2 ees | ees f | \bar "||"
    }
  }

  \myMark "D"
  ees1 | f | g | f | \myToCoda \break
  ees2 f | g f | ees4 r r2 | R1_"D.S. al Coda." \bar "||" \break
  
  \myCoda
  ees2 f | g f | ges1\fermata | R1 \bar "|."
  
}


myHarmonies = \chordmode {  
  e2:min7 a:7 | f:m7 bes:7 |ees1:maj7 |aes2:min7 des:7 |
  d2:min7 g:7 | ees:m7 aes:7 | des1:maj7 | d2:min7.5- g:7 |
  c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
  g2:7 c:7 | f:min7 bes:7 |
  ees1/bes | f:min/bes | g:min/bes | f:min/bes | ees2/bes f:min/bes | g:min/bes f:min/bes | ees1 | R1 |

  \repeat volta 2 {
    e2:min7 a:7 | f:m7 bes:7 |ees1:maj7 |aes2:min7 des:7 |
    d2:min7 g:7 | ees:m7 aes:7 | des1:maj7 | d2:min7.5- g:7 |
  }
  \alternative {
    {
      c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
      g1:min7 | aes2:m7 des:7 | ges1:maj7 | f2:min7 bes:7 |
    }
    {
      c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
      g2:min7 c:7 | f:min7 bes:7|    
    }
  }  

  ees1/bes | f:min/bes | g:min/bes | f:min/bes |
  ees2/bes f:min/bes | g:min/bes f:min/bes | ees1 | R1 |

  ees2/bes f:min/bes | g:min/bes f:min/bes | ees1:9+ | R1 |
}

myUpperRhythm = {
  s1*14
  r8 c8 r4 c2 | r8 c8 r4 c2 | r8 c8 r4 c2 | r8 c8 r4 c2 |
  r4 c4 r4 c4 | r4 c4 r4 c4 | c4 s2.| s1
  s1*8
  s1*8
  s1*6
  r8 c8 r4 c2 | r8 c8 r4 c2 | r8 c8 r4 c2 | r8 c8 r4 c2 |
  r4 c4 r4 c4 | r4 c4 r4 c4 | c4 s2.| s1
  r8 c8 r4 c2
  r8 c8 r4 c2
}

myLowerRhythm = {
}


\score {
  <<
    %コード
    \new ChordNames {
      \myHarmonies
    }
    %譜の上に記載するリズム
    \new RhythmicStaff  \with{      %リズム譜をベースにする
      \remove "Time_signature_engraver"     %拍子記号を消す
      \remove "Staff_symbol_engraver"       %譜の線を消す
      \override VerticalAxisGroup.staff-staff-spacing.padding = #0.5    %下の譜との間隔を小さく
      \override NoteHead.style = #'slash    %符頭はリズム用のマーク
      \override Stem.length = #2.5      %符幹を短く
      fontSize = #-6                %音符小さく
    }{
      \myUpperRhythm                %リズム本体(上記参照)
    }
    %譜本体
    \new Staff \with {
      \override VerticalAxisGroup.staff-staff-spacing.padding = #0.5    %下の譜との間隔を小さく
    }{
      \new Voice  {
         \myMelody              %音符本体(上記参照)
      }
    }
    %譜の下に記載するリズム
    \new RhythmicStaff  \with{      %リズム譜をベースにする
      \remove "Time_signature_engraver"     %拍子記号を消す
      \remove "Staff_symbol_engraver"       %譜の線を消す
      \override VerticalAxisGroup.staff-staff-spacing.padding = #0.5    %下の譜との間隔を小さく
      \override NoteHead.style = #'slash    %符頭はリズム用のマーク
      \override Stem.length = #2.5      %符幹を短く
      fontSize = #-6                %音符小さく
      \override Stem.direction = #down      %符幹は下向き
    }{
      \myLowerRhythm                %リズム本体(上記参照)
    }
  >>
  
  \layout {
    \override Score.BarNumber.break-visibility = #all-invisible %小節番号を消す
    \override Score.Clef.break-visibility = #all-invisible      %2段目以降音部記号を消す
    \override Score.KeySignature.break-visibility = #all-invisible  %2段目以降調性記号を消す
    \override Score.SystemStartBar.collapse-height = #1     %左端の縦線を書く
    
    \set Score.startRepeatType = "[|:"      %リピートの開始マークは、髭付き
    \set Score.endRepeatType = ":|]"        %リピートの終了マークは、髭付き
    \set Score.doubleRepeatType = ":|][|:"  %リピートの開始・終了が隣り合うところも、髭付き
  }
}

LilyPondをバージョンアップする

LilyPondの公式サイトを見たら、開発版の新しいバージョン(2.19.83)がリリースされていましたので、バージョンアップしてみます。

公式サイトの開発版ダウンロードページからダウンロード。2.19.83-1のWindows版を選択する。

ダウンロードしたファイルを開きインストーラを実行してみたら、まず古いバージョンを消せと怒られたので、Windowsの通常の機能でLilyPondをアンインストールします。アンインストール後のファイル状況を確認したところ、インストールしたLilyJAZZのフォントファイルは残っていました。

気を取り直して、ダウンロードしたファイルを開きインストーラを実行してインストール。インストール後のファイル状況を確認したところ、インストールしたLilyJAZZのフォントファイルは残っていました。ですので、LilyJAZZの再インストールは不要ですね。

Frescobaldiをインストールした際に.lyファイルの関連付け先がFrescobaldiに変更されていましたが、今回のLilyPondのバージョンアップにより関連付け先がLilyPondに戻ってしまいました。そこで、再度Frescobaldiに関連付けをします。やり方は、以下のとおり。

  1. まず、適当な.lyファイルの上でマウス右クリックして「プログラムから開く」→「別のプログラムを選択」を選択
  2. 「常にこのアプリを使って.lyファイルを開く」のチェックを入れておく
  3. 「その他のアプリ」→「このPCで別のアプリを探す」を選択。するとファイル選択用のダイアログが開きます。
  4. 「C:\Program Files (x86)\Frescobaldi」の中にあるfrescobaldi.exeを選択する。

Frescobaldiでは特に作業は必要ないようです。

早速、Moment's Noticeの楽譜冒頭のバージョン番号を変えてコンパイルしてみましたが、見た目は変わってないですね。つか、バージョンアップでの変更点が知りたいのですが、どこに情報があるか分からない。。。まぁおそらくは細かいバグ取りでしょう。

Moment's Noticeの楽譜を書く(5)

さらに整えます。

タイトルと作曲者とリズムの文字をもうちょい大きくする

こんな感じで。

\header {
  title =  \markup {\fontsize #3 "Moment's Notice"}
  composer = \markup {\fontsize #3 "John Coltrane"}
  meter = \markup {\fontsize #3 "Swing"}
  tagline = ""
  copyright = ""
}
コーダを書く

コーダを書き忘れてました。コーダの音符やリズムは通常どおり書きます。そしてリハーサルマークとして、Toコーダと、コーダマークを書きます。LilyJazzを適用したLilyPondの標準だとサイズ等がフィットしないので、myToCodamyCodaという2つのオリジナルのマークを定義します。

myToCoda = {
  \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup {\fontsize #3 "to" \raise #1.4 
                  \fontsize #-3 \musicglyph #"scripts.coda" }
}

myCoda = {
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.coda"}
}

そして、譜面コードの中で\myToCoda\myCodaと指定します。

リハーサルマークももうちょい大きくする

リハサールマークをもうちょい大きくします。こな感じで書けばOKです。

\mark \markup {\box \fontsize #1 "A"}

でも、毎回これを書くのは面倒なので、オリジナルのコマンドを定義します。ついでに、ボックス囲みを、角が丸いタイプに変更します。

myMark =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    \mark \markup {\rounded-box \fontsize #1 #reharthalText }
  #})

このコマンドを使うには、譜面コードの中で\myMark "A"と書きます。

セーニョマークを書く

Codaマークと同様に以下のオリジナルのマークを定義します。

mySegno = {
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.segno"}
}

使い方は、譜面コードの中で\mySegnoと指定します。

多くの場合、セーニョマークはリハーサルマークと位置が重なりますが、\mySegno \myMark "B"のように書いても、後者は無視されちゃいます。そこで、セーニョマーク付きのリハーサルマークのコマンドを新たに定義します。

myMarkWithSegno =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    \mark \markup {\fontsize #-3 \musicglyph #"scripts.segno"
                   \raise #-1.4 \rounded-box \fontsize #2 #reharthalText }
  #})

このコマンドを使うには、譜面コードの中で\myMarkwithSegno "A"と書きます。

ところで、セーニョマーク→リハーサルマークの順番が一般的なんですよね?

ダルセーニョを書く

これは、譜面の音符や休符の後ろに_"D.S. al Coda."のように書きます。なお、ToCodaは5線の上に書くけど、D.S.は5線の下に書く、という流儀でやってます。

まとめる

今までのところをまとめると、以下のようなソースコード(MomentsNotice_v4.ly)になります。ついでに一部コード間違えていたところを修正。

\version "2.19.82"

#(set-global-staff-size 24)

\include "incld/lilyjazz.ily"
\include "incld/jazzchords.ily"
\include "incld/jazzextras.ily"

myToCoda = {
  \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup {\fontsize #3 "to" \raise #1.4 
                  \fontsize #-3 \musicglyph #"scripts.coda" }
}

myCoda = {
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.coda"}
}

mySegno = {
  \mark \markup { \fontsize #-3 \musicglyph #"scripts.segno"}
}

myMark =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    \mark \markup {\rounded-box \fontsize #1 #reharthalText }
  #})


myMarkWithSegno =
#(define-music-function
  (reharthalText)
  (markup?)
  #{
    \mark \markup {\fontsize #-3 \musicglyph #"scripts.segno"
                   \raise #-1.4 \rounded-box \fontsize #2 #reharthalText }
  #})


\header {
  title =  \markup {\fontsize #3 "Moment's Notice"}
  composer = \markup {\fontsize #3 "John Coltrane"}
  meter = \markup {\fontsize #3 "Swing"}
  tagline = ""
  copyright = ""
}

\paper {
  indent = 0
}

myMelody = \relative c'' {
  \clef treble
  \key ees \major
  \time 4/4

  \myMark "Intro"
  r8 g4. g4-. g-. | g4. f8 g f r bes~ | bes1 | R | \break
  r8 f4. f4-. f-. | f4. ees8 f ees r aes~ | aes1 | g2 f | \break
  ees1 | c' | bes2 g | ees f| \break
  g2 ees | f4. ees8 d ees f g | \bar "||"

  ees1 | f | g | f| \break
  ees2 f | g f | ees4 r r2 | R1 | \break

  \myMarkWithSegno "A"
  \repeat volta 2 {
    r8 g4. g4-. r8 g~ | g4 g-. r8 g-. r4 | r8 g4. aes4-. bes-. | bes4. aes8~ aes2 | \break
    r8 f4. f4-. r8 f~ | f4 f-. r8 f-. r4 | r8 f4. g4-. aes-. |  g2 f |  \bar "||" \break
  }
  \alternative {
    {
      \myMark "B"
      ees1 | c' | bes2 g | ees f | \break
      r4 g aes2 | bes2 ces4. des8 ~ | des4. bes8 ges ees ges ees~ | ees4. f8~ f4 r | \break
    }
    {
      \myMark "C"
      ees1 | c' | bes2 g | ees f |  \break
      g2 ees | ees f | \bar "||"
    }
  }

  \myMark "D"
  ees1 | f | g | f | \myToCoda \break
  ees2 f | g f | ees4 r r2 | R1_"D.S. al Coda." \bar "||" \break
  
  \myCoda
  ees2 f | g f | ges1 | R1 \bar "|."
  
}


myHarmonies = \chordmode {  
  e2:min7 a:7 | f:m7 bes:7 |ees1:maj7 |aes2:min7 des:7 |
  d2:min7 g:7 | ees:m7 aes:7 | des1:maj7 | d2:min7.5- g:7 |
  c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
  g2:7 c:7 | f:min7 bes:7 |
  ees1/bes | f:min/bes | g:min/bes | f:min/bes | ees2/bes f:min/bes | g:min/bes f:min/bes | ees1 | R1 |

  \repeat volta 2 {
    e2:min7 a:7 | f:m7 bes:7 |ees1:maj7 |aes2:min7 des:7 |
    d2:min7 g:7 | ees:m7 aes:7 | des1:maj7 | d2:min7.5- g:7 |
  }
  \alternative {
    {
      c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
      g1:min7 | aes2:m7 des:7 | ges1:maj7 | f2:min7 bes:7 |
    }
    {
      c1:min7 | bes2:m7 ees:7 | aes1:maj7 |des:7 |
      g2:min7 c:7 | f:min7 bes:7|    
    }
  }  

  ees1/bes | f:min/bes | g:min/bes | f:min/bes |
  ees2/bes f:min/bes | g:min/bes f:min/bes | ees1 | R1 |

  ees2/bes f:min/bes | g:min/bes f:min/bes | ees1:9+ | R1 |
}


\score {
  <<
    \new ChordNames {
      \myHarmonies
    }
    \new Voice  {
      \myMelody
    }
  >>
  \layout {
    \override Score.BarNumber.break-visibility = #all-invisible
    \override Score.Clef.break-visibility = #all-invisible
    \override Score.KeySignature.break-visibility = #all-invisible
    \override Score.SystemStartBar.collapse-height = #1
    
    \set Score.startRepeatType = "[|:"
    \set Score.endRepeatType = ":|]"
    \set Score.doubleRepeatType = ":|][|:"
  }
}

これをコンパイルすると以下のようになりました。

f:id:kamebass:20190325231941p:plain
Mometnt's Notice 楽譜ver.4 (page 1)
f:id:kamebass:20190325232033p:plain
Mometnt's Notice 楽譜ver.4 (page 2)

リハーサルマークBやCと、1括弧や2括弧の線の関係が気に食わないですね~。これは、他の要素(リズム指定など)を追加した後に検討します。