Каков наилучший способ автоматического преобразования исходного файла LilyPond в несколько ключей? - PullRequest
15 голосов
/ 29 апреля 2009

проблема

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

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

melody = \relative c' {
    c c g g
    a a g2
    f f e e
    d d c2 }

Я хочу иметь возможность автоматически транспонировать это, поэтому, если я хочу, чтобы все это было в «G», я заключаю песню в \ transpose, например, так:

melody = \transpose c g \relative c' {
    c c g g
    a a g2
    f f e e
    d d c2 }

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

То, к чему я сейчас прибегаю, - это взять указанный выше файл, назвать его twinkle.ly и превратить его в скрипт M4 под названием twinkle.ly.m4, содержимое которого выглядит следующим образом:

melody = \transpose c _key \relative c' {
c c g g
a a g2
f f e e
d d c2 }

Затем я компилирую объект while, выполнив следующую строку:

> m4 -D _key=g twinkle.ly.m4 > twinkle_g.ly && lilypond twinkle_g.ly

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

вопрос Должен быть лучший способ сделать это. Учитывая, что Lilypond поддерживает встроенную схему, я бы предпочел не использовать макрос, предварительно обработанный на нем. Кто-нибудь еще придумал решение этой же проблемы?

Ответы [ 3 ]

19 голосов
/ 08 мая 2009

Вы можете обратиться к переменной мелодии и перенести ее в нужные клавиши:

melody = \relative c' { c8 e c e g4 g }
\score {
  \transpose c d \melody
}
\score {
  \transpose c e \melody
}
% etc.

Если вы хотите вывести транспозиции в виде отдельных файлов, вставьте их в \ book блоки.

3 голосов
/ 15 ноября 2014

Если вы хотите создать две копии одного фрагмента, одну транспонированную, а другую нет, вы можете использовать \displayLilyMusic. Например,

{
  \displayLilyMusic \transpose c a, { c4 e g a bes }
}

будет отображаться

{ a,4 cis e fis g }

Скопируйте этот вывод и вставьте его в любое место.

0 голосов
/ 11 марта 2015

Используйте бесплатный редактор Фрескобальди для lilypond . Он обеспечивает мощный инструмент транспонирования.

...