Typography
August 2011 29

GNU LilyPond — свободный нотный набор

From Sandbox
Уже с конца 1980-х годов музыкальные издательства постепенно оставляли ручной и переходили на компьютерный нотный набор. На данный момент список нотных редакторов огромен, но профессионалы используют Finale и Sibelius.

Холивары о том, кто из них лучше, не утихают уже лет десять, авторитетное издательство Bärenreiter (музыканты его очень любят, хоть и ругаются на дорогие ноты) тем временем используют написанную на Фортране SCORE, а музыканты — любители свободных программ смотрят на LilyPond и ужасаются, потому что как же обычному человеку жить без WYSIWYG'а?

Если бы не TeX-подобный синтаксис, я уверен, многие бы использовали этот engraver. Именно engraver — переводы «гравировщик» и «наборщик» не подходят здесь, потому что этими словами обозначаются профессии. LilyPond лучше других коммерческих и бесплатных программ располагает нотный текст равномерно по странице.

Сравнение с популярными программами


Это мелодия небезызвестной темы, набранная в трёх разных программах (LilyPond, Finale, Sibelius)


В LilyPond не делалось ничего кроме набора, в Сибелиусе и Finale удалены лишние такты, также в последней ноты принудительно автоматически расставлены по горизонтали.


Рассмотрим некоторые детали:
Sibelius LilyPond Finale
1. Шрифт Современный Под XIX век, особенно скрипичный ключ Современный
2. Вертикальное расположение систем Немного распадаются Системы не распадаются и не сливаются Сильно распадаются
3. Горизонтальное расположение элементов на нотной строке Приемлемо (хотя я бы раздвинул бы последние две ноты на первой строке) Практически идеально Шестнадцатые после восьмой с точкой везде прилеплены к следующей ноте
4. Устойчивость горизонтального распределения Первая строка сжата, вторая нормальная, третья растянутая Равномерное, расстояния на 2-й и 3-й строках практически одинаковые Равномерное, хотя строки выглядят чересчур сжатыми
5. Расстояния вокруг тактовой черты Хорошие, когда нет знаков альтерации (см., например, границу 7 и 8 тактов), иначе страдает правое поле Практически везде одинаковые справа и слева Страдает левое поле, если там шестнадцатая


В этом совсем небольшом примере, который использует только самые простые элементы нотографики, уже заметна разница. Авторы программы тоже перемалывают косточки Finale (это старая версия документа, в новой тоже есть сравнение), а некий Andrew Hawryluk, перейдя с Finale на LilyPond на своём сайте занимается примерно тем же. Кстати, на том сайте можно посмотреть на LilyPond'овский набор.

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

Как это работает


Нам ничего не известно о внутренней работе Sibelius'а или Finale, но, судя по результату, им не мешало бы кое-чему научиться у разработчиков LilyPond.

Scheme

Половина LilyPond написана на Scheme, а исполняемый файл использует GUILE для запуска этой половины. Что даёт такое разделение? TeX-подобная разметка (после проверки синтаксиса, естественно) отправляется на обработку, которая в конечном счёте выдаёт «программу» на Scheme, задающую уже части на C++ все параметры (в основном те, которые выставлены по умолчанию) и собственно ноты, но как уже команды языка программирования, а не разметки. Такой подход позволяет, с одной стороны, более эффективно искать ошибки в той или иной части, а с другой стороны даёт возможность определить команды, выполняющие практически любое действие.

Контексты

Контекст — некая часть партитуры, к которой можно что-либо отнести, и у которой есть некие свойства. Они располагаются на четырёх уровнях.
  • Контекст партитуры. Единственный в файле, он содержит те части, которые одинаковы для всей партитуры, например, размер, темп, повторы etc. Только один.
  • Контекст группы станов. Их может быть несколько вложенных, и содержат специфичные для группы вещи (например, акколада у фортепианного стана — технически это тоже группа).
  • Контекст стана. Несколько разновидностей нотных станов удовлетворят самые разные потребности — в том числе и для набора григорианских хоралов и мензурально нотированной музыки. Может быть вложен как в группу станов, так и в партитуру.
  • Контекст голоса. Их может быть неограниченное число на стане, только бы в глазах не путались.



Графические объекты

Графические объекты (обозначаемые в документации словом grob :-) ) и их engraver'ы, performer'ы и единственный Timing_translator (части, отвечающие за рисование, создание MIDI и синхронизатор ритма на всех станах) строго распределены по контекстам. Среди их свойств обычно немало отвечающих за расположение по вертикали и горизонтали. Полный список гробов можно посмотреть в соответствующей части документации.

Плохость

Этот забавный перевод слова badness означает степень отклонения расположения от идеального для каждого элемента (такой механизм пришёл из TeX'а).

Документация гласит: В целом процедура распределения происходит в четыре этапа. Во-первых, эластичные пробелы («пружины») выбираются на основе длительности. Во-вторых, проверяются все возможные комбинации переноса строк, и для каждого рассчитывается «плохость». В-третьих, оценивается высота каждой системы. Наконец, разрывы страниц и сочетания выбираются так, чтобы горизонтальные и вертикальные промежутки не слишком растягивались или сжимались. [источник]

Синтаксис


Учебник в картинках взят с официального сайта.

Команды начинаются с обратного слеша, буквы это ноты, а цифры — длительности.
text-input-1-annotatetext-input-1-output

Знаки альтерации и аккорды не вызывают проблем. Примечание: русскому музыканту привычнее немецкие или английские названия нот. Для этого можно использовать \language "deutsch" или \language "english"
text-input-2-annotatetext-input-2-output

Партитура и партии могут быть сделаны из одного файла — для этого используются переменные.
text-input-parts-both-annotate

Можно по-отдельности, а можно и вместе:
text-input-score-annotatetext-input-score-output

За дальнейшими разъяснениями просьба обращаться в окошко №27 к официальному мануалу (он достаточно хорошо написан).

Использование


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

jEdit

К этому популярному кроссплатформенному редактору существует плагин LilyPondTool, который добавляет подсветку синтаксиса, просмотр, PointAndClick (щелкнул на элемент партитуры — попал в соответствующее место исходника) и несколько удобных штук (типа диалогов для задания типичных свойств). Практически единственный удобный инструмент для Windows.

Kate

Штатный редактор KDE дружит с LilyPond'ом, хотя не так продвинуто, как следующая программа.

Frescobaldi

Это специализированный именно на LilyPond'е редактор под KDE (хотя замечательно запускается и в GNOME) обладает более существенной поддержкой. Доступно побольше примочек, и работать с ним лично мне куда приятнее.

Также возможно прикрутить экспорт из Sibelus (sib2ly), встроен импорт MIDI и MusicXML.

Приятное известие для любителей TeX'а — LilyPond содержит в своём составе утилиту LilyBook, с помощью которой можно запросто встраивать нотные примеры прямо в TeX'овский документ.

P.S.: Всё это доступно также под Windows и Mac OS

Ссылки


+64
7.9k 76
Comments 30
Top of the day