bug-lilypond
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hairpin-lyrics interaction bug


From: Trevor Baca
Subject: hairpin-lyrics interaction bug
Date: Thu, 11 Aug 2005 12:09:38 -0500

You have to have hairpins in a separate context (like the 3.2.4
template) to get this, but when you do you'll find that hairpins take
their horizontal start- and stop-points from the *width of lyric text*
happening at the same rhythmic moment, rather than from the *width of
noteheads* happening at the same rhythmic moment, which can lead to,
for example, really confusing your pianist.

The example here shows this point through a series of four progressive
examples that should render on a single page.

You'll need 2.7.4 to render the \wordwrap correctly and read the explanations.

Possibly a workaround for this already exists? Or possibly the
Dynamics context I've built here for these examples is somehow
deficient. Or perhaps Lily's default behavior for hairpin spanning
should change?

Trevor.

%%%%%%%%%%% hairpin-lyrics interaction %%%%%%%

\version "2.7.4"

\markup {\wordwrap {\bold {Hairpin-lyrics interaction.} Here is some
music. The hairpins attach inline to notes, directly in the note
entry. The hairpins are very beautiful. They each start from left
note-edge and stop at right note-edge:}}

theWords = \lyricmode {
   text and even more text,
   words and even more words
}

\score {
   <<
      \new Staff <<
         \clef treble
         \time 4/4
         \context Voice = "theNotes" {
            c'2.\< c'4\! |
            c'2.\> c'4\! |
            c'1\< |
            r1\!
            c'2.\< c'4\! |
            c'2.\> c'4\! |
            c'1\< |
            r1\!
         }
         \lyricsto "theNotes" \new Lyrics \theWords
      >>
   >>
}

\markup {\wordwrap {Here  is the same music, but with dynamics in a
special Dyanmics context like the one in template 3.2.4. Here the
hairpins are not so beautiful. They each start at left lyric-edge and
stop at right lyric-edge:}}

\score {
   <<
      \new Staff <<
         \clef treble
         \time 4/4
         \context Voice = "theNotes" {
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
         }
         \lyricsto "theNotes" \new Lyrics \theWords
      >>
      \new Dynamics {
            s2.\< s4\! |
            s2.\> s4\! |
            s1\< |
            s1\!
            s2.\< s4\! |
            s2.\> s4\! |
            s1\< |
            s1\!
      }
   >>
   \layout {
      \context {
         \name "Dynamics"
         \type "Engraver_group_engraver"
         \consists "Axis_group_engraver"
         \consists "Skip_event_swallow_translator"
         \consists "Dynamic_engraver"
      }
      \context {
         \Score
         \accepts "Dynamics"
      }
   }
}

\markup {\wordwrap {The same hairpin-stretching effect obtains no
matter where we put the special Dynamics context:}}

\score {
   <<
      \new Staff <<
         \clef treble
         \time 4/4
         \context Voice = "theNotes" {
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
         }
         \lyricsto "theNotes" \new Lyrics \theWords
      >>
      \new Staff {
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
            c'2. c'4 |
            c'2. c'4 |
            c'1 |
            r1
      }
      \new Dynamics {
            s2.\< s4\! |
            s2.\> s4\! |
            s1\< |
            s1\!
            s2.\< s4\! |
            s2.\> s4\! |
            s1\< |
            s1\!
      }
   >>
   \layout {
      \context {
         \name "Dynamics"
         \type "Engraver_group_engraver"
         \consists "Axis_group_engraver"
         \consists "Skip_event_swallow_translator"
         \consists "Dynamic_engraver"
      }
      \context {
         \Score
         \accepts "Dynamics"
      }
   }
}

\markup {\wordwrap {The idea that hairpin bounds match lyric bounds is
unusual. The following snippet from the first of the Brahms German
folksongs probably gives a good idea why when we look carefully at the
hairpins on either side of the barline between the first two
measures:}}

brahmsLyrics = \lyricmode {
   of -- fen schon, komm |
   nur in mei -- ne | Hütt __ Ach |
}
\score {
   <<
      \new Staff <<
         \context Voice = "melody" {
            \clef treble
            \time 6/8
            c''4 e''8 d''4 f''8 |
            e''4 d''8 c''4 d''8 g'4. ~ g'4 c''8 |
         }
         \lyricsto "melody" \new Lyrics \brahmsLyrics
      >>
      \new PianoStaff <<
         \new Staff {
            \clef treble
            \time 6/8
            r8 <e' c'' e''>8[ r8 <f' b' e''>8 r8 <d' f' b'>8] |
            r8 <c' e' c''>8[ r8 <e' g' c''>8 r8 <c' fis' a'>8] |
            r8 <g b g'>8[ r8 <g e' g'>8 r8 <g c' fis' g'>8] |
         }
         \new Dynamics {
            \time 6/8
            s8 s4\< s4\> s8\! |
            s4. \< s4. | s4. s4 s8\! |
         }
         \new Staff {
            \time 6/8
            \clef bass
            fis,4( g,4 gis,4) |
            a,4( a4 d4) |
            g,4( c4 a,4) |
         }
      >>
   >>
   \layout {
      \context {
         \name "Dynamics"
         \type "Engraver_group_engraver"
         \consists "Axis_group_engraver"
         \consists "Skip_event_swallow_translator"
         \consists "Dynamic_engraver"
         \override Hairpin #'extra-offset = #'(0 . 1.5)
      }
      \context {
         \PianoStaff
         \accepts "Dynamics"
         \override VerticalAlignment #'forced-distance = #5
      }
   }
}

\markup {\wordwrap {The end effect is to render the hairpins such that
they frequently look like y have nothing to do with the rhythmic
timevalues in the piano. Maybe we should reconsider this nment
principle?}}

%%%%%%%%%%% hairpin-lyrics interaction %%%%%%%




reply via email to

[Prev in Thread] Current Thread [Next in Thread]