Autor Thema: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)  (Gelesen 2361 mal)

Manuela

  • Member
Hi,

für Grobs gibt es vorgefertigte Befehle wie \xxxxDown, \xxxxUp, mit denen die Dinger mal oberhalb, mal unterhalb anordnen kann.
Mit Lyrics ist das etwas anderes, weil es sich um einen Context handelt.

Der Hintergrund: es gibt zweitweise eine 2. Stimme mit einem eigenen Text, der unterhalb des Staffs stehen soll. Der Text für die erste Stimme soll oben stehen, so lange es die 2. Stimme gibt. Warum die erste Stimme nicht die ganze Zeit oben steht, ist leicht erklärt, es gibt nämlich auch noch Chordnames, die oberhalb stehen. Außerdem steht bei allen anderen Liedern (setze gerade ein Buch mit Volksliedern) den Text unten.

Hier ein Beispiel (ohne Chordnames)

\version "2.18.2"
sopMusic = \relative c'' {
  c4 c c8[( b)] c4 c4 c c8[( b)] c4
}
sopWords = \lyricmode {
  hi hi hi hi
  ab hier o -- ben?
}

altoMusic = \relative c' {
  s1 e4 f d e
}
altoWords = \lyricmode {
  ha ha ha ha
  }

\score {
<<
    \new Staff = "women" <<
      \new Voice = "sopranos" { \voiceOne \sopMusic  }
      \new Voice = "altos" { \voiceTwo \altoMusic  }
    >>
    \new Lyrics \with { alignBelowContext = #"women" }
      \lyricsto "sopranos" \sopWords
    \new Lyrics \with { alignBelowContext = #"women" }
      \lyricsto "altos" \altoWords
   >>
}

Ich habe auch einen Workaround gebastelt, wo ich die erste Stimme aufteile auf einen Teil, wo der Text unten steht und einen Teil, wo der der Text oben steht. Leider ist der Text unterhalb zu weit weg vom Staff, \override LyricText.outside-staff-priority = #'() bewirkt nichts.

Update: ich sehe gerade, wieso outside-staff-priority... nichts nützt (Lyrics ist kein grob, oder irre ich da?)
Der Text müsste jedenfalls näher an den Staff, die 2. Stimme verschiebt ihn nach unten, obwohl horizontal genug Platz wäre.

Update: Screenshot beigefügt (nicht vom Minimalbeispiel, sondern von den tatsächlichen Noten)
« Letzte Änderung: Montag, 12. September 2016, 15:44 von Manuela »

fugenkomponist

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das?
« Antwort #1 am: Montag, 12. September 2016, 11:04 »
Kontexte sind fest untereinander angeordnet, du wirst ihre Reihenfolge vermutlich nicht mitten im Stück ändern können. Da man aber ja in Noten zwischen Kontexten wechseln kann, hab ich mir überlegt, daß folgendes gehen sollte:
\version "2.18.2"
\language "deutsch"

<<
  \new Lyrics = "above" \lyricmode {
    a4 b c d
  }
  \new Staff \relative {
    c'4 d e f g a h c
  }
  \new Lyrics = "below" \lyricmode {
    A4 B C D
    \change Lyrics = "above"
    E F G H
  }
>>
Das funktioniert aber leider mit Lyrics anscheinend nicht so wie mit Staffs; wär ja in Ordnung, wenn auch schade, aber die Fehlermeldung find ich komisch:
warning: cannot change `Lyrics' to `above': not changing to same context type: Lyrics
   
    \change Lyrics = "above"

Edit: ein \set alignAboveContext = "voice" (mit einem Staff namens "voice") an gleicher Stelle hat ebenfalls keine Auswirkungen.
« Letzte Änderung: Montag, 12. September 2016, 11:10 von fugenkomponist »

Manuela

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das?
« Antwort #2 am: Montag, 12. September 2016, 11:54 »
Hallo fugenkomponist

ein interessanter Ansatz, auf den ich nicht gekommen wäre.

Es scheint, dass kein Weg um die Aufteilung der Noten der oberen Stimme auf 2 Stimmen mit 2 Lyric-Kontexten herumführt. Woraus sich für mich die Frage ergibt, wie kriege ich den Kontext näher an den Staff. Falls du einen Tipp für mich hast, könntest du mir ewig langes Herumprobieren ersparen.

Ich habe schon ziemlich viel in Lily und Scheme geschnallt, aber mit der vertikalen Anordnung kämpfe ich regelmäßig, die Abstände sind entweder zu groß oder zu klein. Und dann fange ich an, alle möglichen Parameter durchzuprobieren in der Hoffnung, dass sich endlich einmal etwas in die richtige Richtung verschiebt.

Manuela

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das?
« Antwort #3 am: Montag, 12. September 2016, 15:43 »
Mit der "Wunderwaffe" extra-offset klappt es, man muss nur die passenden Werte finden. Und den Spanner muss man auch mitnehmen.

  \override LyricText.extra-offset = #'(0 . 12)
  \override LyricExtender.extra-offset = #'(0 . 12)

fugenkomponist

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #4 am: Montag, 12. September 2016, 17:52 »
Du kennst vermutlich inzwischen meine Meinung zu extra-offset, aber je nach Einsatzgebiet gehts ja. Es fehlt allerdings noch LyricHyphen ;)

harm6

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #5 am: Montag, 12. September 2016, 21:31 »
Manuela,

ich steh offensichtlich momentan auf dem Schlauch ...
Im an Deinen ersten post angehängten Bild sind beide Texte doch unten, willst Du genau das oder was anderes??

Offensichtlich versteh ich weder die Frage noch Deine Lösung. Kannst Du mal den vollständigen code Deiner Lösung posten?

Gruß,
  Harm


Manuela

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #6 am: Montag, 12. September 2016, 21:45 »
ich steh offensichtlich momentan auf dem Schlauch ...
Im an Deinen ersten post angehängten Bild sind beide Texte doch unten, willst Du genau das oder was anderes??

Offensichtlich versteh ich weder die Frage noch Deine Lösung. Kannst Du mal den vollständigen code Deiner Lösung posten?

Hallo Harm,

mache ich  ;)

Du musst aber entschuldigen, ich stelle jetzt keinen Minimalcode ein. Es geht um den Text der 2. Stimme, der unterhalb stehen soll, währenddessen der Text der 1. Stimme nach oben wandert. Ich sehe jetzt, das überlappt sich mit den Akkorden (der Nachteil von extraoffset), das werde ich noch ein wenig nachbessern.

Die Lösung ist natürlich nicht optimal, aber für mich tut es das einstweilen  :)

harm6

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #7 am: Dienstag, 13. September 2016, 00:56 »
Danke für den Deinen Code, ich wollte ja auch den vollständigen haben ;)

Aber jetzt da ich das Ergebnis sehe, frage ich mich warum Du das überhaupt so machen willst. Der kleine Bildausschnitt aus Deinem ersten post ist für mich viel überzeugender.
So zwingst Du die Sänger ja plötzlich woanders hin zu schauen.

Gruß,
  Harm

Manuela

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #8 am: Dienstag, 13. September 2016, 05:31 »
Aber jetzt da ich das Ergebnis sehe, frage ich mich warum Du das überhaupt so machen willst. Der kleine Bildausschnitt aus Deinem ersten post ist für mich viel überzeugender.

Du hast irgendwie recht. In der Vorlage wird das so gehandhabt, aber da geht der Abschnitt mit dem kleinen Text über genau eine Zeile.

Schaut jetzt so aus
« Letzte Änderung: Dienstag, 13. September 2016, 05:51 von Manuela »

harm6

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #9 am: Dienstag, 13. September 2016, 21:11 »
Hallo Manuela,

das Thema hat mich noch nicht losgelassen. ;)

Ich würde es so machen (diverse Einstellungen habe ich der Vereinfachung wegen weggelassen):
\version "2.19.47"

\language "deutsch"

baretteMelody =
\relative c' {
  \key g \major
  \set Timing.beamExceptions = #'()
  d4 d g g h8  a g a h4 g
  g4. h8 a g fis g a4 a a r e e a a
  c8 h a h c4 a
  \slurDashed
  d4( d8 ) e\noBeam d4 c h a g \breathe d \bar "||"
  \slurSolid
  %% why not \repeat volta ...
  \bar ".|:"
  <<
    \context Voice = "voice" {
      \voiceOne
      g2 g
      h4^( a g fis ) e2 e
      a4( h c a)
      h2 h4. h8 h4 c d h c^( d c d ) h2
  }
   \new Voice = "alt" {
      \set Voice.fontSize = #-2
      \voiceTwo
      g4 d g d
      g d
      g( d )
      e h
      e( h ) e
      h e ( fis )
      g2 g4. g8
      g4 a h g
      a( d, e fis) g2
   }
  >>
  \oneVoice r
  \bar ":|."
}

chrds = \chordmode {
g1 g c d a:m a:m d:7 g4 d:7 g2 g1 g e:m
\override ChordName.text =
\markup \italic \tiny \rounded-box
   \with-color #red "no chords anymore? "
e:m
}

baretteLyrics = \lyricmode {
  \set stanza = #"1. "
  Vom Ba -- ret -- te schwankt -- _ die -- _  Fe --  der,
  wiegt und biegt -- _ im -- _ Win -- de sich.
  Un -- ser Wams von Büf -- _ fel -- _ le -- der
  ist   zer -- fetzt von
  Hieb und Stich.
  Ja
  Stich und Hieb __  und ein Lieb __
  muß ein, ja muß ein Lands -- knecht ha --  ben.
 
}

altLyr = \lyricmode {
  Stich und Hieb und Stich und Hieb __ und ein Lieb __ und ein Lieb __
}

\score {
  <<
    \new ChordNames = "crds" \chrds
   
    \new Staff = "staff" \new Voice = "voice" \baretteMelody
    \new Lyrics = "alt" \with { fontSize = #-6 } \lyricsto "alt" \altLyr
   
    \new Lyrics = "down" \lyricsto "voice" \baretteLyrics
   
  >>
  \layout {
    system-count = 4
  }
}

Falls Du aber wirklich Dein ursprüngliches Vorhaben umsetzen willst so:

\version "2.19.47"

\language "deutsch"

baretteMelody =
\relative c' {
  \key g \major
  \set Timing.beamExceptions = #'()
  d4 d g g h8  a g a h4 g
  g4. h8 a g fis g a4 a a r e e a a
  c8 h a h c4 a
  \slurDashed
  d4( d8 ) e\noBeam d4 c h a g \breathe d \bar "||"
 \slurSolid
 %% why not \repeat volta ...
 \bar ".|:"
  <<
    \context Voice = "voice" {
      \voiceOne
      g2 g
      h4^( a g fis ) e2 e
      %% Here some trickery
      a4-\tweak transparent ##t ^(\( h c) a\)
      h2 h4. h8 h4 c d h c^( d c d ) h2
  }
   \new Voice = "alt" {
      \set Voice.fontSize = #-2
      \voiceTwo
      g4 d g d
      g d
      g( d )
      e h
      e( h ) e
      h e ( fis )
      g2 g4. g8
      g4 a h g
      a( d, e fis) g2
   }
  >>
  \oneVoice r
 
  \bar ":|."
}

chrds = \chordmode {
g1 g c d a:m a:m d:7 g4 d:7 g2 g1 g e:m
\override ChordName.text =
\markup \italic \tiny \rounded-box
   \with-color #red "no chords anymore? "
e:m
}

baretteLyrics = \lyricmode {
  \set stanza = #"1. "
  Vom Ba -- ret -- te schwankt -- _ die -- _  Fe --  der,
  wiegt und biegt -- _ im -- _ Win -- de sich.
  Un -- ser Wams von Büf -- _ fel -- _ le -- der
  ist   zer -- fetzt von
  Hieb und Stich.
  Ja
  %% Here some trickery
  %% send this to another Lyrics-context
  \context Lyrics = "up" {
  Stich und Hieb __  und ein Lieb __
  }
  \skip 1 muß ein, ja muß ein Lands -- knecht ha --  ben.
 
}

altLyr = \lyricmode {
  Stich und Hieb und Stich und Hieb __ und ein Lieb __ und ein Lieb __
}
<<

    \new ChordNames = "crds" \chrds
   
\new Staff = "staff"
  \new Voice = "voice" \baretteMelody
 
\new Lyrics = "up" \with {
      alignAboveContext = #"staff"
      % lyrics above a staff should have this override
      \override VerticalAxisGroup.staff-affinity = #DOWN
    }
    \lyricsto "voice" { \repeat unfold 37 \skip 1  }
   
\new Lyrics = "down" \lyricsto "voice" \baretteLyrics

\new Lyrics = "alt" \with { fontSize = #-6 } \lyricsto "alt" \altLyr
>>

png im Anhang

Gruß,
  Harm

EDIT
\language "deutsch" im code eingefügt
« Letzte Änderung: Mittwoch, 14. September 2016, 01:00 von harm6 »

Manuela

  • Member
Re: Lyric Text mittendrin von unten nach oben wechseln - geht das? (gelöst)
« Antwort #10 am: Dienstag, 13. September 2016, 21:44 »
Danke Harm, werde ich ansehen  :)