Архив за месяц: Декабрь 2013

Простой способ учить песню на слух из лилипондовых нот

LilyPond умеет генерировать из одной партитуры кучу MIDI-файлов для разных партий, где одна партия звучит громче остальных и исполнена (если хочется) другим инструментом — это весьма полезно для разучивания нот хором на слух.

А Frescobaldi умеет вставлять в лилипондовый исходный файл код, который и включает эту красоту: Tools → Setup New Score… Ctrl+Shift+N,

Setup New Score

после чего в открывшемся окне на вкладке Parts надо поставить галочку у пункта Rehearsal MIDI files.

При компиляции файла filename.ly помимо файлов filename.pdf и filename.midi создаётся куча файлов с именами filenamevoicename.midi, в которых и находится нужный звук. А точнее — нужные MIDI-команды.

Неспешно

Получил на почте пару бандеролей с китайской фотомелочёвкой, купленной ещё семнадцатого октября. Бандероли шли больше двух месяцев. Думал, опять почта затупила — они от почтового отделения до моего дома (триста метров) пару извещений четыре дня несли — однако решил проверить трек — хоть и неполный, российский, лучше, чем совсем никакого.

Операция Дата Место проведения операции Атрибут операции
Импорт 30.11.2013 3:40:00 443982 Самара PI-2
Принято таможней 30.11.2013 10:12:00 443982 Самара PI-2
Таможенное оформление 30.11.2013 10:14:00 443982 Самара PI-2 Выпущено таможней
Обработка 04.12.2013 4:56:00 443982 Самара PI-2 Покинуло место международного обмена
Обработка 04.12.2013 23:32:00 443980 Самара ММПО Прибыло в сортировочный центр
Обработка 05.12.2013 6:00:00 443980 Самара ММПО Покинуло сортировочный центр
Обработка 06.12.2013 17:12:00 454962 Челябинск МСЦ УОПо Прибыло в сортировочный центр
Обработка 09.12.2013 0:00:00 454962 Челябинск МСЦ УОПо Покинуло сортировочный центр
Операция Дата Место проведения операции Атрибут операции
Импорт 12.12.2013 1:39:00 104001 Москва PCI-1
Принято таможней 12.12.2013 16:06:00 104001 Москва PCI-1
Таможенное оформление 12.12.2013 16:14:00 104001 Москва PCI-1 Выпущено таможней
Обработка 12.12.2013 19:09:00 104001 Москва PCI-1 Покинуло место международного обмена
Импорт 13.12.2013 3:06:00 102976 Москва-Внуково ММПО цех-1
Обработка 16.12.2013 4:10:00 102976 Москва-Внуково ММПО цех-1 Покинуло сортировочный центр
Обработка 16.12.2013 18:20:00 102322 Москва-Домодедово АОПП Уч-1 Прибыло в сортировочный центр
Обработка 16.12.2013 21:24:00 102322 Москва-Домодедово АОПП Уч-1 Покинуло сортировочный центр
Обработка 19.12.2013 0:00:00 454962 Челябинск МСЦ УОПо Покинуло сортировочный центр
Обработка 19.12.2013 10:39:00 140983 Московский Асц цех Посылок Сортировка

Что видим? Видим, что, во-первых, по стране посылки стали если не летать, то хотя бы ехать со скоростью, заметно превышающей черепашью: от поступления в страну до прибытия в Челябинск проходит неделя. Но общее время всё равно не улучшилось —с одной стороны, тормозит Челябинская почта: в одном из случаев от выхода посылки из челябинского сортировочного центра до поступления в отделение прошло десять дней — больше, чем на езду по стране. С другой стороны, пробка, которая раньше была где-то меж таможней и почтой, сместилась в сторону входа: от отправки из Китая (продавцы уверяли, что отправили всё сразу) до поступления в Россию проходит полтора-два месяца.

А третий пакет, тоже заказанный семнадцатого октября, до сих пор не пришёл.

Без промежуточных шагов

Раньше при наборе лилипондовых нот я использовал различные костыли промежуточные нотные редакторы.

Пробовал Denemo — оно иногда падает и лилипондовый исходник выдаёт без использования команды \relative, то есть использует не относительное, а абсолютное указание используемых октав, что ведёт к избытку в исходном тексте запятых и апострофов (если только мы не пишем в малой октаве).

Пробовал MuseScore — в последнее время он стал достойнее выглядеть, и в нём уже́ можно работать. Видно, что на MuseScore оказал немалое влияние Sibelius, но пока в MuseScore ещё есть, что улучшить. Кроме того, практика показала, что MuseScore некорректно экспортирует ноты в лилипондовый формат, а вскоре вообще откажется от экспорта в LilyPond, сосредоточившись на MusicXML.

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

  • отсутствие необходимости помнить, как работать с посторонними программами;
  • более чистый исходный код: я в него добавляю лишь то, что мне надо, без ненужного мусора;
  • возможность использовать неанглийские обозначения нот: если в начало файла вставить команду \language "deutsch", то будут использоваться именно те буквы, что применяются в России: буква b будет обозначать си-бемоль, для обозначения ноты си будет использоваться буква h, а для ми-бемоля с ля-бемолем — es и as соответственно.

Округление вместо сдвига

Интересный способ округления увидел сейчас в http://3site.eu/examples/snow/snow.js — для этого там используется сдвиг:

style.left = ((random() * offsetWidth) >> 0) + "px";

Проверил — так и есть:

5 / 2      == 2.5
5 / 2 >> 0 == 2

Но в чём смысл? Сэкономить буквы, отказавшись от Math.floor?

Свежий Frescobaldi под убунтой

Нотный редактор Frescobaldi по умолчанию в Ubuntu 12.04 LTS не очень свеж — сейчас предлагается позапрошлогодняя версия 2.0.0, где нет, например, нумерации строк исходного кода. В более свежих версиях её наконец-то сделали. Чуть более свежую версию Frescobaldi — майскую предпоследнюю 2.0.10 — можно поставить так (точнее, обновить, когда уже установлена старая):

sudo add-apt-repository ppa:ryanakca/frescobaldi
sudo apt-get update
sudo apt-get upgrade

Попутно обновятся и другие пакеты, если найдётся, что обновлять. Если надо именно поставить либо обновить только Frescobaldi — действуем как обычно: вместо последней команды пишем

sudo apt-get install frescobaldi

Ночная эвакуация

Ночная эвакуация

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

Immer bereit!

Суровые челябинские серые трубчатые заборы обтянуты красно-жёлтыми плакатами, полицаи сотрудники правоохранительных органов уже дежурят на улицах, везде расставлены вре́менные знаки 3.27 «Остановка запрещена», ветер треплет белые, синие и красные флажки. Всё готово к эстафете?

Олимпийский огонь и транспорт

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

Факел пронесут и мимо дома, и мимо работы. Значит, автомобилем завтра пользоваться не надо. Троллейбус тоже как-то под вопросом. Что осталось? Лыжи? Велосипед? Пешком?

Прогноз на утро — минус двадцать один и ветер в харю.

Бекары — слева, бемоли с диезами — справа

Прошлой зимой я изобретал хитрый способ заставить лилипонд выводить знаки при ключе по разные стороны тактовой черты в случае смены тональности: метод работал не совсем корректно, рисуя лишние бекары в случае уменьшения только лишь количества знаков.

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

By default, the accidentals used for key cancellations are placed adjacent to those for key signature changes. This behavior can be changed by overriding the ‘break-align-orders property of the BreakAlignment grob.

The value of ‘break-align-orders is a vector of length 3, with quoted lists of breakable items as elements. This example only modifies the second list, moving key-cancellation before staff-bar; by modifying the second list, break alignment behavior only changes in the middle of a system, not at the beginning or the end.

\new Staff {
  \override Score.BreakAlignment #'break-align-orders =
    #'#((left-edge ambitus breathing-sign clef staff-bar
                   key-cancellation key-signature time-signature custos)

        (left-edge ambitus breathing-sign clef key-cancellation
                   staff-bar key-signature time-signature custos)

        (left-edge ambitus breathing-sign clef key-cancellation
                   key-signature staff-bar time-signature custos))

  \key des \major
  c'1
  \bar "||"
  \key bes \major
  c'1
}

Ноты

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