= Набор гитарных нот в !LilyPond =
{{{
#!html
О чём этот урок
Сам нотный текст
Пальцы левой руки
Обозначения позиций
Номера струн
Совмещение обозначения струн с обозначением позиций
Чего я не стал делать
Примечания
}}}
{{{
#!html
}}}
== О чём этот урок ==
{{{
#!html
}}}
В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции.
В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых простые вещи программа делает сама тем способом, который разработчики сочли нужным, а сложные вещи сделать вообще нельзя, !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам замысловатым: изощрённость исходника вполне пропорциональна нетривиальности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень удобное средство нотного набора.
В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так:
[[Image(Agafoshin189-source.jpeg)]]
Несмотря на техническую простоту самого музыкального фрагмента, для набора эти ноты не так просты — обычно аппликатуру так подробно не расписывают.
{{{
#!html
}}}
== Сам нотный текст ==
{{{
#!html
}}}
Наберём сами ноты. Это несложно, надо только обратить внимание на направление штилей в третьем такте и вид некоторых тактовых черт:
{{{
\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 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{}
}
}}}
Должно получиться что-то примерно такое:
[[Image(Agafoshin189-initial.png)]]
{{{
#!html
}}}
== Пальцы левой руки ==
{{{
#!html
}}}
Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца:
{{{
...
One = \new Voice {\relative c'' {
\voiceOne
a16-2 h-4 cis-1 d-2 e-4 fis-1 g-2 a-4
h8-4 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 "|."
}}
...
}}}
Выглядеть это станет вот так:
[[Image(Agafoshin189-left-fingers.png)]]
{{{
#!html
}}}
== Обозначения позиций ==
{{{
#!html
}}}
Теперь добавим обозначения позиции. Так как мы хотим, чтобы, как и в книжке, с которой мы набираем, после обозначения позиции вдоль нот тянулся пунктир, нам придётся изменить стандартное значение одного из полей объекта {{{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 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 "|."
...
}}
}}}
А на выходе получится вот что:
[[Image(Agafoshin189-positions.png)]]
{{{
#!html
}}}
== Номера струн ==
{{{
#!html
}}}
{{{
#!html
Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слеш1:
}}}
{{{
...
...
}}}
А вот с обозначениями струн, которые захватывают несколько нот, всё несколько хитрее. На данный момент (октябрь 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 }
#})
}}}
Чтобы воспользоваться им, надо там, где начинается обозначение струны, дать команду {{{\stringNumberSpanner "3"}}}, а после первой ноты в группе поставить команду {{{\startTextSpan}}}. Окончание группы отмечается командой {{{\stopTextSpan}}}.
Добавим обозначения струн в первых двух тактах (про третий и четвёртый такты у нас будет отдельный разговор):
[[Image(Agafoshin189-without-string-lines.png)]]
{{{
#!html
}}}
== Совмещение обозначения струн с обозначением позиций ==
{{{
#!html
}}}
Дальше будет чуть веселее. Добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта {{{TextSpanner}}}, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так:
{{{
% Some stuff is duplicated here
<< {
\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
} \\ {
\stemDown
\textSpannerDown
16
\stringNumberSpanner "2"
a\startTextSpan
fis
\stopTextSpan
\stringNumberSpanner "3"
e\startTextSpan dis
\stopTextSpan
dis
\stringNumberSpanner "4"
h\startTextSpan
\stemUp
c a
\stopTextSpan
\stringNumberSpanner "5"
fis\startTextSpan e dis fis dis
\stopTextSpan
} >>
}}}
Компилируя этот кусок, !LilyPond будет выдавать предупреждения, и это правильно — как правило, ноты накладываются друг на друга из-за ошибки пользователя, и об этом действительно надо предупреждать. Мы-то как раз дублируем ноты сознательно, однако сейчас и правда кое-что пошло не так. У нас получилось вот что:
[[Image(Agafoshin189-with-string-lines.png)]]
Там, где струна указана для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.
[[Image(Agafoshin189-collisions.png)]]
К счастью, в !LilyPond есть средство исправить эту проблему автоматически. Для этого надо дать команду {{{\override StringNumber #'add-stem-support = ##t}}}.
[[Image(Agafoshin189-stem-support.png)]]
Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания штилей и к номерам пальцев в первом аккорде с помощью команды {{{\override Fingering #'add-stem-support = ##t}}}.
Вот что получается в итоге:
[[Image(Agafoshin189.png)]]
Вы можете скачать получившийся [http://guitar-school.homelinux.org:8000/attachment/wiki/lessons/LilyPondGuitar/Agafoshin189.ly исходник].
{{{
#!html
}}}
== Чего я не стал делать ==
{{{
#!html
}}}
Теперь ноты выглядят почти так же, как и в книжке, за исключением нескольких мелочей:
* в первом такте обозначения струн вынесены с нотоносца; мне кажется, выбранный наборщиками бумажной книжки вариант некрасив и не очень читаем;
* нет захлёстывания обозначений струн в первом такте, поскольку оно очевидно противоречит здравому смыслу (оно предполагало бы извлечение одной и той же ноты на двух соседних струнах одним и тем же пальцем);
* на границе первого и второго такта глиссандо поставлено между нотами, а не между обозначениями аппликатуры; это можно поменять, но в данном случае непонятно, зачем;
* номера струн возле аккорда во втором такте расставлены с разных сторон; расстановку их слева можно было бы задать с помощью команды {{{\set stringNumberOrientations = #'(left)}}}, но при выбранном шрифте это бы смотрелось не очень красиво. Однако, желающие поэкспериментировать с выравниванием и размером обозначений струн могут сделать это, вооружившись [http://lilypond.org/doc/v2.9/Documentation/user/lilypond-internals/StringNumber#StringNumber руководством по внутреннему устройству объекта StringNumber].
Я не стал здесь использовать обозначения пальцев правой руки — их нет у Агафошина, и это бы переусложнило и без того плотный нотный текст. Обозначения пальцев правой руки вводят, добавляя после ноты команду {{{\rightHandFinger}}}, аргумент которой — номер нужного пальца в фортепианных обозначениях. Часто удобно определить для команды {{{\rightHandFinger}}} какой-нибудь короткий синоним, скажем, {{{\RH}}}:
{{{
#(define RH rightHandFinger)
}}}
Кроме того, я не стал заканчивать уголком линии, обозначающие струну и позицию (как это делается, можно посмотреть [http://lilypond.org/doc/v2.13/Documentation/snippets/Fretted-strings#bar-chords-notation-for-guitar--with-text-spanner.ly в примере на сайте LilyPond]), поскольку этого не сделано в книжке.
Подробнее о гитарных обозначениях можно прочитать в [http://lilypond.org/doc/v2.12/Documentation/user/lilypond/Fretted-string-instruments официальном руководстве LilyPond].
{{{
#!html
}}}
== Примечания ==
{{{
#!html
}}}
{{{
#!html
1В настоящий момент (версия 2.12.1) LilyPond предполагает указание номеров струн только для аккордов. Если вам нужно указать номер струны для одиночной ноты, просто обозначьте её как аккорд (что и сделано в прилагаемом исходнике):
}}}
{{{
}}}
----
[wiki:LessonsFiles Назад в раздел "Учебные материалы"]
[wiki:WikiStart Назад на главную страницу]