Leitereigene Mehrklänge

Zur Navigation springen Zur Suche springen

Alle leitereigenen Drei-, Vier- und Fünfklänge einer Dur-Tonart werden erzeugt.

Eine Mustervorlage, wie man beliebige Scores automatisiert zu einem Buch zusammenfassen kann, gibt es hier.[1]

Scheme-Code

\version "2.19.83"
\language "deutsch"
#(use-modules (ice-9 regex))
\include "Exceptions.ily"

#(define (pitches->chord plist)
   (make-music 'EventChord 'elements
     (if (list? plist)
         (map (lambda (p)
                (make-music
                 'NoteEvent 'duration (ly:make-duration 0)
                 'pitch p))
           plist)
         (make-music
          'NoteEvent 'duration (ly:make-duration 0)
          'pitch plist)
         )))

%% create all n-th chords from scale
%% actually we staple every other pitch from the-scale
%% until we reach n

%% create chords with arbitraty intervals from the scale
%% input: scale
%% list: the distances of the notes, 3=terz, 4=quart ...

#(define (stacked-intervals the-scale list-or-number-or-pair)
   ;; the-scale: music from which the pitchlist is constructed
   ;; usually a scale, but could be any music
   ;; duplicate pitches are removed and sorting according to pitch height is done
   ;; list-or-number-or-pair: tells the programm which intervals to produce
   ;; list: a list of chords, 3=third, 4=forth etc. '(2 4) creates a quart-sext chord
   ;; pair: '(a . b)  a: how many notes the chord contains, b: the interval, 3=third, 4=forth
   ;; number: terzes are stapled, 3=triad, 4=tetrads, 5=pentachord etc
   ;; actually the program does not much counting
   ;; a list of intervals is created by picking notes in the order they appear
   ;; in the scale leaving gaps defined by the list
   (let* ((scpi (music-pitches the-scale))
          (pili (sort
                 (delete-duplicates scpi) ly:pitch<?))
          (m (length pili))
          (elist (cond
                  ((list? list-or-number-or-pair)
                   ;; we need to add an element to the list
                   ;; otherwise the last element of the list would not appear
                   ;; in the result
                   (append list-or-number-or-pair '(1)))
                  ((pair? list-or-number-or-pair)
                   ;; car: number of notes
                   ;; cdr: distance, 3=third, 4=forth etc.
                   (make-list  (car list-or-number-or-pair) (cdr list-or-number-or-pair)))
                  ((number? list-or-number-or-pair)
                   ;; standard definition: chord consists of thirds
                   (make-list list-or-number-or-pair 3))))
          (n (length elist)))
     (map
      (lambda (w)
        (let ((u 0))
          (map
           (lambda (x)
             (let* ((y (modulo (+ u w) m))
                    (q (quotient (+ u w) m))
                    (z (list-ref pili y))
                    (a (ly:pitch-alteration z))
                    (o (ly:pitch-octave z))
                    (n (ly:pitch-notename z))
                    (p (ly:make-pitch (+ o q) n a)))
               (set! u (+ u (list-ref elist x) -1))
               p))
           (iota n))))
      (iota m))))

CreateIntervals=
#(define-music-function (the-scale pair-list-number)(ly:music? scheme?)
   ;; creates the pure music without chordnames and other staff
   (make-sequential-music
    (map (lambda(x) (pitches->chord x))
      (stacked-intervals the-scale pair-list-number))))

dynamictext =
#(define-event-function (text) (markup?)
   (if (string? text)
       (let* ((underscores-replaced
               (string-map
                (lambda (x) (if (eq? x #\_) #\space x))
                text))
              (split-text (string-split underscores-replaced #\space))
              (formatted (map
                          (lambda (word)
                            (if (string-match "^[mrzfps]*$" word)
                                (markup #:dynamic word)
                                (markup #:normal-text #:italic word)))
                          split-text)))
         #{
           #(make-dynamic-script (make-line-markup formatted))
         #})
       ;; user provided a full-blown markup, so we don't mess with it:
       #{
         #(make-dynamic-script (markup #:normal-text text))
       #}))

#(define (pitch-alteration-semitones pitch)
   (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

#(define (conditional-string-downcase str condition)
   (if condition
       (string-downcase str)
       str))

%% Notenname als Markup mit deutschen Notennamen
#(define (note-name->my-markup pitch lowercase?)
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
                   (cons 7 (+ 1 alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      ;(make-simple-markup
      (list
       (string-append
        (conditional-string-downcase
         (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?)
        (if (or (equal? (car n-a) 2) (equal? (car n-a) 5))
            (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
            (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))

DurStufen = {
  s1\dynamictext "I"  s\dynamictext "ii"
  s\dynamictext "iii"  s\dynamictext "IV"
  s\dynamictext "V"  s\dynamictext "vi"
  s\dynamictext "vii"
}

Stufen = {
  s1-"I" s1-"ii" s1-"iii" s-"IV" s-"V" s-"vi" s-"vii"
}

drei =
#(define-music-function (p leiter leiter1 leiter2)
   (ly:pitch? ly:music? ly:music? ly:music?)
   (let* ((was (ly:pitch-notename p))
          (o1 (cond
               ((equal? was 2) 0) ; e
               ((equal? was 3) 0) ; f
               ((equal? was 4) 0) ; g
               (else -1)))
          (o2 (if (equal? was 4) -1 -1))
          (u1 (if (equal? was 4) 1 1))
          (u2 (cond
               ((equal? was 2) 0) ; e
               ((equal? was 3) 1) ; f
               ((equal? was 4) 1) ; g
               (else 0)))
          )
     (display was)
     #{
       <<
         \new PianoStaff
         \with {
           instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Tonleiter "
         }
         \new Voice \transpose c $p { \key c \major $leiter }
         \new Dynamics \DurStufen
         \new PianoStaff
         \with {
           instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Grundstellung "
         }
         <<
           \new Staff \transpose #(ly:make-pitch -1 0) $p { \key c \major \CreateIntervals $leiter #3 }
           \new ChordNames \transpose c $p \CreateIntervals $leiter #3
           \new Staff { \clef bass \transpose #(ly:make-pitch 1 0) $p { \key c \major \CreateIntervals $leiter #3 } }
           \new Dynamics \DurStufen
         >>
         \new PianoStaff
         \with {
           instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "1. Umkehrung "
         }
         <<
           \new Staff \transpose #(ly:make-pitch o1 0) $p { \key c \major \CreateIntervals $leiter1 #'(3 4) }
           \new ChordNames \transpose c $p \CreateIntervals $leiter #3
           \new Staff { \clef bass \transpose #(ly:make-pitch u1 0) $p { \key c \major \CreateIntervals $leiter1 #'(3 4) } }
           \new Dynamics \DurStufen
         >>
         \new PianoStaff
         \with {
           instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "2. Umkehrung "
         }
         <<
           \new Staff \transpose #(ly:make-pitch o2 0) $p { \key c \major \CreateIntervals $leiter2 #'(4 3) }
           \new ChordNames \transpose c $p \CreateIntervals $leiter #3
           \new Staff { \clef bass \transpose #(ly:make-pitch u2 0) $p { \key c \major \CreateIntervals $leiter2 #'(4 3) } }
           \new Dynamics \DurStufen
         >>
       >>
     #}
     ))

dreik =
#(define-scheme-function (p leiter leiter1 leiter2)
   (ly:pitch? ly:music? ly:music? ly:music?)
   (scorify-music (drei p leiter leiter1 leiter2)))

vier =
#(define-music-function (p leiter l1 l2 l3)
   (ly:pitch? ly:music? ly:music? ly:music? ly:music?)
   (let* ((was (ly:pitch-notename p))
          (o1 (cond
               ((equal? was 2) 0) ; e
               ((equal? was 3) 0) ; f
               ((equal? was 4) 0) ; g
               (else -1)))
          (o2 (if (equal? was 4) -1 -1))
          (o3 -1)
          (u1 (if (equal? was 4) 1 1))
          (u2 (if (equal? was 4) 1 0))
          (u3 (cond
               ((equal? was 2) 1) ; e
               ((equal? was 3) 1) ; f
               ((equal? was 4) 1) ; g
               (else 0)))
          )
     #{
       {
         <<
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Tonleiter "
           }
           {
             <<
               \new Voice \transpose c $p { \key c \major $leiter }
               \context Voice \Stufen
             >>
           }
           \new ChordNames \transpose c $p \CreateIntervals $leiter #4
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Grundstellung "
           }
           {
             <<
               \new Staff \transpose c $p { \key c \major \CreateIntervals $leiter #4 }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #4
               \new Staff { \clef bass \key $p \major \transpose c'' $p \CreateIntervals $leiter #4 }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "1. Umkehrung "
           }
           {
             <<
               \new Staff \transpose #(ly:make-pitch o1 0) $p { \key c \major \CreateIntervals $l1 #'( 3 3 2) }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #4
               \new Staff { \clef bass \transpose #(ly:make-pitch u1 0) $p { \key c \major\CreateIntervals $l1 #'( 3 3 2) } }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "2. Umkehrung "
           }
           {
             <<
               \new Staff \transpose #(ly:make-pitch o2 0) $p { \key c \major \CreateIntervals $l2 #'( 3 2 3) }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #4
               \new Staff { \clef bass \transpose #(ly:make-pitch u2 0) $p { \key c \major\CreateIntervals $l2 #'( 3 2 3) } }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "3. Umkehrung "
           }
           <<
             \new Staff \transpose #(ly:make-pitch o3 0) $p { \key c \major \CreateIntervals $l3 #'( 2 3 3) }
             \context Voice \Stufen
             \new ChordNames \transpose c $p \CreateIntervals $leiter #4
             \new Staff { \clef bass \transpose #(ly:make-pitch u3 0) $p { \key c \major \CreateIntervals $l3 #'( 2 3 3) } }
           >>
         >>
       }
     #}
     ))

vierk =
#(define-scheme-function (p leiter leiter1 leiter2 leiter3)
   (ly:pitch? ly:music? ly:music? ly:music? ly:music?)
   (scorify-music (vier p leiter leiter1 leiter2 leiter3)))

funf =
#(define-music-function (p leiter l1 l2 l3 l4)
   (ly:pitch? ly:music? ly:music? ly:music? ly:music? ly:music?)
   (let* ((was (ly:pitch-notename p))
          (o1 (cond
               ((equal? was 2) 0) ; e
               ((equal? was 3) 0) ; f
               ((equal? was 4) 0) ; g
               (else -1)))
          (o2 (if (equal? was 4) -1 -1))
          (o3 -1)
          (o4 -1)
          (u1 (if (equal? was 4) 1 1))
          (u2 (if (equal? was 4) 1 (if (equal? was 2) 1 0)))
          (u3 (cond
               ((equal? was 2) 1)  ; e
               ((equal? was 3) 1)  ; f
               ((equal? was 4) 1) ; g
               (else 0)))
          (u4 (cond
               ((equal? was 2) 1)  ; e
               ((equal? was 3) 1)  ; f
               ((equal? was 4) 1) ; g
               (else 1)))
          )
     #{
       {
         <<
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Tonleiter "
           }
           {
             <<
               \new Voice \transpose c $p { \key c \major $leiter }
               \context Voice \Stufen
             >>
           }
           \new ChordNames \transpose c $p \CreateIntervals $leiter #5
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "Grundstellung "
           }
           {
             <<
               \new Staff \new Voice \transpose c $p { \key c \major \CreateIntervals $leiter #5 }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #5
               \new Staff \new Voice { \clef bass \key $p \major \transpose c'' $p \CreateIntervals $leiter #5 }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "1. Umkehrung "
           }
           {
             <<
               \new Staff \new Voice \transpose #(ly:make-pitch o1 0) $p { \key c \major \CreateIntervals $l1 #'( 3 3 3 2) }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #5
               \new Staff { \clef bass \transpose #(ly:make-pitch u1 0) $p { \key c \major\CreateIntervals $l1 #'( 3 3 3 2) } }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "2. Umkehrung "
           }
           {
             <<
               \new Staff \transpose #(ly:make-pitch o2 0) $p { \key c \major \CreateIntervals $l2 #'( 3 3 2 3) }
               \context Voice \Stufen
               \new ChordNames \transpose c $p \CreateIntervals $leiter #5
               \new Staff { \clef bass \transpose #(ly:make-pitch u2 0) $p { \key c \major\CreateIntervals $l2 #'( 3 3 2 3) } }
             >>
           }
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "3. Umkehrung "
           }
           <<
             \new Staff \transpose #(ly:make-pitch o3 0) $p { \key c \major \CreateIntervals $l3 #'( 3 2 3 3) }
             \context Voice \Stufen
             \new ChordNames \transpose c $p \CreateIntervals $leiter #5
             \new Staff { \clef bass \transpose #(ly:make-pitch u3 0) $p { \key c \major \CreateIntervals $l3 #'( 3 2 3 3) } }
           >>
           \new PianoStaff
           \with {
             instrumentName = \markup \fontsize #2 \override #'(font-features . ("smcp")) "4. Umkehrung "
           }
           <<
             \new Staff \transpose #(ly:make-pitch o4 0) $p { \key c \major \CreateIntervals $l4 #'( 2 3 3 4) }
             \context Voice \Stufen
             \new ChordNames \transpose c $p \CreateIntervals $leiter #5
             \new Staff { \clef bass \transpose #(ly:make-pitch u4 0) $p { \key c \major \CreateIntervals $l4 #'( 2 3 3 3) } }
           >>
         >>
       }
     #}
     ))

funfk =
#(define-scheme-function (p leiter leiter1 leiter2 leiter3 leiter4)
   (ly:pitch? ly:music? ly:music? ly:music? ly:music? ly:music?)
   (scorify-music (funf p leiter leiter1 leiter2 leiter3 leiter4)))

%% hier kommen die Routinen für die Erzeugung der Ausgabe

foo = \paper { ragged-right = ##f }

#(define (make-book-parts-with-top-markup markup scores)
   (let* ((output-def (ly:make-output-def))
          (raw-paper
           (begin
            (ly:output-def-set-variable! output-def 'is-paper #t)
            output-def))
          (bp  #{ \bookpart { $raw-paper } #}))

     (for-each
      (lambda (score) (ly:book-add-score! bp score))
      (cons (list markup) scores))

     bp))

#(define (fill-book-part-paper! bookpart key-value-alist)
   (for-each
    (lambda (key-value)
      (ly:output-def-set-variable!
       (ly:book-paper bookpart) (car key-value) (cdr key-value)))
    key-value-alist))


#(define-markup-command (my-header layout props p text1 text2) (ly:pitch? string? string?)
   (interpret-markup layout props
     #{ \markup \fill-line \override #'(font-features . ("smcp"))
        \override #'(box-padding . 1)
        \override #'(thickness . 2) \override #'(font-size . 4)
        { \null \rounded-box \concat { $text1 #(note-name->my-markup p #f) $text2 } \null }
     #}))

#(define (add-bookparts-to-toplevel-bookparts p leiter leiter1 leiter2 leiter3 leiter4)
   (let* ((bk (ly:make-book $defaultpaper $defaultheader '()))
          (my-funfklang #{ \markup \my-header ##{ $p #} "Leitereigene Fünfklänge " "-Dur" #} )
          (my-dreiklang #{ \markup \my-header ##{ $p #} "Leitereigene Dreiklänge " "-Dur" #} )
          (my-vierklang #{ \markup \my-header ##{ $p #} "Leitereigene Vierklänge " "-Dur" #} )
          (paper-kadenzen #{ \paper { line-width = 160 ragged-right = ##f } #})
          (bk-parts
           (list
            (make-book-parts-with-top-markup ; leere Seite einfügen
             ""
             '())
            (make-book-parts-with-top-markup
             my-dreiklang
             (list (dreik p leiter leiter1 leiter2)))
            (make-book-parts-with-top-markup
             my-vierklang
             (list (vierk p leiter leiter1 leiter2 leiter3)))
            (make-book-parts-with-top-markup
             my-funfklang
             (list (funfk p leiter leiter1 leiter2 leiter3 leiter4)))
            )))
     (for-each
      (lambda (book-part key-values)
        (fill-book-part-paper! book-part key-values))
      bk-parts
      (map
       (lambda (paper)
         (ly:module->alist (ly:output-def-scope paper)))
       (list paper-kadenzen paper-kadenzen paper-kadenzen)))
     (for-each
      (lambda (book-part)
        (ly:parser-define! 'toplevel-bookparts
          (cons book-part (ly:parser-lookup 'toplevel-bookparts))))
      bk-parts)
     ))

myBookparts =
#(define-void-function (mus leiter leiter1 leiter2 leiter3 leiter4)
   (ly:music? ly:music? ly:music? ly:music? ly:music? ly:music?)
   (let ((pitches (music-pitches mus)))
     (for-each
      (lambda (pitch) (add-bookparts-to-toplevel-bookparts pitch leiter leiter1 leiter2 leiter3 leiter4))
      pitches)))

leiter  = \relative c' { c1 d e f g a h }
leiters = \relative c' { e1 f g a h c d }
leitert = \relative c' { g1 a h c d e f }
leiterq = \relative c' { h1 c d e f g a }
leiterd = \relative c' { d1 e f g a h c }

\paper {
  markup-system-spacing.minimum-distance = #5
  markup-markup-spacing.minimum-distance = #5
  score-system-spacing.minimum-distance = #10
  top-markup-spacing.minimum-distance = #10
  markup-system-spacing.basic-distance = 12
  oddHeaderMarkup = ##f
  evenHeaderMarkup = #oddHeaderMarkup
  oddFooterMarkup = #oddHeaderMarkup
  evenFooterMarkup = #oddHeaderMarkup
  ragged-right = ##f
  ragged-last = ##f
  ragged-bottom = ##t
  ragged-last-bottom = ##t
  line-width = 150\mm
}

\layout {

  \context {
    \Staff
    \remove "Time_signature_engraver"
  }

  \context {
    \PianoStaff
    \override SystemStartBrace.collapse-height = #1
  }

  \context {
    \Score
    \override BarNumber.stencil = ##f
    \override KeyCancellation.break-visibility = #all-invisible
    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
    \override StaffGrouper.staffgroup-staff-spacing.padding = #4
    \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #1
    \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.minimum-distance = #3
    %\remove "Default_bar_line_engraver"
    automaticBars =##f
    \override SpacingSpanner.strict-note-spacing = ##t
  }

  \context {
    \ChordNames
    \alias ChordNames
    \override ChordName.self-alignment-X = #LEFT
    chordNameLowercaseMinor = ##f
    \override Rest.stencil = ##f
    chordNoteNamer = #(chord-name->german-markup #f)
    chordChanges = ##f
    chordNameLowercaseMinor = ##f
    chordNameExceptions = #chExceptions
    chordRootNamer = #germanChords
    majorSevenSymbol = \markup { maj7 }
    \override ChordName.font-name = #"Arial Narrow"
    \override ChordName.layer = #2
    \override ChordName.extra-spacing-width = #'(+inf.0 . -inf.0)
    \override ChordName.font-size = #1
    noChordSymbol = ##f
    \override VerticalAxisGroup.staff-affinity = #UP
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #1
  }

  \context {
    \Dynamics
    \override VerticalAxisGroup.staff-affinity = #UP
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #1
  }
}

Anwendung

Alle leitereigenen Drei-, Vier- und Fünfklänge in allen Umkehrungen werden für den Dur-Quintenzirkel erzeugt.

\myBookparts < c g d a, e h, fis ges des as, es b, f > \leiter \leiters \leitert \leiterq \leiterd

Resultat

Exceptions.ily

chExceptionMusic = {
  <c>1-\markup { \super "rt" }
  <c es ges>1-\markup { \super "dim" }
  <c es g>1-\markup { \normal-size-super "m" }
  <c e g b>1-\markup { \normal-size-super "7" }
  <c es g b>1-\markup { \normal-size-super "m7" }
  <c es ges heses>1-\markup { \super "dim7" }
  <c g>1-\markup { \super "pw" }
  <c e a>1-\markup {
    \super {
      "6("
      \combine \draw-line #'(1 . 1 ) "5)"
    }
  }
  <c e h>1-\markup {
    \super {
      "7("
      \combine \draw-line #'(1 . 1 ) "5)"
    }
  }
  <c e h d'>1-\markup {
    \super {
      "9("
      \combine \draw-line #'(1 . 1 ) "5)"
    }
  }

  <c e h d' f'>1-\markup {
    \super {
      "11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c g h d' f'>1-\markup {
    \super {
      "11"
      \super {
        "("
        \combine \draw-line #'(1 . 1 ) "3)"
      }
    }
  }
  <c h d' f'>1-\markup {
    \super {
      "11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "3"
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h d' a'>1-\markup { \super "13" }
  <c e g h d' f' a'>1-\markup { \super { "13" \super "add11" } }
  <c e h d' a'>1-\markup {
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h a'>1-\markup {
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h a'>1-\markup {
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h d' f' a'>1-\markup {
    \super {
      "13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h f' a'>1-\markup {
    \super {
      "13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h f' a'>1-\markup {
    \super {
      "13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e f' a'>1-\markup {
    \super {
      "13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "7"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es a>1-\markup {
    "m"
    \super {
      "6" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es h>1-\markup {
    "m"
    \super {
      "7" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es h d'>1-\markup {
    "m"
    \super {
      "9" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es h d' f'>1-\markup {
    "m"
    \super {
      "11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es g h f'>1-\markup {
    "m"
    \super {
      "11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es h f'>1-\markup {
    "m"
    \super {
      "11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es g h d' f' a'>1-\markup {
    m
    \super {
      "13"
    }
  }
<c es g h>1-\markup {
    m
    \super {
      "j"
    }
  }
  <c es g h d' a'>1-\markup {
    m
    \super
    "13" \super {
      "("
      \combine \draw-line #'(1 . 1 ) "11)"
    }
  }
  <c es h d' a'>1-\markup {
    m
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "11)"
      }
    }
  }
  <c es g h a'>1-\markup {
    m
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9"
        \combine \draw-line #'(1 . 1 ) "11)"
      }
    }
  }
  <c es h a'>1-\markup {
    m
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9"
        \combine \draw-line #'(1 . 1 ) "11)"
      }
    }
  }
  <c es a'>1-\markup {
    m \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "7"
        \combine \draw-line #'(1 . 1 ) "9"
        \combine \draw-line #'(1 . 1 ) "11)"
      }
    }
  }
  <c es h d' f' a'>1-\markup {
    m \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es g h f' a'>1-\markup {
    m \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "9)"
      }
    }
  }
  <c es h f' a'>1-\markup {
    m \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es f' a'>1-\markup {
    m \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "7"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h>1-\markup {
    \super {
      "j7" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h d'>1-\markup {
    \super { "j9" }
  }
  <c f g b>1-\markup {
    %\normal-size-super "7"
    \super "7sus4"
  }

<c e g h >1-\markup {
    \normal-size-super { "j7" }
  }
  <c e gis >1-\markup {
    \normal-size-super { "aug" }
  }
  <c es ges h >1-\markup {
    \normal-size-super { "dim7+" }
  }
  <c e h d'>1-\markup {
    \super {
      "j9" \super {
        "("
        % \override #'(offset . -6 ) \underline 5
        \combine \draw-line #'(1 . 1 )
        "5)"
      }
    }
  }
  <c e g h d' f'>1-\markup {
    \normal-size-super { "j11" }
  }
  <c g h d' f'>1-\markup {
    \super {
      "j11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "3)"
      }
    }
  }
  <c e h d' f'>1-\markup {
    \super {
      "j11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c h d' f'>1-\markup {
    \super {
      "j11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "3"
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h d' a'>1-\markup {
    \super {
      "j13"
    }
  }
  <c e h d' a'>1-\markup {
    \super {
      "j13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h a'>1-\markup {
    \super {
      "j13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h a'>1-\markup {
    \super {
      "j13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h d' f' a'>1-\markup {
    \super {
      "j13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c e g h f' a'>1-\markup {
    \super {
      "13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e h f' a'>1-\markup {
    \super {
      "j13" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c e g h d' f' a'>1-\markup {
    \super { "j13" \super "add11" }
  }
  <c f g h d' f' a'>1-\markup {
    \super {
      "13sus4" \super "add11"
    }
  }
  <c f g h d'  a'>1-\markup {
    \super {
      "13sus4"
    }
  }
  <c f g h a'>1-\markup {
    \super {
      "13sus4" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c f g h f' a'>1-\markup {
    \super {
      "13sus4" \super {
        "add11("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es h>1-\markup {
    m \super {
      "j7" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }

  <c es g h d'>1-\markup {
    m
    \super {
      "j9"
    }
  }
  <c es g h d' f'>1-\markup {
    m
    \super {
      "j11"
    }
  }
  <c es h d'>1-\markup {
    m \super {
      "j9" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es g h f'>1-\markup {
    m
    \super {
      "j11"
      \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es h d' f'>1-\markup {
    m \super {
      "j11" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es h f'>1-\markup {
    m
    \super {
      "j11"
      \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9)"
      }
    }
  }
  <c es g h d' f' a'>1-\markup {
    m \super { "j13" }
  }
  <c es h d' f' a'>1-\markup {
    m \super {
      "j13" \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5)"
      }
    }
  }
  <c es g h f' a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "9)"
      }
    }
  }
  <c es h f' a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "5"
        \combine \draw-line #'(1 . 1 )
        "9)"
      }
    }
  }
  <c es h a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "5"
        \combine \draw-line #'(1 . 1 )
        "9"
        \combine \draw-line #'(1 . 1 )
        "11)"
      }
    }
  }
  <c es g h d' a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "11)"
      }
    }
  }
  <c es h d' a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 )
        "5"
        \combine \draw-line #'(1 . 1 )
        "11)"
      }
    }
  }
  <c es h a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 ) "5"
        \combine \draw-line #'(1 . 1 ) "9"
        \combine \draw-line #'(1 . 1 )
        "11)"
      }
    }
  }
  <c es g h a'>1-\markup {
    m
    \super {
      "j13"
      \super {
        "("
        \combine \draw-line #'(1 . 1 ) "9"
        \combine \draw-line #'(1 . 1 )
        "11)"
      }
    }
  }
  <c e g a d' >1-\markup %\scale #'(0.5 . 0.5)
  \fontsize #-4  {
    \translate #'(0 . 1) "6"
    \hspace #-0.5 \draw-line #'(1 . 2 ) \hspace #-0.5 "9"
  }
  %% Roemer-Brandt:
  <c e g d'>1-\markup {
    \super {
      "(add9)"
    }
  }
}

chExceptions =
#(append
  (sequential-music-to-chord-exceptions chExceptionMusic #t)
  ignatzekExceptions)

myBlue = #(rgb-color (/ 22 255) (/ 22 255) (/ 92 255))

#(define ((chord-name->german-markup-text-alteration B-instead-of-Bb) pitch lowercase?)

   (define (pitch-alteration-semitones pitch)
     (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

   (define (conditional-string-downcase str condition)
     (if condition
         (string-downcase str)
         str))

   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -1)))
                   (cons 7 (+ (if B-instead-of-Bb 1 1) alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (conditional-string-downcase
         (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?))
       (let ((alteration (/ (cdr n-a) 2)))
         (cond
          ((and (equal? lowercase? #f) (= alteration FLAT) (= (car n-a) 7)) (make-simple-markup ""))
          ((and (= alteration FLAT) (or (= (car n-a) 5) (= (car n-a) 2) )) (make-simple-markup "s"))
          ((= alteration FLAT) (make-simple-markup "es"))
          ((and (= alteration DOUBLE-FLAT) (or (= (car n-a) 5)(= (car n-a) 2) )) (make-simple-markup "ses"))
          ((= alteration DOUBLE-FLAT) (make-simple-markup "eses"))
          ((= alteration SHARP) (make-simple-markup "is"))
          ((= alteration DOUBLE-SHARP) (make-simple-markup "isis"))
          (else empty-markup)))))))
#(define germanChords (chord-name->german-markup-text-alteration #t))

#(define (Text_align_engraver ctx)
   (let ((scripts '())
         (note-column #f))
     (make-engraver
      (acknowledgers
       ((note-column-interface trans grob source)
        ;; cache NoteColumn in this Voice context
        (set! note-column grob))
       ((text-script-interface trans grob source)
        ;; whenever a TextScript is acknowledged,
        ;; add it to `scripts' list
        (set! scripts (cons grob scripts))))
      ((stop-translation-timestep trans)
       ;; if any TextScript grobs exist,
       ;; set NoteColumn as X-parent
       (for-each (lambda (script)
                   (set! (ly:grob-parent script X) note-column))
         scripts)
       ;; clear scripts ready for next timestep
       (set! scripts '())))))

twF = #(define-music-function ( myNotes )
         (ly:music?)
         #{
           \tweak font-size #-2 $myNotes
         #})

chExBass = {
  <c es g heses>1-\markup \whiteout { "m" }  %% halbverminderter Septakkord
  <c es g b d'>1-\markup \whiteout { "m" } %% c:m9
  <c es ges b d'>1-\markup \whiteout { "m)" \hspace #-3.4 "(" } %% c:m9.5- eingeklammerter Akkord für einbuchstabige AKkordnamen
  <c es g b>1-\markup { "7" }    %% c:m7
  < c es g b d' f' a' >1-\markup { \normal-size-super "o" }  %% c:m13
  <c es g b d' f'>1-\markup { \fontsize #-0.5 "(7)" }  %% c:m11, die 7 in Klammer
}

chUpperBass = { <c g>1-\markup { "" } }

chExBasses = #(append
               (sequential-music-to-chord-exceptions chExBass #t)
               (sequential-music-to-chord-exceptions chUpperBass #t)
               ignatzekExceptions)