Changes between Version 7 and Version 8 of lessons/LilyPondGuitar


Ignore:
Timestamp:
Oct 5, 2009, 1:24:40 AM (15 years ago)
Author:
uri
Comment:

Дописал

Legend:

Unmodified
Added
Removed
Modified
  • lessons/LilyPondGuitar

    v7 v8  
    1 '''Текст всё ещё дорабатывается, не стоит пока его использовать как руководство к действию =)'''
    2 
    31= Набор гитарных нот в !LilyPond =
    42
    53== О чём этот урок ==
    64
    7 В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции. В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так:
     5В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции.
     6
     7В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых господствует принцип "простые вещи нужно делать одним и тем же способом, сложные — никак", !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам пугающим: изощрённость исходника вполне пропорциональна сложности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень логично управляемое средство нотного набора. Впрочем, вполне возможно, что какие-то вещи из примера ниже можно было бы сделать проще и изящнее.
     8
     9В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так:
    810
    911[[Image(Agafoshin189-source.jpeg)]]
     
    126128}}}
    127129
    128 ~~А вот с обозначениями струн, которые захватывают несколько нот, всё несколько хитрее. На данный момент (октябрь 2009 года, я использую версию 2.12.1) в !LilyPond ещё не добавили для этого специальную команду, хотя такие разговоры ведутся. Поэтому нам придётся определить собственный макрос:~~
     130А вот с обозначениями струн, которые захватывают несколько нот, всё несколько хитрее. На данный момент (октябрь 2009 года, я использую версию 2.12.1) в !LilyPond ещё не добавили для этого специальную команду, хотя такие разговоры ведутся. Поэтому нам придётся определить собственный макрос:
    129131{{{
    130132stringNumberSpanner =
     
    139141}}}
    140142
    141 '''Текст всё ещё дорабатывается, не стоит пока его использовать как руководство к действию =)'''
     143Добавим обозначения струн в первых двух тактах (про третий и четвёртый такты у нас будет отдельный разговор):
     144
     145[[Image(Agafoshin189-without-string-lines.png)]]
     146
     147== Совмещение обозначения струн с обозначением позиций ==
     148
     149Дальше будет чуть веселее. Попытка добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта TextSpanner, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так:
     150
     151{{{
     152  % Some stuff is duplicated here
     153  << {
     154    \stemDown
     155    \textSpannerUp
     156    \override TextSpanner #'dash-period = #2
     157    \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
     158    \override TextSpanner #'(bound-details left text) = "VII "
     159    c'16-2\startTextSpan
     160    a-4 fis-1
     161    e-3 dis-2 fis-1 dis h-3
     162    \stemUp
     163    c-4\stopTextSpan a-1
     164    \override TextSpanner #'(bound-details left text) = "VI "
     165    fis-4\startTextSpan e-2 dis-1 fis-4 dis h-2\stopTextSpan
     166  } \\ {
     167    \stemDown
     168    \textSpannerDown
     169    <c'' \1>16
     170    \stringNumberSpanner "2"
     171    a\startTextSpan
     172    fis
     173    \stopTextSpan
     174    \stringNumberSpanner "3"
     175    e\startTextSpan dis
     176    \stopTextSpan
     177    <fis\2> dis
     178    \stringNumberSpanner "4"
     179    h\startTextSpan
     180    \stemUp
     181    c a
     182    \stopTextSpan
     183    \stringNumberSpanner "5"
     184    fis\startTextSpan e dis fis dis
     185    \stopTextSpan
     186    <h\6>
     187  } >>
     188}}}
     189
     190При компиляции этого куска !LilyPond будет выдавать предупреждения, и это хорошо — как правило, наложение нот друг на друга это результат ошибки, и пользователя действительно надо о нём предупреждать. Однако кое-что действительно пошло не так. У нас получилось вот что:
     191
     192[[Image(Agafoshin189-with-string-lines.png)]]
     193
     194Там, где струна указывается для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.
     195
     196[[Image(Agafoshin189-collisions.png)]]
     197
     198К счастью, в !LilyPond есть средство исправить эту проблему автоматически. Для этого надо дать команду {{{\override StringNumber #'add-stem-support = ##t}}}.
     199
     200== Чего я не стал делать ==
     201
     202Теперь ноты выглядят почти так же, как исходные, за исключением нескольких мелочей:
     203 * в первом такте линии, обозначающие границу группы нот, играемых на одной струне, вынесены с нотоносца; мне кажется, выбранный наборщиком вариант некрасив и не очень читаем;
     204 * на границе первого и второго такта глиссандо поставлено между нотами, а не между обозначениями аппликатуры; это можно поменять, но в данном случае непонятно, зачем;
     205 * номера струн возле аккорда во втором такте расставлены с разных сторон; расстановку их слева можно было бы задать с помощью команды {{{\set stringNumberOrientations = #'(left)}}}, но при выбранном шрифте это бы смотрелось не очень красиво. Но желающие поэкспериментировать с выравниванием и размером обозначений струн могут сделать это, вооружившись [http://http://lilypond.org/doc/v2.9/Documentation/user/lilypond-internals/StringNumber#StringNumber руководством по внутреннему устройству объекта StringNumber].
     206
     207Кроме того, я не стал заканчивать уголком линии, обозначающие струну и позицию, поскольку этого не сделано в исходных нотах.