1

Short question: What's the best way to represent a simple verse-chorus song with some obnoxious syllable-extension lines?

Long explanation:

I'm trying to use Lilypond to engrave an existing song with the following properties:

  1. It has several verses, each of which is followed by the same chorus.
  2. The chorus starts in the middle of a bar.
  3. The verses end on a tied note across a bar boundary, followed by a rest.

When I try to use the melismata/extender bars (I think I'm using those terms right?) at the end of each verse, if I do it naïvely, they overshoot into the chorus for every verse but the first. I've found a couple solutions that work, but they each have their own downsides. And none of the techniques are actually producing the correct repetition behavior, as demonstrated by \unfoldRepeats.

My first approach, just using the default behavior of __, is based on §2.1.2 of the manual, in particular the "Lyrics and Repeats" subsection. I tried nesting various \new Lyrics declarations:

melody = \relative c' \repeat volta 2 {
  \partial 2 c4. e8 | g2 c~ | 4 r4
  \section \sectionLabel Chorus
  c2 | g2. e4 | c1~ | \partial 2 4. r8
}

automatic-melismata = <<
  \new Voice = "melody" \melody
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c d __
      }
      \new Lyrics {
        \set associatedVoice = "melody"
        \set stanza = "2."
        E f g h __
      }
    >>
    \repeat volta 2 {
      W x y z __
    }
  }
>>

This produces the following output, where the h __ in the second verse causes the melisma to extend through the first note of the chorus.

score with automatic melismata


I did find two approaches that worked. One was to disable automatic melismata, and then specify the durations manually using the same technique as above; for some reason, though, the duration of the melisma in the first verse has to be one _ longer than in all the other verses.

manual-melismata = <<
  \new Voice = "melody" {
    \set melismaBusyProperties = #'()
    \melody
    \unset melismaBusyProperties
  }
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c d __ _
      }
      \new Lyrics {
        \set associatedVoice = "melody"
        \set stanza = "2."
        E f g h __
      }
    >>
    \repeat volta 2 {
      W x y z __ _
    }
  }
>>

The results are good, though:

score with manual melismata

The third approach is from Lazy's answer to Erik B's question "Lilypond: How to avoid overshooting melisma in last stanzas [incl. MWE and output]". The resulting code produces the same good output, but feels a lot more fragile to me:

split-verse-chorus = <<
  \new Voice = "melody" {
    \relative c' \repeat volta 2 {
      \clef treble
      \key c \major
      \time 4/4
      \partial 2
      c4. e8 | g2 c~ | 4 r4
      \new Voice = "chorus" {
        \section \sectionLabel Chorus
        c2 | g2. e4 | c1~ | \partial 2 4. r8
      }
    }
  }
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c \set associatedVoice = "chorus" d __
        W x y z __
      }
      \new Lyrics \lyricsto "melody" {
        \set stanza = "2."
        E f g h __
      }
    >>
  }
>>

I now have to intermingle the markup for the first verse and the chorus, which is harder to keep straight.

Moreover, all three of these approaches fail if I use \unfoldRepeats, as no actual repetition of the verses is unfolded. The first two clearly have the \repeat volta 2 in the chorus around the wrong place, and the third solution not only has no repetition, but when unfolding the repetitions the melisma line for the second verse becomes far too long.

The overall state of affairs is thus:

various failing engraving attempts

And the complete code for that example is as follows:

\version "2.24.4"

melody = \relative c' \repeat volta 2 {
  \partial 2 c4. e8 | g2 c~ | 4 r4
  \section \sectionLabel Chorus
  c2 | g2. e4 | c1~ | \partial 2 4. r8
}

automatic-melismata = <<
  \new Voice = "melody" \melody
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c d __
      }
      \new Lyrics {
        \set associatedVoice = "melody"
        \set stanza = "2."
        E f g h __
      }
    >>
    \repeat volta 2 {
      W x y z __
    }
  }
>>

manual-melismata = <<
  \new Voice = "melody" {
    \set melismaBusyProperties = #'()
    \melody
    \unset melismaBusyProperties
  }
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c d __ _
      }
      \new Lyrics {
        \set associatedVoice = "melody"
        \set stanza = "2."
        E f g h __
      }
    >>
    \repeat volta 2 {
      W x y z __ _
    }
  }
>>

split-verse-chorus = <<
  \new Voice = "melody" {
    \relative c' \repeat volta 2 {
      \clef treble
      \key c \major
      \time 4/4
      \partial 2
      c4. e8 | g2 c~ | 4 r4
      \new Voice = "chorus" {
        \section \sectionLabel Chorus
        c2 | g2. e4 | c1~ | \partial 2 4. r8
      }
    }
  }
  \new Lyrics \lyricsto "melody" {
    <<
      {
        \set stanza = "1."
        A b c \set associatedVoice = "chorus" d __
        W x y z __
      }
      \new Lyrics \lyricsto "melody" {
        \set stanza = "2."
        E f g h __
      }
    >>
  }
>>

\book {
  \paper {
    scoreTitleMarkup = \markup \column {
      \vspace #1
      \huge \italic \fromproperty #'header:piece
    }
    oddFooterMarkup = \markup \null
  }

  \score {
    \header {
      piece = \markup \wordwrap {
        Automatic melismata – second melisma too long
      }
    }
    \automatic-melismata
  }

  \score {
    \header {
      piece = \markup \wordwrap {
        UNFOLDED automatic melismata: verse lyrics don't repeat, chorus lyrics
        repeat only as verse 2, second melisma still too long
      }
    }
    \unfoldRepeats \automatic-melismata
  }

  \markup \vspace #2.5

  \score {
    \header {
      piece = \markup \wordwrap {
        Manual melismata – correct melismata, inconsistent code
      }
    }
    \manual-melismata
  }

  \score {
    \header {
      piece = \markup \wordwrap {
        UNFOLDED manual melismata: verse lyrics don't repeat, chorus lyrics repeat
        only as verse 2, code still inconsistent
      }
    }
    \unfoldRepeats \manual-melismata
  }

  \markup \vspace #2.5

  \score {
    \header {
      piece = \markup \wordwrap {
        Split verse/chorus – correct melismata, fragile code
      }
    }
    \split-verse-chorus
  }

  \score {
    \header {
      piece = \markup \wordwrap {
        UNFOLDED split verse/chorus: no lyrics repeated, second melisma covers
        whole chorus and continues into the next repeat, code still fragile
      }
    }
    \unfoldRepeats \split-verse-chorus
  }
}

In sum, as I said at the start: What's the best way to represent a simple verse-chorus song with some obnoxious syllable-extension lines?

2
  • 1
    My reply you’ve linked to clearly identifies nested lyrics as the culprit for overshooting lyric extenders. So why are are you still using them when referencing that reply?
    – Lazy
    Commented Aug 3 at 9:32
  • @Lazy: The reason is simple – I found your answer after I tried to diagnose what went wrong with what I had written, and I wanted to cover what I'd tried! Plus since nested lyrics are a problem, I thought it was useful to note where that pattern was coming from, since it sounds like the manual led both me and Erik B astray – you said you hadn't seen the pattern anywhere, so I hoped showing where we got it from might help explain that/let somebody explain how we were misreading that. Commented Aug 3 at 21:51

1 Answer 1

0

If you do not like to have verse and chorus in mingling you can actually also do something like this:

melody = \relative c' \repeat volta 2 {
  \partial 2 c4. e8 | g2 c~ | 4 r4
  \section \sectionLabel Chorus
  \new Voice = "chorus" {
    c2 | g2. e4 | c1~ | \partial 2 4. r8
  }
}

\unfoldRepeats <<
  \new Voice = "melody" \melody
  \new Lyrics = "firstline" \lyricsto "melody" {
    \set stanza = "1."
    A b c d __
  }
  \new Lyrics \lyricsto "melody" {
    \set stanza = "2"
    E f g h __
  }
  \context Lyrics = "firstline" \lyricsto "chorus" {
    \repeat volta 2 {
      \set stanza = ""
      W x y z __
    }
  }
>>

Now to make this work with unfolding repeats we need to reuse the same "chorus" voice:

melody = \relative c' \repeat volta 2 {
  \partial 2 c4. e8 | g2 c~ | 4 r4
  \section \sectionLabel Chorus
  \context Voice = "chorus" {
    c2 | g2. e4 | c1~ | \partial 2 4. r8
  }
}

\unfoldRepeats <<
  \new Staff <<
    \new Voice = "melody" \melody
    \new Voice = "chorus" \skip\melody
  >>
  \new Lyrics = "firstline" \lyricsto "melody" {
    \set stanza = "1."
    A b c d __
  }
  \new Lyrics \lyricsto "melody" {
    \set stanza = "2"
    E f g h __
  }
  \context Lyrics = "firstline" \lyricsto "chorus" {
    \repeat volta 2 {
      \set stanza = ""
      W x y z __
    }
  }
>>

But note that this does not work out for the second stanza, because this one does not actually have a concept of repeats. So we’ll have to somehow force it to do that. The easiest way is probably using tags. Alternatively we might try to automatise this, which would result in a more beautiful structure, but complicated boilerplate.

So if we do:

melody = \relative c' \repeat volta 2 {
  \partial 2 c4. e8 | g2 c~ | 4 r4
  \section \sectionLabel Chorus
  \context Voice = "chorus" {
    c2 | g2. e4 | c1~ | \partial 2 4. r8
  }
}

lyricsVI = \lyricmode {
  A b c d __
}

lyricsVII = \lyricmode {
  E f g h __
}

lyricsC = \lyricmode {
  W x y z __
}

and

scorebase = <<
  \new Staff <<
    \new Voice = "melody" \melody
    \new Voice = "chorus" \skip\melody
  >>
  \new Lyrics = "firstline" \lyricsto "melody" {
    \set stanza = "1." \lyricsVI
    \tag #'unfolded {
      \set stanza = "2." \lyricsVII
    }
  }
  \tag #'repeat \new Lyrics \lyricsto "melody" {
    \set stanza = "2." \lyricsVII
  }
  \context Lyrics = "firstline" \lyricsto "chorus" {
    \repeat volta 2 {
      \set stanza = "C" \lyricsC
    }
  }
>>

we can do

\removeWithTag #'unfolded \scorebase

to get

The score with repeats

or

\removeWithTag #'repeat \unfoldRepeats \scorebase

to get

The score unfolded

In this particular case removing 'unfolded is not strictly necessary, as there are no notes for these lyrics to be assigned to.

As I said alternatively we could try to automatise this in different ways.

Note that also alternatively it would be possible (for more complex scores) to define your score by a music function that assembles the parts depending on an argument.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.