Wie kriege ich den ChordName unterstrichen?

Begonnen von Manuela, Sonntag, 7. Mai 2023, 10:28

« vorheriges - nächstes »

Manuela

Ich habe beschlossen, meine Akkordeon-Bassnotation so umzustellen, dass ich damit eine Midi-Ausgabe erzeugen kann.
Zu diesem Zweck bräuchte ich den eintonigen c:1-Akkord in Großbuchstaben und unterstrichen.
Folgendes habe ich bisher zustande gebracht
\version "2.25.4"
\language "deutsch"

#(define-public (my-note-name->german-markup pitch lowercase?)
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones
           (inexact->exact (round (* (ly:pitch-alteration
                                      pitch) 2))))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
                   (cons 7 (+ 1 alt-semitones))
                   (cons name alt-semitones)))
          (basic-list '("c" "d" "e" "f" "g" "a" "h" "b"))
          (list-to-use
           (if lowercase?
               basic-list
               (map string-upcase basic-list))))

     (make-line-markup
      (list
       (string-append
        (list-ref list-to-use (car n-a))
        (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)))))))))

#(define (note-name->german-underlined-markup pitch lowercase?)
   (make-underline-markup
    (make-line-markup
     (list
      (my-note-name->german-markup pitch lowercase?)))))

gRoot= \once \set ChordNames.chordRootNamer = #note-name->german-underlined-markup

chExBass = {
  <c e g b>1-\markup \whiteout { "7" }  %% Septakkor
  <c e b>1-\markup \whiteout { "7" }    %% Septakkord ohne Quint
  < c es ges heses >1-\markup { "o" }  %% dim
}

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

firstNote =
#(define-music-function (music )
   (ly:music?)
   (event-chord-reduce music))

mymus = \chordmode { cis4:1 \gRoot c:1 \gRoot c d:m h:7^5 d:dim7 }

\layout {
  \context {
    \ChordNames
    chordNameExceptions = #chExBasses
    chordNameFunction =
    #(lambda (in-pitches bass inversion context)
       (if (= (length in-pitches) 1)
           (my-note-name->german-markup (car in-pitches) #f)
           (ignatzek-chord-names
            in-pitches bass inversion context)))
    chordNoteNamer =
    #(lambda (pitch lowercase?)
       (my-note-name->german-markup pitch #f))
    chordRootNamer =
    #(lambda (pitch lowercase?)
       (my-note-name->german-markup pitch #t))
  }
}

<<
  \new ChordNames \mymus
  \mymus
>>

Das Unterstreichen funktioniert nur bei einem Dur-Akkord, ich bräuchte es aber für einen c:1 Akkord.

Wie muss die Funktion modifiziert werden, damit der eintonige Akkord unterstrichen wird?
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

willst Du
a)
jeden "Bass"-Akkord unterstrichen haben oder
b)
fallweise vorgehen?

ad a)
Im \layout
    chordNameFunction =
    #(lambda (in-pitches bass inversion context)
       (if (= (length in-pitches) 1)
           (note-name->german-underlined-markup (car in-pitches) #f)
           (ignatzek-chord-names
            in-pitches bass inversion context)))

ad b)
\new ChordNames
{
  \once \override ChordName.stencil =
  #(grob-transformer 'stencil
    (lambda (grob orig)
     (grob-interpret-markup grob
      (make-underline-markup (make-stencil-markup orig)))))
  c:1
  c:1
}

HTH,
  Harm

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela