Akkordbezeichnung: A4 und nicht A4 sus 4 3

Begonnen von Otto, Sonntag, 1. Juli 2018, 10:31

« vorheriges - nächstes »

Otto

Hallo zusammen,

ich würde gerne einen Akkord mit A4 bezeichnen. Dafür verwende ich a:4 im Chordmode. Hier mein Beispiel:


#(set-default-paper-size "a5" )
\version "2.18.2"
\paper {
  oddFooterMarkup = \markup{ \fill-line{ \line{" "} } }
}

\score{
  <<
    \new ChordNames \with { \override ChordName.font-name = courier %Schriftart der Akkordbezeichnungen
                              \override ChordName.font-size = 0.1     %Schriftgröße der Akkorbezeichungen
                            }
    \chordmode{\germanChords d2 a:4 fis}
    \new Staff {
      \relative c''
      \new Voice = "strophe" {
        \key d \major
        \autoBeamOff           %Achtelnoten werden nicht durch einen Balken verbunden
        \numericTimeSignature %Taktart in Zahlen angeben
        \time 2/2
        fis='2 e8 fis g a | d='2. d4 |
      }
     
    }
   
    \new Lyrics \lyricsto "strophe" {
      <<
        {
          \set stanza = #"1. "
          \set associatedVoice = "strophe"
           Ich lo -- be
           
        }


      >>
 
    }
  >>
  \layout {
   
    indent = #0      %Kein Einzug der ersten Notenzeile
    \context {
    \Score
    \omit BarNumber %Keine Taktzahlen
  }
  }
}


Weiß jemand wie man einen Akkord nur mit A4 bezeichnet?

Und gibt es die Möglichkeit das Kreuz bei dem F etwas nach unten zu holen?

Manuela

#1
Du kannst Akkorde nach Belieben umdefinieren, indem du eine Liste von Ausnahmen anlegst und diese dann im Context ChordNames hinterlegst. In die Liste schreibst du im Prinzip jeden Akkord, den du umdefinieren willst, basierend auf c, mit dem Text (\markup), der als Akkordname erscheinen soll. Die Tonart wird von Lilypond entsprechend adaptiert.

Hier ein (ansonsten sinnloses) Beispiel, das auch dein A4 enthält.

\version "2.19.80"

chExceptionMusic = {
  <c e f>1-\markup \whiteout { "4" }  %% sus 4
  < c es g b d' f' a' >1-\markup { \super "bumsti" }  %% c:m13
  <c es g b d' f'>1-\markup { \sub "(bamsti)" }      %% c:m11
}

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

\layout {
  \context {
    \ChordNames
    chordNameExceptions = #chExceptions
  }
}

mus = \chordmode { d2 a:4 fis e:m13 ges:m11 }

\score {
  <<
    \new ChordNames \mus
    \new Staff \mus
  >>
  \layout { }
}
Danke für eure Hilfe
viele Grüße
-- Manuela

Otto

Hallo Manuela,

genau das habe ich gesucht. Vielen Dank!

Manuela

Noch zu deiner Frage mit dem #. Ich habe aus dem Archiv noch was ausgegraben Akkordsymbole in internationaler Notation.

Hier eine Erweiterung mit wahlweise deutschen oder internationalen Akkordbezeichnung, wobei bei den internationalen Bezeichnungen die Versetzungszeichen nach oben verschoben sind. Ich habe stark übertrieben, um den Effekt zu verdeutlichen.

Entscheidend für die Höhe der Versetzung ist die Zeile (raise (vector-ref #(0.6 0.6 0.65 0.8 0.7) (+ (* alt 2) 2))) im Code.

Hier das Codebeispiel mit geänderten Versetzungshöhen:

\version "2.19.80"

chExceptionMusic = {
  <c e f>1-\markup \whiteout { "4" }  %% halbverminderter Septakkord
  < c es g b d' f' a' >1-\markup { \super "bumsti" }  %% c:m13
  <c es g b d' f'>1-\markup { \sub "(bamsti)" }  %% c:m11, die 7 in Klammer
}

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

#(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 german-Chords (chord-name->german-markup-text-alteration #t))

% Chords
#(define (note-name->international-markup pitch lowercase?)
  (let* (
    (name (ly:pitch-notename pitch))
    (alt (ly:pitch-alteration pitch))
    (hspace (vector-ref #(0.15 0.15 0.05 0.05 0.15) (+ (* alt 2) 2)))
    (raise (vector-ref #(2 2 2 3 2.7) (+ (* alt 2) 2)))
  )
  (make-line-markup
    (list
      (make-simple-markup
        (if lowercase?
          (vector-ref #("c" "d" "e" "f" "g" "a" "b") name)
          (vector-ref #("C" "D" "E" "F" "G" "A" "B") name)
        )
      )
      (if (and (= alt 0) (!= name 6))
        ;; If it's natural and not b, do nothing
        (make-line-markup (list empty-markup))
        ;; Else add alteration
        (make-line-markup
          (list
            (make-hspace-markup hspace)
            (make-smaller-markup (make-raise-markup raise
                (make-musicglyph-markup
                  (assoc-get alt standard-alteration-glyph-name-alist ""))))
            ))
      ))))
)

internationalChords = {
  \set chordRootNamer = #note-name->international-markup
  \unset chordNoteNamer
}

germanChords =  {
  \set chordRootNamer = #german-Chords
  \unset chordNoteNamer
}


\layout {
  \context {
    \ChordNames
    chordNameExceptions = #chExceptions
    noChordSymbol = ##f
  }
}

mus = \chordmode { d2 a:4 fis e:m13 ges:m11 }

\score {
  <<
    \new ChordNames { \internationalChords \mus }
    \new ChordNames { \germanChords \mus }
    \new ChordNames { \mus }
    \new Staff \mus
  >>
  \layout { }
}
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Ich habe mehrere Einwände (hauptsächlich zu Manuelas erstem Post):

1. a:4 bezeichnet in LilyPond den Akkord <a cis d>, also einen Akkord mit Terz und Quarte (ohne Quinte), meinst du aber nicht eher <a d e> (also mit Quarte statt Terz? Dann müßte die Eingabe a:sus4 lauten. Entsprechend wäre die chord exception dann auch nicht <c e f>, sondern <c f g>.
2. Die chord exceptions sind da in deutschen Tonnamen mit b für B eingetragen; es fehlt also der \language-Befehl oder es müßte bes heißen.
3. Die Oktavlagen müssen richtig liegen, sonst zeigen bamsti und bumsti keinen Effekt. Mein Fehler, hab 2. korrigiert und dabei die Striche selbst gelöscht ...

Und noch eine Frage: Soll es wirklich A4 heißen? Oder eher A⁴?

Otto

Danke für die Antworten! Es soll A4 heißen, aber das habe ich schon bei mir mit dem \sup-Befehl angepasst.

Das mit dem Kreuz werde ich ausprobieren, wenn ich mehr Zeit habe. Auf den ersten Blick scheint dafür ja recht viel Code notwendig zu sein.

Manuela

Malte, hast du eine Erklärung dafür, dass bei meinem 2. Codebeispiel ohne \language "deutsch" bamsti und bumsti  verschwinden, aber A4 noch geht?
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Ja. LilyPonds Standardsprache für Notennamen ist ja Niederländisch. Das unterscheidet sich vom Deutschen nur bei h und b, die da b und bes heißen. ,,b" ist also auf niederländisch ein gültiger Name (deswegen keine Fehlermeldung), bezeichnet aber einen anderen Ton (deshalb wird – richtigerweise – nicht der gewünschte Akkord erkannt).

Manuela

Alles klar, danke für die Erklärung  :)

Otto, ich habe eine Include-Datei namens scheme.ily, die ich in meine Lilypondateien einfüge. Dorthin kommen alle Scheme-Programme (inzwischen schon eine ganze Menge), somit relativiert sich die Codelänge  ;)
Danke für eure Hilfe
viele Grüße
-- Manuela