Mehrere verschiedene Akkord-Varianten gleichzeitig setzen?

Begonnen von thw, Donnerstag, 31. Oktober 2019, 14:19

« vorheriges - nächstes »

thw

Hallo zusammen,

ich begleite ein Instrumentstück auf der Gitarre (nur Akkorde), dafür gibt es ein Lilypondfile mit passenden Harmonien (Akkorde mittels \chordmode). Nun möchte ich zur Vereinfachung gern einen Kapodaster nutzen und deshalb gern die Akkorde so setzen, wie ich sie greife (anstatt der tatsächlich erklingenden). Die Melodien an sich bleiben aber wie sie sind. Das ist mit \transpose auch soweit alles kein Problem.

Allerdings würde ich gern auch die richtigen Akkorde dastehen haben, falls mal noch jemand anders mitspielt oder so. Im Moment habe ich einfach beide Varianten mit zwei ChordName-Umgebungen übereinander gesetzt, allerdings gefällt mir das optisch nicht besonders und ist auch oft Platzverschwendung:


\version "2.19.83"

melody = \relative c' {
  \clef treble
  \key c \major
  \time 4/4

  a4 b c d
}

harmonies = \chordmode {
  a2 c
}

\score {
  <<
    \new ChordNames {
      \harmonies
    }
    \new ChordNames {
      \transpose c g \harmonies
    }
    \new Voice { \melody }
  >>
  \layout { }
}


Ist es möglich, die beiden ChordName-Umgebungen zu kombinieren, so dass die transponierten Akkorde direkt neben/hinter den originalen stehen (z.B. etwas kleiner oder in Klammern oder so)? Wenn ja, wie? Falls nicht, hat jemand eine alternative Idee, wie man so etwas umsetzen köntne?

Danke und viele Grüße,
thw

harm6

Hallo,

ich hab' mal addTransposedChords geschrieben, eine scheme-function die einen pitch erwartet, um den dann transponiert wird, immer relativ zu middle-c.
Setze chordNameFunction im \with des betreffenden ChordNames-context auf diese Funktion und gebe die Tonhöhe an um die transponiert werden soll.
Als Ergebnis erhäst Du dann das übliche untransponierte chord-markup und das transponierte.
Formatiert ist das Ganze am Ende von add-transposed-chord-name, ich habe mit column, small und parenthesize gearbeitet, aber andere Designs sind möglich. Du kannst mit all den üblichen markup-commands dort arbeiten.

Ehrlich gesagt bin ich im Zweifel, ob es der Mühe Wert ist, denn Du kannst ja auch die ursprünglichen zwei ChordName-contexts individuell konfigurieren und die Abstände zwischen ihnen einregeln.

Nichtsdestotrotz hier der code:


\version "2.19.83"

#(define (add-transposed-chord-name pitch-to-transpose)
    (lambda (in-pitches bass inversion context)
      (let* ((transposed-in-pitches
               (if (every ly:pitch? in-pitches)
                   (map
                     (lambda (p)
                       (ly:pitch-transpose p pitch-to-transpose))
                     in-pitches)
                   '()))
             (transposed-bass
               (if (ly:pitch? bass)
                   (ly:pitch-transpose bass pitch-to-transpose)
                   '()))
             (transposed-inversion
               (if (ly:pitch? inversion)
                   (ly:pitch-transpose inversion pitch-to-transpose)
                   '()))
             (chord-markup
               (ignatzek-chord-names in-pitches bass inversion context))
             (transposed-chord-markup
               (ignatzek-chord-names
                 transposed-in-pitches
                 transposed-bass
                 transposed-inversion
                 context)))
    #{
    \markup
      \column {
        $transposed-chord-markup
        \small \parenthesize $chord-markup 
      }
    #})))

addTransposedChords =
#(define-scheme-function (t-pitch) (ly:pitch?)
  (add-transposed-chord-name t-pitch))


melody = \relative c' {
  \time 4/4
  a4 b c d
}

harmonies = \chordmode {
  c d:5-.7.9-.13 e:m
}

\score {
  <<
    \new ChordNames
      \with { chordNameFunction = \addTransposedChords g }
      \harmonies
    \new Voice \melody
  >>
  \layout { }
}


Gruß,
  Harm

trulli

#2
Hallo thw,

ich bin im Moment zu dumm die Entwicklerversion von Lily zu installieren.::)
Ich weiß aber, was harm meint. Letztlich ist das wohl alles keine gute Lösung (also auch deine), weil es beim Lesen der Akkorde das Auge belastet.

Könnte es etwas bringen, wenn man die originalen Akkorde einfach unter das System schreibt? Als Begleiter schaut man doch zuerst nach oben, um die Akkorde zu lesen. Die unteren Akkorde könnte man dann noch kleiner machen, damit sie mehr im Notentext "untergehen".

\version "2.18.2"

melody = \relative c' {
  \clef treble
  \key c \major
  \time 4/4

  a4 b c d
}

harmonies = \chordmode {
  a2 c
}

\score {
  << 
    \new ChordNames {
      \transpose c g \harmonies
    }
    \new Voice { \melody }
   
    \new ChordNames { \override ChordName.font-size = -4
      \harmonies
    }
  >>
  \layout { }
}


LG trulli