Die Definition von OttavaMusic (in `music-descriptions') zu überschreiben, ist mir auch nicht gelungen. Zumindest nicht auf die Schnelle - und ich bin momentan mit einem größeren coding beschäftigt, so weiß ich nicht, ob ich demnächst Zeit habe es ernsthafter zu versuchen.
Aber folgender Code funktioniert erstmal für einmaligen Gebrauch, sollte eigentlich machbar sein ein mapping über den gesamten Musikausdruck hinzukriegen.
Ich bin mir allerdings nicht sicher, ob ich diese Methode wirklich empfehlen kann, aber falls es jemand versuchen möchte, hier der Code:
\version "2.18.2"
\paper { ragged-right = ##f }
#(define my-list
`((2 . ,(markup #:box #:rotate 10 "2 Oktaven nach oben"))
(1 . "8va")
(0 . #f)
(-1 . ,(markup #:box #:rotate -10 "1 Oktave nach unten"))
(-2 . "15mb"))
;;;; default
;'((2 . "15ma")
; (1 . "8va")
; (0 . #f)
; (-1 . "8vb")
; (-2 . "15mb"))
)
#(define (my-make-ottava-set music)
"Set context properties for an ottava bracket."
(let ((octavation (ly:music-property music 'ottava-number)))
(list (context-spec-music
(make-apply-context
(lambda (context)
(let ((offset (* -7 octavation))
(string (assoc-get octavation my-list)))
(set! (ly:context-property context 'middleCOffset) offset)
(set! (ly:context-property context 'ottavation) string)
(ly:set-middle-C! context))))
'Staff))))
{
%% \withMusicProperty is for one-time-use
%% TODO apply it generally
\withMusicProperty #'elements-callback #my-make-ottava-set
\ottava #2
c''''1
c''''
\ottava #0
c'1
\withMusicProperty #'elements-callback #my-make-ottava-set
\ottava #-1
c''1
c''
}
Gruß,
Harm
png im Anhang