Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: Manuela am Donnerstag, 20. April 2023, 21:16

Titel: Lyricextender dehnt sich bis zum Schluss aus
Beitrag von: Manuela am Donnerstag, 20. April 2023, 21:16
Wenn ich die Lyrics untereinander schreibe, ist alles normal.

Wenn ich versuche, die Lyrics in eine Anweisung zu schreiben, wird der Extender bis zum Schluss der Noten gedehnt, trotz Pause.

Es hat einen Grund, warum ich die Lyrics zusammenfasse (ich erstelle den Score mittes eines Scheme-Programms und kann damit mehrere Strophen als einen Parameter übergeben).

Im oberen Staff ist es so, wie es sein sollte. Im unteren Staff dehnt sich der Extender unerwünscht aus. Wie kann ich das verhindern?

\version "2.25.2"
\language "deutsch"

lyr = \lyricmode {
  ah oh uh __
}

lyrii = \lyricmode {
  eh ih oh __
  ah eh uh
}

lyru = \lyricmode {
  <<
    {
      \lyr
    }
    \new Lyrics {
     \set associatedVoice = sop
     \lyrii
    }
  >>
}


mus = \relative { c' c c r c c c }

%% jede Strophe wird einzeln übergeben, alles klappt
<<
  \new Staff
  \new Voice=sop \mus
  \new Lyrics \lyricsto sop \lyr
  \new Lyrics \lyricsto sop \lyrii
>>

%% alle Strophen in einer Lyrics-Anweisung ergibt unerwünschten Effekt
<<
  \new Staff
  \new Voice=sop \mus
  \new Lyrics \lyricsto sop \lyru
>

lyric.png
Titel: Antw:Lyricextender dehnt sich bis zum Schluss aus
Beitrag von: Manuela am Donnerstag, 20. April 2023, 21:20
Ich hatte gerade eine Idee.

Jede Strophe als \new Lyrics definiert, \set associatedVoice festlegen und \lyricsto weglassen.

Die erste Strophe wird richtig angezeigt, die zweite nicht mehr.

Ich bin verwirrt, kann mir jemand erklären, was ich falsch mache?

\version "2.25.2"
\language "deutsch"

lyr = \lyricmode {
  ah oh uh __
}

lyrii = \lyricmode {
  eh ih oh __
  ah eh uh
}

lyru = \lyricmode {
  <<
    \new Lyrics {
      \set associatedVoice = sop
      \lyr
    }
    \new Lyrics {
      \set associatedVoice = sop
      \lyrii
    }
  >>
}


mus = \relative { c' c c r c c c }

%% jede Strophe wird einzeln übergeben, alles klappt
<<
  \new Staff
  \new Voice=sop \mus
  \new Lyrics \lyricsto sop \lyr
  \new Lyrics \lyricsto sop \lyrii
>>

%% alle Strophen in einer Lyrics-Anweisung ergibt unerwünschten Effekt
<<
  \new Staff
  \new Voice=sop \mus
  \new Lyrics \lyru
>>

Titel: Antw:Lyricextender dehnt sich bis zum Schluss aus
Beitrag von: harm6 am Freitag, 21. April 2023, 11:16
Hallo Manuela,

ich habe nicht analysiert warum genau es schief geht, aber die Art und Weise wie Du die Strophen "zusammenfasst" sieht befremdlich aus.
Versuch mal:
list-of-lyrics =
  #(map
    (lambda (l) #{ \new Lyrics \lyricsto sop $l #})
    (list lyr lyrii))
<<
  \new Staff \new Voice = sop \mus
  #@list-of-lyrics
>>

Gruß,
  Harm
Titel: Antw:Lyricextender dehnt sich bis zum Schluss aus
Beitrag von: Manuela am Freitag, 21. April 2023, 21:31
Danke Harm.

Nach einigem Herumirren habe ich es geschafft, das Ganze in eine music-function zu gießen

\version "2.25.2"
\language "deutsch"

lyr = \lyricmode {
  \set stanza = #"1"
  ah oh uh __
}

lyrii = \lyricmode {
  \set stanza = #"2"
  eh ih oh __
  ah eh uh
}

mus = \relative { c'' c c r c c c }

myscore =
#(define-music-function (sop lyrli)
   (ly:music? ly:music-list?)
   (let* ((voice "sop")
          (list-lyr
           (map
            (lambda (l) #{ \new Lyrics \lyricsto $voice $l #})
            lyrli)))
     #{
       <<
         \new PianoStaff
         <<
           \new Staff
           <<
             \new Voice=$voice $sop
           >>
           $@list-lyr
         >>
       >>
     #}
     ))

\myscore \mus #(list lyr lyrii)

lyr.png