Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: complanar am Montag, 24. Januar 2011, 15:38
-
Hallo,
ich hätte für Akkordsymbole gern die internationale Variante. Sie unterscheidet sich von der Default Ausgabe nur dadurch, dass für ein B (deutsch H) ein B mit Auflösungszeichen geschrieben wird. Gleiches soll für eventuell abweichende Basstöne gelten.
Ich hab mit dem Scheme-Code in scm/chord-name.scm mal ein bisschen rumprobiert, habe es aber nicht hinbekommen – nur lauter Fehlermeldungen. Mit den normalen chordRootNamer und chordNoteNamer habe ich es auch probiert, aber ebenfalls nicht hinbekommen.
Eingentlich muss eigentlich nur das sonst unterdrückte Alterationszeichen für das B aktiviert werden. Ich vermute mal, man könnte es mit einer Änderung an der Funktion accidential->markup oder accidential->text-accidential-markup hinbekommen (scm/chord-name.scm, gleich zu Beginn) Leider kenne ich mich mit Scheme nicht so gut aus, so dass ich nicht genau weiß, was zu ändern ist, bzw. wie ich es dann in meinen chordRootNamer hineinbekomme.
Ich benutze LilyPond 2.12.3 unter Linux. die Pfadangaben beziehen sich bei mir auf /usr/share/lilypond/2.12.3/[\code]
Könnte mir jemand helfen? Ich hab mich ehrlich gesagt etwas gewundert, dass es das noch nicht eingebaut gibt, weil diese Notation durchaus üblich ist.
Holger
-
Sehr viel später...
Ich habe ein Lösung gefunden. Für alle, die es vielleicht interessiert poste ich sie mal gleich inklusive Test.
\version "2.14.2"
% 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 #(0.6 0.6 0.65 0.8 0.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
}
\chords {
\internationalChords
ceses ces c cis cisis
deses des d dis disis
\break
eeses ees e eis eisis
feses fes f fis fisis
\break
geses ges g gis gisis
aeses aes a ais aisis
\break
beses bes b bis bisis
ceses ces c cis cisis
}
Ich hoffe, es nützt auch anderen.