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:
- It has several verses, each of which is followed by the same chorus.
- The chorus starts in the middle of a bar.
- 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.
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:
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:
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?