wiki:lessons/LilyPondGuitar

Version 6 (modified by uri, 15 years ago) (diff)

Доделывать пока не буду

Набор гитарных нот в LilyPond

О чём этот урок

В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции. В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так:

Агафошин, пример 189 --- исходные ноты в книжке

Сам нотный текст

Наберём сами ноты. Это несложно, надо только обратить внимание на направление штилей в третьем такте и вид некоторых тактовых черт:

\version "2.12.1"

% European system (A B H C D E F G)
\include "deutsch.ly"

global = {
  \key d \major
  \time 2/4
}

One = \new Voice {\relative c'' {
  \voiceOne
  a16 h cis d e fis g a
  h8 <d, fis a> <d fis a> r
  \bar "||"
  \stemDown
  c'16 a fis e dis fis dis h
  \stemUp
  c a fis e dis fis dis h
  \bar "|."
}}

Two = \new Voice {\relative c' {
  \voiceTwo
  a4 a
  d2.
}}

\score {
  \new Staff
  <<
    \global
    \One
    \\
    \Two
  >>
  \layout{}
  \midi{}
}

Должно получиться что-то примерно такое:

Агафошин, пример 189 --- сам нотный текст

Пальцы левой руки

Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца, вот так:

...
One = \new Voice {\relative c'' {
  \voiceOne
  a16-2 h-4 cis-1 d-2 e-4 fis-1 g-2 a-4
  h8-4 <d,-3 fis-2 a-1> <d fis a> r
  \bar "||"
  \stemDown
  c'16-2 a-4 fis-1 e-3 dis-2 fis-1 dis h-3
  \stemUp
  c-4 a-1 fis-4 e-2 dis-1 fis-4 dis h-2
  \bar "|."
}}
...

Выглядеть это станет вот так:

Агафошин, пример 189 --- добавлены обозначения пальцев левой руки

Обозначения позиций

Теперь добавим обозначения позиции. Так как мы хотим, чтобы (как и в исходных нотах, набранных вручную) вдоль нот, которые надо играть в указанной позиции, тянулся пунктир, нам придётся переопределить стандартное значение переменной TextSpanner. Делается это совсем просто: там, где нужно расположить указание позиции, даём команду \override TextSpanner #'(bound-details left text) = "II ", где II — это номер нужной позиции; после ноты, с которой должен начинаться пунктир, даём команду \startTextSpan, а после ноты, на которой пунктир должен закончиться — команду \stopTextSpan.

Пунктир, предлагаемый LilyPond по умолчанию, показался мне крупноватым, и я сделал его более мелким командой \override TextSpanner #'dash-period = #2. Кроме того, в книжке он выровнен вертикально по центру римской цифры, обозначающей позицию; добиться того же в LilyPond можно командой \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER.

В результате соответствующий фрагмент исходника приобретает следующий вид:

...
One = \new Voice {\relative c'' {
  \voiceOne
  a16-2 h-4 cis-1 d-2 e-4 fis-1 g-2 a-4
  h8-4 <d,-3 fis-2 a-1> <d fis a> r
  \bar "||"
  \stemDown
  \textSpannerUp
  \override TextSpanner #'dash-period = #2
  \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
  \override TextSpanner #'(bound-details left text) = "VII "
  c'16-2\startTextSpan a-4 fis-1 e-3 dis-2 fis-1 dis h-3
  \stemUp
  c-4\stopTextSpan a-1
  \override TextSpanner #'(bound-details left text) = "VI "
  fis-4\startTextSpan e-2 dis-1 fis-4 dis h-2\stopTextSpan
  \bar "|."
...
}}

В результате получается вот что:

Агафошин, пример 189 --- добавлены обозначения позиций

Номера струн

Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слэш:

...
<d\4 fis\3 a\2>
...

А вот с обозначениями струн, которые захватывают несколько нот, всё несколько хитрее. На данный момент (октябрь 2009 года, я использую версию 2.12.1) в LilyPond ещё не добавили для этого специальную команду, хотя такие разговоры ведутся. Поэтому нам придётся определить собственный макрос:

stringNumberSpanner =
#(define-music-function (parser location StringNumber) (string?)
  #{
    \override TextSpanner #'style = #'dashed-line
    \override TextSpanner #'dash-period = #1
    \override TextSpanner #'font-size = #-5
    \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
    \override TextSpanner #'(bound-details left text) = \markup { \circle \number $StringNumber }
  #})

*Текст всё ещё дорабатывается, не стоит пока его использовать как руководство к действию =)*

Attachments (10)

Download all attachments as: .zip