Changes between Version 12 and Version 13 of lessons/LilyPondGuitar
- Timestamp:
- Oct 5, 2009, 3:04:56 AM (15 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
lessons/LilyPondGuitar
v12 v13 5 5 В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции. 6 6 7 В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых господствует принцип "простые вещи нужно делать одним и тем же способом, сложные — никак", !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам пугающим: изощрённость исходника вполне пропорциональна сложности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень логично управляемое средство нотного набора. Впрочем, вполне возможно, что какие-то вещи из примера ниже можно было бы сделать проще и изящнее.7 В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых простые вещи программа делает сама тем способом, который разработчики сочли нужным, а сложные вещи сделать вообще нельзя, !LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам сложноватым: изощрённость исходника вполне пропорциональна нетривиальности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что !LilyPond — это не только мощное, но и очень удобное средство нотного набора. 8 8 9 9 В качестве примера мы возьмём упражнение 189 из классического учебника Петра Спиридоновича Агафошина "Школа игры на шестиструнной гитаре". В учебнике ноты выглядят вот так: 10 10 11 11 [[Image(Agafoshin189-source.jpeg)]] 12 13 Несмотря на техническую простоту самого музыкального фрагмента, для набора эти ноты не так просты — обычно аппликатуру так подробно не расписывают. 12 14 13 15 == Сам нотный текст == … … 63 65 == Пальцы левой руки == 64 66 65 Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца , вот так:67 Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца: 66 68 67 69 {{{ … … 87 89 == Обозначения позиций == 88 90 89 Теперь добавим обозначения позиции. Так как мы хотим, чтобы (как и в исходных нотах, набранных вручную) вдоль нот, которые надо играть в указанной позиции, тянулся пунктир, нам придётся переопределить стандартное значение переменной {{{TextSpanner}}}. Делается это совсем просто: там, где нужно расположить указание позиции,даём команду {{{\override TextSpanner #'(bound-details left text) = "II "}}}, где {{{II}}} — это номер нужной позиции; после ноты, с которой должен начинаться пунктир, даём команду {{{\startTextSpan}}}, а после ноты, на которой пунктир должен закончиться — команду {{{\stopTextSpan}}}.91 Теперь добавим обозначения позиции. Так как мы хотим, чтобы, как и в книжке, с которой мы набираем, после обозначения позиции вдоль нот тянулся пунктир, нам придётся изменить стандартное значение одного из полей объекта {{{TextSpanner}}}. Делается это совсем просто: перед указанием номера позиции даём команду {{{\override TextSpanner #'(bound-details left text) = "II "}}}, где {{{II}}} — это номер нужной позиции; после ноты, с которой должен начинаться пунктир, даём команду {{{\startTextSpan}}}, а после ноты, на которой пунктир должен закончиться — команду {{{\stopTextSpan}}}. 90 92 91 93 Пунктир, предлагаемый !LilyPond по умолчанию, показался мне крупноватым, и я сделал его более мелким командой {{{\override TextSpanner #'dash-period = #2}}}. Кроме того, в книжке он выровнен вертикально по центру римской цифры, обозначающей позицию; добиться того же в !LilyPond можно командой {{{\override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER}}}. 92 94 93 В результате соответствующий фрагмент исходника приобретает следующий вид:95 В результате соответствующий фрагмент исходника станет выглядеть так: 94 96 {{{ 95 97 ... … … 115 117 }}} 116 118 117 В результате получается вот что:119 А на выходе получится вот что: 118 120 119 121 [[Image(Agafoshin189-positions.png)]] … … 121 123 == Номера струн == 122 124 123 Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный сл эш:125 Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слеш: 124 126 {{{ 125 127 ... … … 141 143 }}} 142 144 145 Чтобы воспользоваться им, надо там, где начинается обозначение струны, дать команду {{{\stringNumberSpanner "3"}}}, а после первой ноты в группе поставить команду {{{\startTextSpan}}}. Окончание группы отмечается командой {{{\stopTextSpan}}}. 146 143 147 Добавим обозначения струн в первых двух тактах (про третий и четвёртый такты у нас будет отдельный разговор): 144 148 … … 147 151 == Совмещение обозначения струн с обозначением позиций == 148 152 149 Дальше будет чуть веселее. Попытка добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта TextSpanner, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так:153 Дальше будет чуть веселее. Добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта {{{TextSpanner}}}, который только один на каждый голос. Поэтому нам придётся создать два отображения третьего и четвёртого тактов, к одному из которых мы подпишем обозначения струн, а к другому — обозначения пальцев левой руки. Соответствующий фрагмент исходника станет выглядеть так: 150 154 151 155 {{{ … … 188 192 }}} 189 193 190 При компиляции этого куска !LilyPond будет выдавать предупреждения, и это хорошо — как правило, наложение нот друг на друга это результат ошибки, и пользователя действительно надо о нём предупреждать. Однако кое-что действительно пошло не так. У нас получилось вот что:194 Компилируя этот кусок, !LilyPond будет выдавать предупреждения, и это правильно — как правило, ноты накладываются друг на друга из-за ошибки пользователя, и об этом действительно надо предупреждать. Мы-то как раз дублируем ноты сознательно, однако сейчас и правда кое-что пошло не так. У нас получилось вот что: 191 195 192 196 [[Image(Agafoshin189-with-string-lines.png)]] 193 197 194 Там, где струна указ ываетсядля одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.198 Там, где струна указана для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды {{{\set stringNumberOrientations = #'(down)}}}. Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили. 195 199 196 200 [[Image(Agafoshin189-collisions.png)]] … … 200 204 [[Image(Agafoshin189-stem-support.png)]] 201 205 202 Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания стилей и к первому аккордус помощью команды {{{\override Fingering #'add-stem-support = ##t}}}.206 Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания штилей и к номерам пальцев в первом аккорде с помощью команды {{{\override Fingering #'add-stem-support = ##t}}}. 203 207 204 208 Вот что получается в итоге: … … 211 215 212 216 Теперь ноты выглядят почти так же, как исходные, за исключением нескольких мелочей: 213 * в первом такте линии, обозначающие границу группы нот, играемых на одной струне, вынесены с нотоносца; мне кажется, выбранный наборщикомвариант некрасив и не очень читаем;217 * в первом такте обозначения струн вынесены с нотоносца; мне кажется, выбранный наборщиками бумажной книжки вариант некрасив и не очень читаем; 214 218 * на границе первого и второго такта глиссандо поставлено между нотами, а не между обозначениями аппликатуры; это можно поменять, но в данном случае непонятно, зачем; 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 Назад на главную страницу]