Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Freitag, 28. August 2020, 18:24

Titel: Akkorde und Melodie in einer Variable: Akkorde oben? [GELÖST]
Beitrag von: ingmar am Freitag, 28. August 2020, 18:24
Liebe Freunde,

ich habe je eine Variable mit Melodie, Akkorden und zweiter Stimme.

Nun kombiniere ich Melodie und Akkorde so, dass die Akkorde oben stehen. Das funktioniert auch (erster Score).

Dann nutze ich die Melodie innerhalb einer Partitur; ich füge die zweite Stimme hinzu. Schwupps, stehen die Akkorde unterhalb der Melodie! Das möchte ich aber nicht. Was kann ich tun?

Danke für Eure Hilfe!
--ingmar

\version "2.20.0"
mel = \relative { c'2 e f4 a g f e2 g4 c d1 }
akk = \chords { c1 f c g2 d:m }
zweite = \relative { c'1 a c g2 f }

beides = << \akk \mel >>

\score { \beides }

  \score { \new StaffGroup <<
\new Staff {
\beides }
\new Staff {
\zweite }
         >>
}
Titel: Antw:Akkorde und Melodie in einer Variable: Akkorde oben?
Beitrag von: Malte am Samstag, 29. August 2020, 08:29
Vermutung: Du hast hier den ChordNames-Kontext (erzeugt durch \chords) und den Staff-Kontext (implizit erzeugt bei der Definition von ,,beides") in einen weiteren Staff-Kontext geschachtelt. Lösung: in der Partitur keinen expliziten zweiten Staff-Kontext anlegen und gegebenenfalls, nämlich falls du einen expliziten Staff haben willst, den schon in der Definition von ,,mel" oder ,,beides" anlegen:

mel = \new Staff \relative { ... }
% ODER
beides = << \akk \new Staff \mel >>
Titel: re: Akkorde und Melodie in einer Variable: Akkorde oben?
Beitrag von: ingmar am Samstag, 29. August 2020, 19:57
Danke!

Ich denke, ich weiß, was zu tun ist.

Gruß,
--ingmar
Titel: Antw:Akkorde und Melodie in einer Variable: Akkorde oben?
Beitrag von: Manuela am Montag, 31. August 2020, 13:05
Wenn du alle Contexte explizit angibst, dann kannst du die Chordnames nach Belieben anordnen.

\version "2.20.0"
\language "deutsch"

mel = \relative { c''4 \repeat unfold 15 c }
akk = \chords { c1 q q q }
zweite = \relative { c'4 \repeat unfold 15 c }

\score {
  \new StaffGroup
  <<
    \new ChordNames \akk
    \new Staff
    <<
      \new Voice { \voiceOne \mel }
      \new Voice { \voiceTwo \zweite }
    >>
    \new Staff \zweite
  >>
}

\score {
  \new StaffGroup
  <<
    \new Staff
    <<
      \new Voice { \voiceOne \mel }
      \new Voice { \voiceTwo \zweite }
    >>
    \new ChordNames \akk
    \new Staff \zweite
  >>
}

\score {
  \new StaffGroup
  <<
    \new Staff
    <<
      \new Voice { \voiceOne \mel }
      \new Voice { \voiceTwo \zweite }
    >>
    \new Staff \zweite
    \new ChordNames \akk
  >>
}


Update: du kannst mit alignAboveContext bzw. alignBelowContext die ChordNames zusätzlich nach Bedarf verschieben.

\score {
  \new StaffGroup
  <<
    \new Staff = "1"
    <<
      \new Voice { \voiceOne \mel }
      \new Voice { \voiceTwo \zweite }
    >>
    \new Staff { \zweite }
    \new ChordNames
    {
      \set alignAboveContext = #"1"
      \chordmode { c1 q q q }
    }
  >>
}


Funktioniert allerdings nur mit \chordmode, nicht mit \chords