Нотный редактор GNU LilyPond: музыка, стирающая границы

Дата публикации:28.05.2012
Twitter Facebook Vkontakte

Имя французского тифлопедагога Луи Брайля тесно ассоциируется с рельефно-точичным шрифтом, причём далеко не только у людей, имеющих непосредственное отношение к незрячим. Однако далеко не всем известно, что месье Брайль был не только тифлопедагогом, но и довольно неплохим музыкантом и играл на пианино и органе. Вследствие этого он является автором не только тактильной версии простых текстовых символов, но и основ брайлевской нотной грамоты.

Музыка, как одно из направлений профессиональной деятельности, довольно распространена среди незрячих и слабовидящих людей, но главным из ограничений, встречающихся на этом пути, является работа с партитурами, а именно невозможность комфортного прочтения напечатанного нотного текста, а также сложность подготовки подобного текста самим незрячим. Существование тактильной нотописи является значительным подспорьем незрячим музыкантам, но, к сожалению, она не может решить множество проблем, возникающих при профессиональной деятельности, предполагающей работу с большим числом партитур, к тому же в кооперации со зрячими коллегами.

Данный материал посвящён обзору одной из современных компьютерных технологий, которая поможет незрячим музыкантам освоить самостоятельное чтение и написание партитур на профессиональном уровне и без труда сотрудничать со зрячими коллегами по цеху. Творческим личностям, не обладающим техническим складом ума, изложенная информация может показаться на первый взгляд слишком сложной, но ещё выдающийся немецкий математик Готфрид Лейбниц сказал «Die Musik ist eine verborgene arithmetische Übung der Seele…» (музыка есть бессознательное упражнение души в арифметике… — нем.), поэтому надеемся, что возможно в чём-то сложные технические аспекты не станут для заинтересованных читателей такими уж непривычными категориями и непреодолимыми препятствиями.

Проект LilyPond зародился в 1996 году, когда два голландских программиста и музыканта — валторнист Хан-Вен Нинхуис (нидер. Han-Wen Nienhuys) и скрипач Ян Ньюенхайзен (нидер. Jan Nieuwenhuizen), будучи неудовлетворёнными ранее использовавшейся ими технологией MusiXTeX PreProcessor, решили создать собственный нотный редактор, ну а в 1998 году в свет вышла первая его стабильная версия.

С тех пор GNU LilyPond стал одним из распространённых и динамически развивающихся нотных редакторов, который используется многими профессиональными музыкантами и интегрирован в ряд других программных продуктов. На момент написания этого обзора, его последними версиями являются стабильный релиз 2.14.2 от 25 мая 2011 года и предварительный релиз 2.15.38 от 4 мая 2012 года.

Редактор преимущественно написан на языке программирования C++ с привлечением Python и Scheme, а также разметочных языков, таких как PostScript, SVG, TeX и некоторых других. Он распространяется бесплатно и существует на английском, венгерском, голландском, испанском, итальянском, немецком, французском и японском языках, а лицензируется по GNU GPL, что обуславливает открытость его исходного кода. Также отметим, что некоторые считают, что GNU LilyPond, в строгом смысле, не редактор, а скорей engraver (гравёр — англ.), но мы не будем здесь погружаться в такие терминологические глубины.

Изначально GNU LilyPond создавался под среду GNU/Linux, что и обусловило первую часть его названия, а также определённую адаптированность для работы в редакторе Emacs, но также существуют его полнофункциональные версии под такие операционные системы как Microsoft Windows и Apple Mac OS X.

В классическом виде он не имеет графического интерфейса и представляет собой консольное приложение, которое и обрабатывает исходный текст партитуры, хотя существуют визуальные нотные системы и текстовые редакторы, поддерживающие работу с синтаксисом LilyPond и облегчающие данный процесс.

Важно отметить, что GNU LilyPond не является каким-то эскапистским решением именно для незрячих и слабовидящих с упрощённым функционалом. Это абсолютно профессиональный инструмент, применяющийся огромным числом обычных музыкантов и на ровне конкурирующий с такими коммерческими аналогами как Finale или Sibelius.

Принципы работы с этим нотным редактором в целом напоминают программирование:

  1. На первом этапе в любом редакторе создаётся простой текстовый файл в кодировке UTF-8 и с расширением .ly, где по особым правилам пользователем записывается исходный текст партитуры.
  2. Далее программой осуществляется парсинг исходного текста с преобразованием его в промежуточный файл формата PostScript. На этом этапе компилятор проверяет возможные ошибки, при наличии которых записывает их в LOG-файл.
  3. На завершающем этапе GNU LilyPond создаёт конечный файл партитуры в одном из распространённых форматов, например, PDF или PNG. Кроме того, есть возможность на выходе получить файл MIDI, хотя работа LilyPond с данным форматом далеко не безупречна.

Таким образом, работа не сопряжена с использованием каких-либо графических сред и предполагает лишь набор обычного текста в произвольном редакторе и его компиляцию посредством консольного приложения, что делает GNU LilyPond абсолютно доступным для пользователей даже с полным отсутствием зрения.

Поскольку GNU LilyPond не использует принцип WYSIWYG, то есть What You See Is What You Get (что видишь, то и получишь — англ.), то незрячий пользователь также оказывается ограждён от возможных ошибок визуального форматирования, которые довольно распространены в ситуации использования графических редакторов. Компилятор автоматически, без участия пользователя, определяет оптимальное расположение элементов партитуры, таких как расстояние между нотными знаками или число тактов в строке. Тем не менее, при необходимости, всё это может быть и явно задано в исходном тексте.

Автоматическое форматирование графического документа осуществляется в четыре условных этапа:

  1. На основе длительности выбираются эластичные пробелы, формирующие равномерность распределения нотных знаков в строке.
  2. Проверяются все возможные комбинации переноса строк, и для каждого рассчитывается так называемый показатель badness (неточность — англ.), являющийся степенью отклонения размещения символа от идеального случая.
  3. Оценивается высота каждой системы, для оптимизации вертикального позиционирования нотных блоков.
  4. Подбираются такие разрывы страниц, которые обеспечивают оптимальный вариант растягивания вертикальных и горизонтальных промежутков.

В итоге на выходе пользователь, без серьёзных усилий со своей стороны, получает хорошо форматированную нотную страницу, к тому же стилизованную под традиционные шрифты XIX века, например, витиеватый скрипичный ключ и прочие завитушки, тогда как те же Finale или Sibelius используют аскетичное современное типографское начертание.

То есть овладев языком разметки LilyPond, пользователь сможет создавать высококачественные нотные тексты практически любого уровня сложности — от простых одноголосных мелодий до больших оркестровых партитур, к тому же с возможностью быстро изменять содержимое файла, просто редактируя текст. Ну и, конечно, ещё одним не маловажным преимуществом владения разметкой LilyPond является то, что даже незрячий человек сможет прочитать нотный текст, получив его LY-исходник. Помимо этого, GNU LilyPond имеет в своём составе различные утилиты для конвертации других форматов нотных записей в LY-файл, да и в Интернете существуют целые библиотеки партитур в данном формате.

Таким образом, в конечном счёте, всё упирается лишь в необходимость освоения языка разметки LilyPond, что, к сожалению, нельзя назвать тривиальной задачей. Однако сам по себе язык не требует от человека каких-то предварительных знаний по программированию, а лишь наличие элементарного логического мышления, по большому счёту, являясь не более сложным, чем сама нотная грамота.

Разметка LilyPond — это своеобразный язык декодирования музыки, использующий специальные выражения. Он имеет иерархичную структуру, где музыкальные выражения верхнего уровня представляются более простыми выражениями, и на самом низком уровне находятся отдельные ноты и паузы.

Ниже будут рассмотрены несколько примеров языка разметки LilyPond, чтобы составить представление о его общих принципах.

Гамма до-мажор записывается следующим образом:

{ c d e f g a b c }

Фигурные скобки в LilyPond объединяют ноты одной музыкальной фразы.

Та же гамма, но на октаву выше базовой записывается так:

{ c' d' e' f' g' a' b' c' }

Однако запись можно упростить, указав октаву, относительно которой будет играться последующая фраза:

\relative c' { c d e f g a b c }

Апострофы повышают октаву, что логически объясняется их внешним видом — запятая вверху строки. Не трудно догадаться, что понижается октава обычной запятой, располагающейся внизу строки:

\relative c, { c d e f g a b c }

Со знака обратного слеша («\») начинаются различные директивы LilyPond и обращения к объявленным пользователем переменным.

Обозначение ноты до в порядке уменьшения её длительности (от целой до тридцать второй) записывается так:

{ c1 c2 c4 c8 c16 c32 }

Если же длительность явно не указана, то используется длительность предыдущей ноты. Две нижеследующие фразы идентичны:

{ c'4 e'4 g'4 }
{ c'4 e' g' }

Аналогичным образом, через обычный текст, задаются и аккорды, знаки артикуляции, лиги, нотные станы и прочие элементы нотной грамоты, которые дают возможность набора музыкального текста любой сложности.

Ниже будет приведён элементарный пример партитуры, которая вполне готова к тому, чтобы быть отправленной на компиляцию в графический документ. Набранный в ней музыкальный текст вполне осмысленен, поэтому читатель может проверить, насколько хорошо он усвоил вышеприведённые примеры разметки LilyPond, попытавшись распознать эту мелодию с нотного листа.

\version "2.14.2"
\paper {
#(set-paper-size "a4")
}
\header {
title = "Угадай мелодию от Тифлокомпа"
}
\relative c' {
e8 c e c
f e d4
g,8 g g a16 b
c8 c c4
e8 c e c
f e d4
g,8 g g a16 b
c8 c c4
}

Безусловно, подобный метод набора нот довольно трудоёмок. Опытные пользователи набирают за час в среднем около трёх с половиной страниц одноголосной музыки, пользуясь одним лишь текстовым редактором. Это время включает в себя исправление возможных ошибок и незначительную настройку отображения. Очевидно и то, что музыкальные отрывки с усложнёнными конструкциями, например, связанные нотные станы или коллизии, будут вводится дольше монофонических мелодий. Однако во многом производительность пользователя зависит от его навыков и опыта, так что если не всё, то очень многое в его собственных руках.

К тому же язык LilyPond имеет дополнительный функционал, близкий по смыслу к программированию, используя который, опытный пользователь может оптимизировать свою работу. В частности, есть возможность создавать переменные, присваивая им в качестве значения музыкальные фразы, а потом просто указывать вызов данной переменной, вместо того, чтобы заново переписывать всю фразу.

В приведённом выше примере партитуры можно заметить, что мелодия повторяется дважды. Тем не менее, вместо того, чтобы писать её ещё раз, можно реализовать повтор через двойной вызов переменной.

(Со знака процента («%») до конца строки идут комментарии, которые игнорируются компилятором.)

% Создаём переменную, содержащую фразу куплета
couplet = \relative c' {
e8 c e c
f e d4
g,8 g g a16 b
c8 c c4
}
% Записываем фразу, состоящую из двух куплетов
{ \couplet \couplet }

Помимо этого, для более удобного структурирования партитура LilyPond может быть разбита на несколько файлов, в каждом из которых будет содержаться какая-то отдельная её часть, а в основном файле будут лишь директивы добавления этих файлов. При подобной конфигурации, достаточно будет скомандовать компиляцию лишь для главного файла, а интеграцию содержимого прикреплённых файлов GNU LilyPond выполнит самостоятельно.

Если упустить некоторые аспекты возможной кастомизации GNU LilyPond и общей рабочей среды, то для создания партитуры требуется следующий минимальный алгоритм действий:

  1. С официального сайта проекта www.lilypond.org скачивается и устанавливается дистрибутив для одной из поддерживаемых операционных систем.
  2. Посредством идущего в комплекте LilyPad или любого другого текстового редактора создаётся файл в кодировке UTF-8 и с расширением .ly, в который и записывается текст партитуры на языке LilyPond.
  3. После завершения редактирования LY-файла он компилируется в PDF-документ терминальной командой
    lilypond file.ly
    При этом для удобства желательно добавить адрес к рабочей директории LilyPond (…\LilyPond\usr\bin\) в переменную путей поиска Path.

Это наиболее общий и универсальный алгоритм действий. Однако далеко не единственно возможный.

В частности, в контекстном меню LY-файлов можно найти два пункта: «Generate PDF», запускающий компиляцию в PDF-документ, и «Edit source», открывающий файл для редактирования в LilyPad. Кроме того, процессом компиляции GNU LilyPond можно управлять посредством ключей командной строки, например, сохранение в PNG-файл задаётся расширенной терминальной командой:

lilypond --png file.ly

Однако некоторые параметры следует прописывать непосредственно в LY-файле, используя встроенные функции. В частности, это относится к конвертации в формат MIDI, для чего требуется к нотам мелодии добавить директиву \midi и заключить весь этот текст в общую директиву \score. После этого, при компиляции партитура будет сохраняться не в графический документ, а в MID-файл.

Для тех, кому не удалось из исходного нотного текста распознать мелодию из примера выше, рассмотрим способ её конвертации в формат MIDI, чтобы сделать это уже на слух.

В целом процесс аналогичен. Также требуется создать LY-файл в кодировке UTF-8, что ввиду наличия в тексте не ASCII-символов особенно критично, который потом и скомпилировать терминальной командой

lilypond lilypond-example.ly

или через контекстное меню пунктом «Generate PDF», который, не смотря на своё название, создаст всё-таки требуемый MID-файл.

Отличие заключается лишь в некоторой модификации исходного кода, в соответствие с изложенными выше требованиями:

\version "2.14.2"
\paper {
#(set-paper-size "a4")
}
\header {
title = "Угадай мелодию от Тифлокомпа"
}
couplet = \relative c' {
e8 c e c
f e d4
g,8 g g a16 b
c8 c c4
}
\score {
{ \couplet \couplet }
\midi { }
}

[Скачать получившийся MID-файл]

Разумеется, некоторые директивы, относящиеся к визуальному оформлению нотной страницы, можно было бы отбросить, в частности заголовок листа. Здесь они приводятся лишь для большей очевидности преемственности исходного кода.

Таким образом, GNU LilyPond предоставляет возможность незрячим и слабовидящим людям, обладающим базовыми навыками работы на компьютере, создавать и читать нотный текст практически любой сложности, причём в форматах, распространённых в среде людей, не имеющих нарушений зрения. Владение технологией LilyPond может ощутимо повысить профессиональную квалификацию незрячего музыканта, так как посредством её использования он получит инструмент, позволяющий компенсировать многие недостатки зрения и приблизиться по своим возможностям к людям без физических ограничений.

В завершение перечислим некоторые основные ссылки, по которым заинтересованные лица смогут ознакомиться с подробной документацией GNU LilyPond, а также посетить сетевые библиотеки партитур в его формате:



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017