Вот короткий фрагмент Lilypond, который, как мне кажется, выражает намерение того, что я хочу сделать.
verseNotes = \relative c' {
d^\markup { \verseText } d d d16 d d8 a r4 |
cis8 cis cis cis16 cis cis8 a r4 |
}
verseSection = \relative c' {
\repeat volta 2 {
\verseNotes
}
gis,1 |
gis4. b8~b2 |
\repeat volta 3 {
verseText = "Verse (repeat 2x)"
\verseNotes
}
}
\relative c' {
verseText = "Verse"
\verseSection
}
Это, конечно, ошибки.
Я думаю, что причина в чем-то вроде verseNotes
привязки во время анализа и \verseText
отсутствия ценности в то время. Я хотел бы повторно использовать переменную verseNotes, но с другими значениями verseText.
Я думаю, что мне нужен «динамический» эквивалент какой-то функции, которой я передаю текстовый параметр. Я вижу различные разделы в документации Lilypond, выражающие вещи в Scheme, но это, вероятно, последнее, что я хочу делать при вводе музыки.
Да, вы правы — вы должны объявить переменную перед ее использованием. Надеюсь это поможет:
VerseText = "Стих" verseNotes = \относительный c' { d8^\markup { \verseText } dd d16 d d8 a r4 | цис8 цис цис цис16 цис цис8 а r4 | } verseSection = \relative c' { \повторить вольта 2 { \verseПримечания } гис'1 | гис4. b8~b2 | } \счет { \новый посох \verseSection }
Дальнейшее решение Питера, 7 ноября 2013 г.:
verseNotes = \относительный c' { d8 дд d16 d d8 a r4 | цис8 цис цис цис16 цис цис8 а r4 | } verseSection = \relative c' { \override Score.RehearsalMark #'self-alignment-X = #LEFT \mark \markup { \normalsize "Стих" } \повторить вольта 2 { \verseПримечания } гис'1 | гис4. b8~b2 | \mark \markup { \normalsize "Стих (повторить 2 раза)" } \повторить вольта 3 { \verseПримечания } } \счет { \новый посох \verseSection }
Я вижу различные разделы в документации Lilypond, выражающие вещи в Scheme, но это, вероятно, последнее, что я хочу делать при вводе музыки.
Впрочем, лучше привыкнуть. На чистом уровне LilyPond вы можете назначать только статические музыкальные выражения. Хотя можно внести некоторые изменения в тех, кто использует \tag
, на самом деле это не параметризация.
Обычно вам не нужно «выражать материал» при вводе музыки и наоборот: вполне возможно написать Scheme для схематических вещей (а именно параметризации) и музыку для музыкальных вещей, используя ... #{
разумно #}
.
В этом случае это будет выглядеть (после небольших исправлений октавы, длительности и контекста) примерно так:
стихПримечания = #(определить-музыкальную-функцию (парсер расположение verseText) (разметка?) #{ \относительный с' { d8^\markup { #verseText } dd d16 d d8 a r4 | цис8 цис цис цис16 цис цис8 а r4 | } #}) Раздел стихов = #(определить-музыкальную-функцию (парсер расположение verseText) (разметка?) #{ \относительный с' { \повторить вольта 2 { \verseNotes #verseText } гис1 | гис4. b8~b2 | \повторить вольта 3 { \verseNotes "Стих (повторить 2 раза)" } } #}) \относительный с' { \new Staff \verseРаздел "Стих" }
Как видите, код Scheme сжимается в отдельные строки, которые достаточно легко выучить наизусть и которые вызывают умеренное раздражение.
Ален Сильяк