2013/12/16 Thomas Morley <thomasmorle...@gmail.com>:
> 2013/12/16 Henning Hraban Ramm <lilypon...@fiee.net>:
>> Am 2013-12-15 um 18:26 schrieb Thomas Morley <thomasmorle...@gmail.com>:
>>> Additional bass is downcase.
>>> <germanChordNames.ly>
>>
>> And how can I change that?
>> Mostly I’d like my additional bass uppercase, only in some cases (sic) 
>> lowercase.
>
> I'll try to find some time to look into it this evening.

Hi,

please try the attached code. Hope I didn't overlook something.

Cheers,
  Harm
\version "2.16.2"
% up to "2.17.96"

#(set-global-staff-size 18)
	     
% After -> http://lists.gnu.org/archive/html/lilypond-user/2009-09/msg00622.html

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

#(define (chord-name->my-german-markup-text-alteration pitch lowercase?)

   (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 (equal? (cons name alt-semitones) '(6 . -1))
                   (cons 7 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 (= alteration FLAT) (= (car n-a) 7)) 
             empty-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))))))) 
  
%% Not really needed, a little shorter, though
#(define myGermanChords chord-name->my-german-markup-text-alteration)

#(define (note-name->myGerman-markup pitch lowercase?)
  (let* ((name (ly:pitch-notename pitch))
         (alt-semitones (pitch-alteration-semitones pitch))
         (n-a (cond ((equal? (cons name alt-semitones) '(6 . -1))
                     (cons 7 (+ 1 alt-semitones)))
                    ((equal? (cons name alt-semitones) '(6 . -2))
                     (cons 6 alt-semitones))
                    (else (cons name alt-semitones)))))
  (make-line-markup
   (list
    (string-append
     (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car n-a))
     (cond ((equal? (car n-a) 7) "")
           ((or (equal? (car n-a) 2) (equal? (car n-a) 5))
            (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a))))
           (else (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a))))))))))

onceDowncaseChordBass = \once \set chordNoteNamer = #note-name->myGerman-markup

%%%%%%%%%%%%
%% Test
%%%%%%%%%%%%

\layout {
  ragged-right = ##f
  indent = 0
  \override Score.RehearsalMark #'self-alignment-X = #LEFT
  \override Score.RehearsalMark #'padding = #5
  \override Score.RehearsalMark #'font-size = #-1
  \override Score.BarNumber #'transparent = ##t
}

myLayout =
  \layout {
    \context { 
        \ChordNames
        chordNameLowercaseMinor = ##t
        chordRootNamer = #myGermanChords
    } 
  }
  
  
majorChrds = \chordmode {
  c/c cis/cis d/d dis/dis e/e eis/eis f/f fis/fis 
  g/g gis/gis a/a ais/ais b/b bis/bis
  \break
  c/c ces/ces b/b bes/bes a/a aes/aes g/g ges/ges 
  f/f fes/fes e/e ees/ees d/d des/des
  \break
  cisis/cisis disis/disis eisis/eisis fisis/fisis 
  gisis/gisis aisis/aisis bisis/bisis
  \break
  ceses/ceses deses/deses eeses/eeses feses/feses 
  geses/geses aeses/aeses beses/beses
  \break
}

minorChrds = \chordmode {
  c:m/c cis:m/cis d:m/d dis:m/dis e:m/e eis:m/eis f:m/f fis:m/fis 
  g:m/g gis:m/gis a:m/a ais:m/ais b:m/b bis:m/bis
  \break
  c:m/c ces:m/ces b:m/b bes:m/bes a:m/a aes:m/aes g:m/g ges:m/ges 
  f:m/f fes:m/fes e:m/e ees:m/ees d:m/d des:m/des
  \break
  cisis:m/cisis disis:m/disis eisis:m/eisis fisis:m/fisis 
  gisis:m/gisis aisis:m/aisis bisis:m/bisis
  \break
  ceses:m/ceses deses:m/deses eeses:m/eeses feses:m/feses 
  geses:m/geses aeses:m/aeses beses:m/beses
  \break
}
            
myMajorChords = \chordmode {
  \mark "Bass always upcase"
  \majorChrds
  \break
  \mark "Bass once downcase" 
  %\onceDowncaseChordBass
  %b/b 
  %\onceDowncaseChordBass
  bes/bes 
  \onceDowncaseChordBass
  beses/beses 
  %\onceDowncaseChordBass
  ees/ees 
  %\onceDowncaseChordBass
  %eeses/eeses 
  \break
  \mark "Bass always downcase"
  \set chordNoteNamer = #note-name->myGerman-markup
  \majorChrds
}

minorChords = \chordmode {
  \mark "Bass always upcase"
  \minorChrds
  \break
  \mark "Bass once downcase" 
  %\onceDowncaseChordBass
  %b:m/b 
  %\onceDowncaseChordBass
  bes:m/bes 
  \onceDowncaseChordBass
  beses:m/beses 
  %\onceDowncaseChordBass
  ees:m/ees 
  %\onceDowncaseChordBass
  %eeses:m/eeses 
  \break
  \mark "Bass always downcase"
  \set chordNoteNamer = #note-name->myGerman-markup
  \minorChrds
}

\score {
        \new ChordNames \myMajorChords
        \layout { \myLayout }
        \header { 
          piece = \markup \column \bold { "Major Chords (german)" \vspace #2 } 
        }
}

\score{ 
        \new ChordNames \minorChords
        \layout { \myLayout }
        \header {
          piece = \markup \column \bold { "Minor Chords (german)" \vspace #2 } 
        }
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to