3.5.5 MIDI での音の強弱を制御する

MIDI での音の強弱は Dynamic_performer – これはデフォルトでは Voice コンテキストの中に存在します – によって実装されます。MIDI 全体のボリューム、強弱記号による相対ボリューム、楽器間の相対ボリュームを制御することができます。


強弱記号

強弱記号は利用可能な MIDI ボリューム レンジ内のある固定の分数に翻訳されます。デフォルトでの分数の範囲は、ppppp に対する 0.25 から、fffff に対する 0.95 までです。強弱記号とそれに対応する分数のセットを ‘../scm/midi.scm’ から調べることができます – その他の情報源 を参照してください。引数として強弱記号をとり、それに対する分数を返す関数を作成し、その関数を Score.dynamicAbsoluteVolumeFunction にセットすることによって、分数のセットを変更あるいは拡張することができます。

例えば、rinforzando 強弱記号 – \rfz – を使う必要がある場合、この強弱記号はデフォルト セットの中に含まれていないため、MIDI ボリュームに影響を与えません。同様に make-dynamic-script で新しい強弱記号を定義した場合、その強弱記号もデフォルト セットには含まれません。以下の例は、そのような強弱記号に対する MIDI ボリュームを追加する方法を示しています。Scheme 関数は、rfz の強弱記号があった場合は分数に 0.9 をセットし、そうでない場合はデフォルトの関数を呼び出します。

#(define (myDynamics dynamic)
    (if (equal? dynamic "rfz")
      0.9
      (default-dynamic-absolute-volume dynamic)))

\score {
  \new Staff {
    \set Staff.midiInstrument = #"cello"
    \set Score.dynamicAbsoluteVolumeFunction = #myDynamics
    \new Voice {
       \relative c'' {
         a\pp b c-\rfz
       }
    }
  }
  \layout {}
  \midi {}
}

[image of music]

こうする代わりに、分数テーブル全体を再定義する必要がある場合、‘../scm/midi.scm’ の中にある default-dynamic-absolute-volume プロシージャとそのモデルとなる関連テーブルを使用する方が良いでしょう。このセクションの最後の例で、その方法を示しています。


MIDI 全体でのボリューム

強弱記号に対する MIDI 全体の最小ボリュームと最大ボリュームは Score レベルでプロパティ midiMinimumVolumemidiMaximumVolume を設定することで制御できます。これらのプロパティは強弱記号に対してのみ効果を発揮します。そのため、楽譜の開始からそれらのプロパティを適用するには、楽譜の開始点に強弱記号を置く必要があります。各強弱記号に対応する分数は以下の式で算出されます:

midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction

以下の例では、MIDI 全体のボリュームの範囲は 0.2 - 0.5 の範囲に制限されています。

\score {
  <<
    \new Staff {
      \key g \major
      \time 2/2
      \set Staff.midiInstrument = #"flute"
      \new Voice \relative c''' {
        r2 g\mp g fis ~
        fis4 g8 fis e2 ~
        e4 d8 cis d2
      }
    }
    \new Staff {
      \key g \major
      \set Staff.midiInstrument = #"clarinet"
      \new Voice \relative c'' {
        b1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout { }
  \midi {
    \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment 72 2)
      midiMinimumVolume = #0.2
      midiMaximumVolume = #0.5
    }
  }
}

[image of music]


楽器の音の強さを均一化する (i)

Staff コンテキストの中で最小 MIDI ボリューム プロパティと最大 MIDI ボリューム プロパティが設定されている場合、MIDI 楽器間の相対ボリュームを制御することができます。これは基本的な楽器イコライザであり、MIDI 出力の品質を著しく高めることができます。

以下の例では、クラリネットのボリュームはフルートのボリュームよりも相対的に低く設定されています。これを正しく機能させるには、それぞれの楽器の最初の音符に強弱記号を置く必要があります。

\score {
  <<
    \new Staff {
      \key g \major
      \time 2/2
      \set Staff.midiInstrument = #"flute"
      \set Staff.midiMinimumVolume = #0.7
      \set Staff.midiMaximumVolume = #0.9
      \new Voice \relative c''' {
        r2 g\mp g fis ~
        fis4 g8 fis e2 ~
        e4 d8 cis d2
      }
    }
    \new Staff {
      \key g \major
      \set Staff.midiInstrument = #"clarinet"
      \set Staff.midiMinimumVolume = #0.3
      \set Staff.midiMaximumVolume = #0.6
      \new Voice \relative c'' {
        b1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout { }
  \midi {
    \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment 72 2)
    }
  }
}

[image of music]


楽器の音の強さを均一化する (ii)

MIDI 最小/最大ボリューム プロパティが設定されていない場合、デフォルトでは、LilyPond はいくつかの楽器に軽度の均一化を適用します。適用を受ける楽器とその equalization は ‘../scm/midi.scm’ の中にあるテーブル instrument-equalizer-alist に示されています。

引数として MIDI 楽器名だけを受け入れて、その楽器に適用する最小/最大ボリュームの分数ペアを返す Scheme プロシージャを Score コンテキストの中にある instrumentEqualizer にセットすることで、この基本的なデフォルト イコライザを置き換えることができます。この置き換えは、このセクションの始めでの dynamicAbsoluteVolumeFunction の再設定の方法とまったく同じです。‘../scm/midi.scm’ の中にあるデフォルト イコライザ default-instrument-equalizer はそのようなプロシージャをどのように記述するのかを示しています。

以下の例は、フルートとクラリネットの相対ボリュームを前の例と同じ値にセットしています。

#(define my-instrument-equalizer-alist '())

#(set! my-instrument-equalizer-alist
  (append
    '(
      ("flute" . (0.7 . 0.9))
      ("clarinet" . (0.3 . 0.6)))
    my-instrument-equalizer-alist))

#(define (my-instrument-equalizer s)
  (let ((entry (assoc s my-instrument-equalizer-alist)))
    (if entry
      (cdr entry))))

\score {
  <<
    \new Staff {
      \key g \major
      \time 2/2
      \set Score.instrumentEqualizer = #my-instrument-equalizer
      \set Staff.midiInstrument = #"flute"
      \new Voice \relative c''' {
        r2 g\mp g fis ~
        fis4 g8 fis e2 ~
        e4 d8 cis d2
      }
    }
    \new Staff {
      \key g \major
      \set Staff.midiInstrument = #"clarinet"
      \new Voice \relative c'' {
        b1\p a2. b8 a
        g2. fis8 e
        fis2 r
      }
    }
  >>
  \layout { }
  \midi {
    \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment 72 2)
    }
  }
}

[image of music]


他の言語: English, deutsch, español

LilyPond — 記譜法リファレンス

inserted by FC2 system