wie kann ich einen c7alt im \chordmode darstellen?

Begonnen von Markus W. Kropp, Mittwoch, 28. Juni 2017, 13:58

« vorheriges - nächstes »

Markus W. Kropp

... und hier die Antwort von meinem (studierten! plus praktizierender Profi mit verdammt vielen Konzerten!) Jazzer:

C alt gibt es nicht!

C7 sind die Töne: C E G Bb

C7 alt. lässt sich nicht in einem Vierklang darstellen, da sich die Alterationen auf die Oberstruktur des Akkords bezieht, also auf 9, 11 und 13.


So. Und nun? Wie gesagt, es gibt kein eindeutiges System auf dem man einen eindeutigen Standard mit Lilypond aufbauen könnte. Der Jazzer sagt Calt gibt es nicht. Lilypond stellt es aber dar. Deshalb meine (und auf der englischen Mailingliste) Überlegungen (s.o. in diesem Thread).


LG Markus

iugin

Hallo Markus

Zitatdie Jazzer haben keine absolute, eindeutige Nomenklatur Ihrer Akkorde
Jazz ist Freiheit!
Anders als in der Klassik,wo alles ziemlich genau geschrieben ist, ist das Leadsheet pauschal notiert. Das gibt dem Musiker die komplette Freiheit.
So mit den Akkorden: in der Klassik heisst C7 (also, in der Klassik gibt so eine Notation nicht, aber nehmen wir an) C E G Bb. Nichts anderes.
Im Jazz heisst C7 auch C E G Bb. Aber vielmehr: spiel ein C-Akkord, der die Funktion von einem Septakkord hat. Du kannst dann C7, C9, C#11, C13, Calt, usw. spielen. Du kannst auch den Akkord ersetzen mit einer verwandten Funktion (zB. F# der Tritonus vom C), oder mit was anderes. Bin ich faul, schreibe ich C7. Bin ich pingelig, schreibe ich C7 9 #11. Schliesslich machst du, als Musiker, was du willst. Du musst nur verstehen "Bitte, da irgendwas, das nach Septakkord riecht".
Weil diese Musik entsteht in dem Moment. Und nur dieses Moment ist wichtig.

Lieber Gruss

Eugenio

Markus W. Kropp

Ein Interpret in der Klassik hat auch komplette Freiheit. Nur auf eine andere Art. Gib 10 Interpreten das gleiche Stück von Bach und Du wirst 10 verschiedene Stücke hören.

Ich werde das Thema mal mit meinem Jazzer anschneiden, wenn ich Ihn sehe (kann dauern). Bin gespannt, wie er das sieht. Ich denke, dass es dazu viele verschiedene Sichtweisen gibt. Wie gesagt, der Jazz ist neu für mich (und es ist äußerst spannend).


LG Markus

harm6

#18
Zitat von: MarkusOder man macht einfach einen \chordmode2 auf, der das macht wie von mir vorgeschlagen (C1:blödsinn.7.9+ = C7#9 blödsinn). Interessant, dass es in der Malingliste schon diskutiert wird.

Ein erster Entwurf mit printing-procedure, engraver und neuem context. Allein einen neuen inputmode kann ich nicht adhoc erzeugen. Der parser müsste ihn ja dann auch verstehen. Dazu müßte man den parser patchen und neu LilyPond kompilieren. (Und von parser-code lass ich tunlichst meine Finger.)
Es gibt ohnehin bestimmt noch jede Menge Haken und Ösen ...


\version "2.19.62"
     
#(define (markup-concat-join markups sep)
  "Return concat-markup of @var{markups}, joining them with markup @var{sep}"
  (if (pair? markups)
      (make-concat-markup (list-insert-separator markups sep))
      empty-markup))

#(define (root-list root-strg)
  (cond
    ((string-contains root-strg "is")
     (list (string-capitalize (string-take root-strg 1))
           (make-raise-markup 0.6
             (make-smaller-markup
               (make-musicglyph-markup "accidentals.sharp")))))
    ((or (string-contains root-strg "s")
         (string-ci=? (string-take root-strg 1) "B"))
     (list (string-capitalize (string-take root-strg 1))
           (make-raise-markup 0.3
             (make-smaller-markup
               (make-musicglyph-markup "accidentals.flat")))))
    (else (list root-strg))))

#(define chords->lyrics
  (lambda (grob)
    (let* ((txt-prop (ly:grob-property grob 'text))
           (text-string
             (if (string? txt-prop)
                 txt-prop
                 (markup->string txt-prop)))
           (chrd&bass (string-split text-string #\/))
           (chrd (car chrd&bass))
           (root&adds (string-split chrd #\:))
           (bass
             (if (pair? (cdr chrd&bass))
                 (cadr chrd&bass)
                 ""))
           (slash-bass
             (if (string-null? bass)
                 ""
                 (make-concat-markup
                   (cons "/" (root-list bass)))
               
               ))
           (root (car root&adds))
           (root
             (make-concat-markup (root-list root)))
           (adds
             (if (null? (cdr root&adds))
                 ""
                 (cadr root&adds)))
           (adds-list                                                     
             (string-split adds #\.))
           (adds&alts
             (map
               (lambda (add)
                 (cond
                   ((string-contains add "+")
                    (make-concat-markup
                      (list
                        (make-raise-markup 0.6
                          (make-musicglyph-markup "accidentals.sharp"))
                        (string-delete add #\+))))
                   ((string-contains add "-")
                    (make-concat-markup
                      (list
                        (make-raise-markup 0.3
                          (make-musicglyph-markup "accidentals.flat"))
                        (string-delete add #\-))))
                   (else add)))
               adds-list)))
  (ly:grob-set-property! grob 'text
    (make-concat-markup
      (list
        root
        (make-super-markup
          (markup-concat-join adds&alts (make-hspace-markup 0.5)))
        slash-bass))))))

#(define (Chords_lyrics_engraver context)
   (make-engraver
     (acknowledgers
       ((lyric-syllable-interface engraver grob source-engraver)
        (chords->lyrics grob)))))


\layout {
  \context {
    \Lyrics
    \name "ChordMarkup"
    \consists \Chords_lyrics_engraver
    \override LyricText.font-family = #'sans
    \override LyricText.self-alignment-X = #LEFT
  }
  \context {
    \Score
    \accepts "ChordMarkup"
  }
  %% same for other contexts like StaffGroup, ChoirStaff etc
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paper { indent = 40 }

\layout {
  \context {
    \ChordNames
    \consists "Instrument_name_engraver"
  }
}

<<
\new ChordMarkup \with { instrumentName = \markup \fontsize #-2 "ChordMarkup" }
  \lyricmode {
  %% NB
  %% Chords with numbers need to be strings in lyricmode, otherwise they are
  %% taken as durations
  %% Durations need to be written after the string
  "Ces:7.9+.11-.13"2
  %% NB
  %% The position of the minor-modifier is changed !!
  "Cm:add9"
  "Cm:7/es"
  C:o
  C:ø
  %% TODO
  %% what to do with H/B/Bes ?
  H B Bes
  "C:7.9+.blödsinn.LOL"
  }

\new ChordNames \with { instrumentName = "ChordNames" }
  \chordmode { ces:7.9+.11-.13 c:m9^7 c:m7/ees c:m5- c:m5-.7 b bes }
\new Staff \with { instrumentName = "Staff" }
  { c''1 c'' c'' c'' c'' }
>>


Wenn man genau hinschaut so gibts schon ein paar Unterschiede im Druckbild, ich hab nicht alles gaaaanz genau gespiegelt:




Gruß,
  Harm


Markus W. Kropp

bin Grad nur zwischendurch am Handy. du bist echt crazy, harm! geilste Arbeit! ich kann zwar nicht so programmieren wie du aber ich Versuche Mal den Code nach zu vollziehen. sehr geil!

LG markus

harm6

Zitat von: harm6 am Samstag,  1. Juli 2017, 01:47
Zitat von: MarkusOder man macht einfach einen \chordmode2 auf, der das macht wie von mir vorgeschlagen (C1:blödsinn.7.9+ = C7#9 blödsinn). Interessant, dass es in der Malingliste schon diskutiert wird.

Ein erster Entwurf mit printing-procedure, engraver und neuem context. [...]

Ein weiter entwickelter Code hier:
http://lists.gnu.org/archive/html/lilypond-user/2017-07/msg00018.html

Gruß,
  Harm

Markus W. Kropp

Tausend Dank, harm!!! Ich werde allerdings erst in den nächsten Tagen dazu kommen da mal vertieft rein zu schauen. Zuviel Arbeit ... ist aber gespeichert. Bin gespannt!


LG Markus