Version 21 (modified by admin, 5 years ago) (diff) |
---|
Набор гитарных нот в LilyPond
О чём этот урокСам нотный текст
Пальцы левой руки
Обозначения позиций
Номера струн
Совмещение обозначения струн с обозначением позиций
Чего я не стал делать
Примечания
О чём этот урок
В этом уроке я расскажу, как можно добавлять к нотам обозначения гитарной аппликатуры: пальцы правой и левой руки, номера струн, позиции.
В отличие от средств нотного набора, устроенных по технологии WYSIWYG, в которых простые вещи программа делает сама тем способом, который разработчики сочли нужным, а сложные вещи сделать вообще нельзя, LilyPond реализует классический принцип: "простые вещи делать просто, сложные — возможно". Поэтому не пугайтесь, если в каких-то местах синтаксис покажется вам замысловатым: изощрённость исходника вполне пропорциональна нетривиальности решаемых задач. После того, как вы усвоите базовые принципы, вы поймёте, что LilyPond — это не только мощное, но и очень удобное средство нотного набора.
В качестве примера мы возьмём упражнение 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{} }
Должно получиться что-то примерно такое:
Пальцы левой руки
Теперь начнём добавлять аппликатурные обозначения. Начнём с самого простого — указания пальцев левой руки. Для этого достаточно после каждой ноты поставить дефис и номер пальца:
... 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 "|." }} ...
Выглядеть это станет вот так:
Обозначения позиций
Теперь добавим обозначения позиции. Так как мы хотим, чтобы, как и в книжке, с которой мы набираем, после обозначения позиции вдоль нот тянулся пунктир, нам придётся изменить стандартное значение одного из полей объекта 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 "|." ... }}
А на выходе получится вот что:
Номера струн
Добавить одиночные обозначения струн (там, где они указаны в книжке — к аккорду во втором такте) совсем несложно: для этого достаточно написать номер струны после ноты через обратный слеш1:... <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 } #})
Чтобы воспользоваться им, надо там, где начинается обозначение струны, дать команду \stringNumberSpanner "3", а после первой ноты в группе поставить команду \startTextSpan. Окончание группы отмечается командой \stopTextSpan.
Добавим обозначения струн в первых двух тактах (про третий и четвёртый такты у нас будет отдельный разговор):
Совмещение обозначения струн с обозначением позиций
Дальше будет чуть веселее. Добавить растянутые на несколько нот обозначения струн "в лоб" нам не удастся: и ноты, и позиции мы обозначаем с помощью объекта 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 <c'' \1>16 \stringNumberSpanner "2" a\startTextSpan fis \stopTextSpan \stringNumberSpanner "3" e\startTextSpan dis \stopTextSpan <fis\2> dis \stringNumberSpanner "4" h\startTextSpan \stemUp c a \stopTextSpan \stringNumberSpanner "5" fis\startTextSpan e dis fis dis \stopTextSpan <h\6> } >>
Компилируя этот кусок, LilyPond будет выдавать предупреждения, и это правильно — как правило, ноты накладываются друг на друга из-за ошибки пользователя, и об этом действительно надо предупреждать. Мы-то как раз дублируем ноты сознательно, однако сейчас и правда кое-что пошло не так. У нас получилось вот что:
Там, где струна указана для одиночной ноты, номера струн наехали на номера пальцев. Но это легко исправить, явно задав, где именно надо располагать номера струн с помощью команды \set stringNumberOrientations = #'(down). Теперь всё почти хорошо. Осталась единственная крупная проблема: в двух местах номера струн наезжают на нотные штили.
К счастью, в LilyPond есть средство исправить эту проблему автоматически. Для этого надо дать команду \override StringNumber #'add-stem-support = ##t.
Во втором такте обозначения левой руки тоже пересекаются со штилями нот. Это не очень красиво, добавим поддержку отслеживания штилей и к номерам пальцев в первом аккорде с помощью команды \override Fingering #'add-stem-support = ##t.
Вот что получается в итоге:
Вы можете скачать получившийся исходник.
Чего я не стал делать
Теперь ноты выглядят почти так же, как и в книжке, за исключением нескольких мелочей:
- в первом такте обозначения струн вынесены с нотоносца; мне кажется, выбранный наборщиками бумажной книжки вариант некрасив и не очень читаем;
- нет захлёстывания обозначений струн в первом такте, поскольку оно очевидно противоречит здравому смыслу (оно предполагало бы извлечение одной и той же ноты на двух соседних струнах одним и тем же пальцем);
- на границе первого и второго такта глиссандо поставлено между нотами, а не между обозначениями аппликатуры; это можно поменять, но в данном случае непонятно, зачем;
- номера струн возле аккорда во втором такте расставлены с разных сторон; расстановку их слева можно было бы задать с помощью команды \set stringNumberOrientations = #'(left), но при выбранном шрифте это бы смотрелось не очень красиво. Однако, желающие поэкспериментировать с выравниванием и размером обозначений струн могут сделать это, вооружившись руководством по внутреннему устройству объекта StringNumber.
Я не стал здесь использовать обозначения пальцев правой руки — их нет у Агафошина, и это бы переусложнило и без того плотный нотный текст. Обозначения пальцев правой руки вводят, добавляя после ноты команду \rightHandFinger, аргумент которой — номер нужного пальца в фортепианных обозначениях. Часто удобно определить для команды \rightHandFinger какой-нибудь короткий синоним, скажем, \RH:
#(define RH rightHandFinger)
Кроме того, я не стал заканчивать уголком линии, обозначающие струну и позицию (как это делается, можно посмотреть в примере на сайте LilyPond), поскольку этого не сделано в книжке.
Подробнее о гитарных обозначениях можно прочитать в официальном руководстве LilyPond.
Примечания
1В настоящий момент (версия 2.12.1) LilyPond предполагает указание номеров струн только для аккордов. Если вам нужно указать номер струны для одиночной ноты, просто обозначьте её как аккорд (что и сделано в прилагаемом исходнике]):<fis\2>
Attachments (10)
-
Agafoshin189-source.jpeg
(25.3 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- исходные ноты в книжке
-
Agafoshin189-initial.png
(11.9 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- сам нотный текст
-
Agafoshin189-left-fingers.png
(13.9 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлены обозначения пальцев левой руки
-
Agafoshin189-positions.png
(21.5 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлены обозначения позиций
-
Agafoshin189-without-string-lines.png
(15.6 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлены одиночные обозначения струн
-
Agafoshin189-with-string-lines.png
(15.5 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлены обозначения струн для групп нот
-
Agafoshin189-collisions.png
(19.5 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлены обозначения струн в третьем и четвёртом тактах
-
Agafoshin189.png
(19.2 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- добавлен готовый нотный пример
-
Agafoshin189-stem-support.png
(16.9 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- обозначения струн больше не наезжают на нотные штили
-
Agafoshin189.ly
(2.3 KB) -
added by uri 15 years ago.
Агафошин, пример 189 --- исходник
Download all attachments as: .zip