Changes between Version 12 and Version 13 of lessons/LilyPondGuitar


Ignore:
Timestamp:
Oct 5, 2009, 3:04:56 AM (15 years ago)
Author:
uri
Comment:

Поправил опечатки, добавил навигацию

Legend:

Unmodified
Added
Removed
Modified
  • lessons/LilyPondGuitar

    v12 v13  
    55В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции.
    66
    7 В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых господствует принцип "простые вещи нужно делать одним и тем же способом, сложные — никак", !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам пугающим: изощрённость исходника вполне пропорциональна сложности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень логично управляемое средство нотного набора. Впрочем, вполне возможно, что какие-то вещи из примера ниже можно было бы сделать проще и изящнее.
     7В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых простые вещи программа делает сама тем способом, который разработчики сочли нужным, а сложные вещи сделать вообще нельзя, !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам сложноватым: изощрённость исходника вполне пропорциональна нетривиальности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень удобное средство нотного набора.
    88
    99В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так:
    1010
    1111[[Image(Agafoshin189-source.jpeg)]]
     12
     13Несмотря на техническую простоту самого музыкального фрагмента, для набора эти ноты не так просты — обычно аппликатуру так подробно не расписывают.
    1214
    1315== Сам нотный текст ==
     
    6365== Пальцы левой руки ==
    6466
    65 Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца, вот так:
     67Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца:
    6668
    6769{{{
     
    8789== Обозначения позиций ==
    8890
    89 Теперь добавим обозначения позиции. Так как мы хотим, чтобы (как и в исходных нотах, набранных вручную) вдоль нот, которые надо играть в указанной позиции, тянулся пунктир, нам придётся переопределить стандартное значение переменной {{{TextSpanner}}}. Делается это совсем просто: там, где нужно расположить указание позиции, даём команду {{{\override TextSpanner #'(bound-details left text) = "II "}}}, где {{{II}}} — это номер нужной позиции; после ноты, с которой должен начинаться пунктир, даём команду {{{\startTextSpan}}}, а после ноты, на которой пунктир должен закончиться — команду {{{\stopTextSpan}}}.
     91Теперь добавим обозначения позиции. Так как мы хотим, чтобы, как и в книжке, с которой мы набираем, после обозначения позиции вдоль нот тянулся пунктир, нам придётся изменить стандартное значение одного из полей объекта {{{TextSpanner}}}. Делается это совсем просто: перед указанием номера позиции даём команду {{{\override TextSpanner #'(bound-details left text) = "II "}}}, где {{{II}}} — это номер нужной позиции; после ноты, с которой должен начинаться пунктир, даём команду {{{\startTextSpan}}}, а после ноты, на которой пунктир должен закончиться — команду {{{\stopTextSpan}}}.
    9092
    9193Пунктир, предлагаемый !LilyPond по умолчанию, показался мне крупноватым, и я сделал его более мелким командой {{{\override TextSpanner #'dash-period = #2}}}. Кроме того, в книжке он выровнен вертикально по центру римской цифры, обозначающей позицию; добиться того же в !LilyPond можно командой {{{\override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER}}}.
    9294
    93 В результате соответствующий фрагмент исходника приобретает следующий вид:
     95В результате соответствующий фрагмент исходника станет выглядеть так:
    9496{{{
    9597...
     
    115117}}}
    116118
    117 В результате получается вот что:
     119А на выходе получится вот что:
    118120
    119121[[Image(Agafoshin189-positions.png)]]
     
    121123== Номера струн ==
    122124
    123 Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слэш:
     125Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слеш:
    124126{{{
    125127...
     
    141143}}}
    142144
     145Чтобы воспользоваться им, надо там, где начинается обозначение струны, дать команду {{{\stringNumberSpanner "3"}}}, а после первой ноты в группе поставить команду {{{\startTextSpan}}}. Окончание группы отмечается командой {{{\stopTextSpan}}}.
     146
    143147Добавим обозначения струн в первых двух тактах (про третий и четвёртый такты у нас будет отдельный разговор):
    144148
     
    147151== Совмещение обозначения струн с обозначением позиций ==
    148152
    149 Дальше будет чуть веселее. Попытка добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта TextSpanner, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так:
     153Дальше будет чуть веселее. Добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта {{{TextSpanner}}}, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так:
    150154
    151155{{{
     
    188192}}}
    189193
    190 При компиляции этого куска !LilyPond будет выдавать предупреждения, и это хорошо — как правило, наложение нот друг на друга это результат ошибки, и пользователя действительно надо о нём предупреждать. Однако кое-что действительно пошло не так. У нас получилось вот что:
     194Компилируя этот кусок, !LilyPond будет выдавать предупреждения, и это правильно — как правило, ноты накладываются друг на друга из-за ошибки пользователя, и об этом действительно надо предупреждать. Мы-то как раз дублируем ноты сознательно, однако сейчас и правда кое-что пошло не так. У нас получилось вот что:
    191195
    192196[[Image(Agafoshin189-with-string-lines.png)]]
    193197
    194 Там, где струна указывается для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.
     198Там, где струна указана для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.
    195199
    196200[[Image(Agafoshin189-collisions.png)]]
     
    200204[[Image(Agafoshin189-stem-support.png)]]
    201205
    202 Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания стилей и к первому аккорду с помощью команды {{{\override Fingering #'add-stem-support = ##t}}}.
     206Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания штилей и к номерам пальцев в первом аккорде с помощью команды {{{\override Fingering #'add-stem-support = ##t}}}.
    203207
    204208Вот что получается в итоге:
     
    211215
    212216Теперь ноты выглядят почти так же, как исходные, за исключением нескольких мелочей:
    213  * в первом такте линии, обозначающие границу группы нот, играемых на одной струне, вынесены с нотоносца; мне кажется, выбранный наборщиком вариант некрасив и не очень читаем;
     217 * в первом такте обозначения струн вынесены с нотоносца; мне кажется, выбранный наборщиками бумажной книжки вариант некрасив и не очень читаем;
    214218 * на границе первого и второго такта глиссандо поставлено между нотами, а не между обозначениями аппликатуры; это можно поменять, но в данном случае непонятно, зачем;
    215  * номера струн возле аккорда во втором такте расставлены с разных сторон; расстановку их слева можно было бы задать с помощью команды {{{\set stringNumberOrientations = #'(left)}}}, но при выбранном шрифте это бы смотрелось не очень красиво. Но желающие поэкспериментировать с выравниванием и размером обозначений струн могут сделать это, вооружившись [http://http://lilypond.org/doc/v2.9/Documentation/user/lilypond-internals/StringNumber#StringNumber руководством по внутреннему устройству объекта StringNumber].
    216 
    217 Кроме того, я не стал заканчивать уголком линии, обозначающие струну и позицию (как это делается, можно посмотреть [http://lilypond.org/doc/v2.13/Documentation/snippets/Fretted-strings#bar-chords-notation-for-guitar--with-text-spanner.ly вот в этом примере]), поскольку этого не сделано в исходных нотах.
     219 * номера струн возле аккорда во втором такте расставлены с разных сторон; расстановку их слева можно было бы задать с помощью команды {{{\set stringNumberOrientations = #'(left)}}}, но при выбранном шрифте это бы смотрелось не очень красиво. Однако, желающие поэкспериментировать с выравниванием и размером обозначений струн могут сделать это, вооружившись [http://lilypond.org/doc/v2.9/Documentation/user/lilypond-internals/StringNumber#StringNumber руководством по внутреннему устройству объекта StringNumber].
     220
     221Кроме того, я не стал заканчивать уголком линии, обозначающие струну и позицию (как это делается, можно посмотреть [http://lilypond.org/doc/v2.13/Documentation/snippets/Fretted-strings#bar-chords-notation-for-guitar--with-text-spanner.ly в примере на сайте LilyPond]), поскольку этого не сделано в книжке.
     222
     223----
     224
     225[wiki:LessonsFiles Назад в раздел "Учебные материалы"]
     226
     227[wiki:WikiStart Назад на главную страницу]