Hallo,
ich denke Dein Vorhaben ist nicht sinnvoll:
In Deinem Beispiel:
beispiel = \relative c' { \key b \major des d e e }
gibst Du eine Tonart an. Also bewegen wir uns in Dur-moll-tonaler Music.
Der Reihe nach schreibst Du (immer in Bezug zum Tonika-Grundton):
kleine Terz (moll-Terz)
große Terz (Dur-Terz)
übermäßige Quarte
übermäßige Quarte
LilyPond transponiert das absolut einwandfrei!!
Wenn Du jetzt immer den enharmonisch verwechselbaren Ton bevorzugst, so resultiert das in befremdliche Notationen, sobald Mehrstimmigkeit zum tragen kommt (eigentlich auch schon in der Einstimmigkeit, aber mehrstimmig ist es noch deutlicher)
Ich habe \naturalizeMusic zu \flatToSharpMusic verändert, indem ich ein paar wenige Zeilen angepaßt habe:
#(define (flat->sharp-pitch p)
(let ((o (ly:pitch-octave p))
(a (* 4 (ly:pitch-alteration p)))
;; alteration, a, in quarter tone steps,
;; for historical reasons
(n (ly:pitch-notename p)))
(newline)(display "alteration ")(display a)
(newline)(display "notenam ")(display n)
(cond
((and (> a 1) (or (eq? n 6) (eq? n 2)))
(set! a (- a 2))
(set! n (+ n 1)))
;;((and (< a -1) (or (eq? n 0) (eq? n 3)))
((< a -1)
(set! a (+ a 4))
(set! n (- n 1))))
(cond
((> a 2) (set! a (- a 4)) (set! n (+ n 1)))
((< a -2) (set! a (+ a 4)) (set! n (- n 1))))
(if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))
(if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))
(ly:make-pitch o n (/ a 4))))
#(define (flat->sharp music)
(let ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element))
(p (ly:music-property music 'pitch)))
(if (pair? es)
(ly:music-set-property!
music 'elements
(map (lambda (x) (flat->sharp x)) es)))
(if (ly:music? e)
(ly:music-set-property!
music 'element
(flat->sharp e)))
(if (ly:pitch? p)
(begin
(set! p (flat->sharp-pitch p))
(ly:music-set-property! music 'pitch p)))
music))
flatToSharpMusic =
#(define-music-function (parser location m)
(ly:music?)
(flat->sharp m))
%---- TEST-1 ----
#(define-markup-command (smallItalic layout props arg) (markup?)
(interpret-markup layout props
`(,fontsize-markup -2 (,italic-markup ,arg))))
\layout {
indent = 0
\context {
\Score
\override TimeSignature #'stencil = ##f
\override RehearsalMark #'self-alignment-X = #LEFT
}
}
beispiel = \relative c' {
\key bes \major
des4 d e e
f! fes fisis feses
<bes des f>1^"minor-tonic!"
}
\markup \fill-line { \fontsize #4 \bold "testing \"beispiel\" (extended)" }
\new Staff {
\mark \markup "original"
\beispiel
\break
\mark \markup { \smallItalic "\\transpose bes c'" and \smallItalic "\\flatToSharpMusic" }
\flatToSharpMusic \transpose bes c' \beispiel
\break
\mark \markup { \smallItalic "\\transpose bes f'" without \smallItalic "\\flatToSharpMusic" }
\transpose bes f' \beispiel
}
%---- TEST-2 ----
musicII = \relative c' {
\key c\major
c'4 b bes a aes g ges f e ees d des c2 <b d f as>^\markup { "VII"\super dim7 }
}
\markup \fill-line { \fontsize #4 \bold "testing chromatic-scale down" }
\new Staff {
\mark \markup "original"
\musicII
\break
\mark \markup { \smallItalic "\\transpose c d" without \smallItalic "\\flatToSharpMusic" }
\transpose c d \musicII
\break
\mark \markup { \smallItalic "\\transpose c d" and \smallItalic "\\flatToSharpMusic" }
\flatToSharpMusic \transpose c d \musicII
\break
\mark \markup { \smallItalic "\\transpose c ees" without \smallItalic "\\flatToSharpMusic" }
\transpose c ees \musicII
\break
\mark \markup { \smallItalic "\\transpose c ees" and \smallItalic "\\flatToSharpMusic" }
\flatToSharpMusic \transpose c ees \musicII
}
%---- TEST-3 ----
musicI = \relative c' {
\key c\major
c4 cis d dis e f fis g gis a ais b c2 <b d f as>^\markup { "VII"\super dim7 }
}
\markup \fill-line { \fontsize #4 \bold "testing chromatic-scale up" }
\new Staff {
\mark \markup "original"
\musicI
\break
\mark \markup { \smallItalic "\\transpose c d" and \smallItalic "\\flatToSharpMusic" }
\flatToSharpMusic \transpose c d \musicI
\break
\mark \markup { \smallItalic "\\transpose c ees" and \smallItalic "\\flatToSharpMusic" }
\flatToSharpMusic \transpose c ees \musicI
}Das angehängte png zeigt insbesonders bei den Akkorden, aber auch wenn die Tonart Es-Dur werden soll, einen output den ich fürchterlich finde.
Ohne genau zu wissen, was ich da tue, hab ich folgende zwei Funktionen geschrieben, die (erstaunlicherweise ;-) genau das machen, was ich wollte: entweder alles mittels Kreuzen oder alles mittels bs ausdrücken. Vielleicht hat ja jemand, der sich auskennt, Lust, da mal drüber zu schauen?
Deinen zweiten post zum Thema habe ich erst gelesen, nachdem mein Beitrag soweit fast fertig war.
Bei (flüchtiger) Durchsicht scheinst Du genau dasselbe gemacht zu haben wie ich oben. Allerdings hast Du den Code auf das wesentliche zusammengestrichen.
Das hatte ich mir geschenkt - habe ich schon gesagt, daß ich von dem ganzen Vorhaben nichts halte?

Insoweit habe ich weder Deinen noch meinen Code auf mögliche Schwachstellen abgeklopft.
Zwei grundsätzliche Sachen:
(1)
Dein ursprüngliches, unverändertes Code-Beispiel gibt einen nicht korrekten output, da der context zu Anfang noch nicht etabliert ist.
Setze \new Staff davor.
(2)
Dein scheme-code ist unothodox was indentation, etc angeht.
Das macht das Verständnis schwerer oder zumindest zeitraubender.
Irgendwo habe ich schon mal ein Kompendium über scheme-schreib-Stil gesehen, finde es im Moment aber nicht. Ich empfehle Dir jedoch mal nach sowas zu suchen oder Deinen Stil dem aus den .scm-files vertrauten anzupassen.
Wobei man ehrlicherweise sagen muß, daß sich dort auch nicht immer an Konventionen gehalten wurde.
Viele Grüße,
Harm