70229ade |
\begin{lilypond}
\language "english"
#(set-global-staff-size 14)
#(set! paper-alist (cons '("my size" . (cons (* 4.5 in) (* 6.75 in))) paper-alist))
#(define (rest-score r)
(let ((score 0)
(yoff (ly:grob-property-data r 'Y-offset))
(sp (ly:grob-property-data r 'staff-position)))
(if (number? yoff)
(set! score (+ score 2))
(if (eq? yoff 'calculation-in-progress)
(set! score (- score 3))))
(and (number? sp)
(<= 0 2 sp)
(set! score (+ score 2))
(set! score (- score (abs (- 1 sp)))))
score))
#(define (merge-rests-on-positioning grob)
(let* ((can-merge #f)
(elts (ly:grob-object grob 'elements))
(num-elts (and (ly:grob-array? elts)
(ly:grob-array-length elts)))
(two-voice? (= num-elts 2)))
(if two-voice?
(let* ((v1-grob (ly:grob-array-ref elts 0))
(v2-grob (ly:grob-array-ref elts 1))
(v1-rest (ly:grob-object v1-grob 'rest))
(v2-rest (ly:grob-object v2-grob 'rest)))
(and
(ly:grob? v1-rest)
(ly:grob? v2-rest)
(let* ((v1-duration-log (ly:grob-property v1-rest 'duration-log))
(v2-duration-log (ly:grob-property v2-rest 'duration-log))
(v1-dot (ly:grob-object v1-rest 'dot))
(v2-dot (ly:grob-object v2-rest 'dot))
(v1-dot-count (and (ly:grob? v1-dot)
(ly:grob-property v1-dot 'dot-count -1)))
(v2-dot-count (and (ly:grob? v2-dot)
(ly:grob-property v2-dot 'dot-count -1))))
(set! can-merge
(and
(number? v1-duration-log)
(number? v2-duration-log)
(= v1-duration-log v2-duration-log)
(eq? v1-dot-count v2-dot-count)))
(if can-merge
;; keep the rest that looks best:
(let* ((keep-v1? (>= (rest-score v1-rest)
(rest-score v2-rest)))
(rest-to-keep (if keep-v1? v1-rest v2-rest))
(dot-to-kill (if keep-v1? v2-dot v1-dot)))
;; uncomment if you're curious of which rest was chosen:
;;(ly:grob-set-property! v1-rest 'color green)
;;(ly:grob-set-property! v2-rest 'color blue)
(ly:grob-suicide! (if keep-v1? v2-rest v1-rest))
(if (ly:grob? dot-to-kill)
(ly:grob-suicide! dot-to-kill))
(ly:grob-set-property! rest-to-keep 'direction 0)
(ly:rest::y-offset-callback rest-to-keep)))))))
(if can-merge
#t
(ly:rest-collision::calc-positioning-done grob))))
\paper {
#(define fonts
(make-pango-font-tree "Alegreya"
"Alegreya Sans"
"Source Code Pro"
(/ staff-height pt 20)))
#(set-paper-size "my size")
}
\parallelMusic #'(soprano alto tenor bass) {
g8.( a16) g8 e4. | e8.( f16) e8 e4. | r4. r8 g8 g | r4. r8 c,8 c |
g8.( a16) g8 e4. | e8.( f16) e8 e4. | r4. r8 g8 g | r4. r8 c8 c |
d'4 d8 b4. | r8 d8 e f( e d) | r8 f8 g a( g f) | r8 c8 c c4. |
c4 c8 g4. | r8 c8 d e( d c) | r8 e8 f g( f e) | r8 c8 c c4. |
\break
\slurDashed a4 a8 c8.( b16) a8 |
\slurDashed r8 c8 f a8.( g16) f8 |
\slurDashed r8 f8 f f( g) a |
\slurDashed r8 f8 f f f f |
g8.( a16) g8 e4. | e8.( f16) e8 c4. | c8( c) c g4. | c'8( c) c c,4. |
a4 a8 c8.( b16) a8 | r8 c8 f a8.( g16) f8 | r8 f8 f f( g) a | r8 f8 f f f f |
g8.( a16) g8 e4. | e8.( f16) e8 c4. | c8( c) c g4. | c'8 c c, c4. |
\slurSolid d'4 d8 f8. d16 b8 |
\slurSolid r8 d8 g b a g |
\slurSolid r8 b8 b d c d |
\slurSolid r8 g'8 g g g f |
c4.( e4.) | g4. e4. | g,4. c | e'4. c |
c8.( g16) e8 g8. f16 d8 | r8 e16( d) c8 b8. a16 b8 | r8 c c g g f | r8 g'8 g g g, g |
c2. | c2. | e2. | c2. |
}
\score {
\header{
}
\new ChoirStaff \with {
\override RestCollision.positioning-done = #merge-rests-on-positioning
} <<
\new Staff = "female" {
\time 6/8
\key c \major
\new Voice = "women" <<
\relative c'' {
{\voiceOne \soprano}
}
\new Voice = "altos" {\relative c' { \voiceTwo \alto }}
>>
}
\new Lyrics {
\lyricsto "women" {
\set stanza = #"1. "
\skip 1 \skip 1 \skip 1 \skip 1 \skip 1 \skip 1
All is calm, __ __ __ all is bright __ __ __
Round yon
Vir -- gin
\set ignoreMelismata = ##t
mo -- ther
and child,
Ho -- ly
in -- fant
so
ten -- der and mild,
\unset ignoreMelismata
Sleep in hea -- ven -- ly peace, __
Sleep __ in hea -- ven -- ly peace.
}
}
\new Lyrics {
\lyricsto "women" {
\set stanza = #"2. "
Si -- lent Night, Ho -- ly Night,
Shep -- herds quake, __ at the sight; __
Glo -- ries stream __ from
\set ignoreMelismata = ##t
hea -- ven
\unset ignoreMelismata
a -- far, Heav'n -- ly hosts __ sing
\set ignoreMelismata = ##t
Al -- le -- lu -- ia;
\unset ignoreMelismata
Christ, the Sa -- vior is born, __ Christ, __ the Sa -- vior, is born.
}
}
\new Lyrics {
\lyricsto "women" {
\set stanza = #"3. "
\skip 1 \skip 1 \skip 1 \skip 1 \skip 1 \skip 1
Son of God, __ love's pure light __
Ra -- diant beams from
\set ignoreMelismata = ##t
thy ho -- ly face,
\unset ignoreMelismata
With the dawn of
\set ignoreMelismata = ##t
re -- deem -- ing grace,
\unset ignoreMelismata
Je -- sus, Lord, at thy birth, __
Je -- sus, Lord, at thy birth.
}
}
\new Staff = "male" {
\clef "bass"
\relative c' {
\time 6/8
\key c \major
\new Voice = "men" <<
{\voiceOne \tenor}
\new Voice = "basses" { \voiceTwo \bass }
>>
}
}
\new Lyrics {
\lyricsto "men" {
Si -- lent, Ho -- ly,
}
}
>>
\layout {
indent = 0.0\cm
\context {
\Lyrics
\override LyricText #'font-size = #1
}
}
\midi { }
}
\version "2.18.2" % necessary for upgrading to future LilyPond versions.
\end{lilypond}
|