• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Muss Staff.ottavation tatsächlich nach jedem \ottava neu gesetzt werden?

Begonnen von Manuela, Freitag, 19. August 2016, 15:30

Vorheriges Thema - Nächstes Thema

Manuela

Setze ich das Kommando ottavation = #"8" in den Staff-Kontext, wird nämlich der ganze Staff mit einer Oktavierung versehen. Gibt es eine Möglichkeit, die Beschriftung des Ottava-Spanners grundsätzlich zu ändern?

fugenkomponist

#1
Scheint so, als wär das nicht so einfach möglich. Denn der OttavaSpanner holt sich anscheinend die Beschriftung direkt aus dem OttavaMusic-Event und das holt sie aus make-ottava-set (Funktion in scm/define-music-callbacks.scm), wo die Werte "15ma", "8va", #f, "8vb" und "15mb" hard coded sind. Ich weiß nicht, ob und wie man die Definition von OttavaMusic überschreiben könnte, wahrscheinlich ist folgendes einfacher:
\version "2.19.46"

myOttava =
#(define-music-function (o) (integer?)
   (let ((text (case o
                 ((0) #f)
                 ((1 -1) "8")
                 ((2 -2) "15"))))
     #{
       \ottava #o
       \set Staff.ottavation = #text
     #}))

\relative {
  c''1 c \myOttava 0 c \myOttava 1 c \myOttava 0 c \myOttava 1 c
}


Es wär natürlich schön, wenn man OttavaBracket.text oder OttavaBracket.bound-details.left.text per override überschreiben könnte und das dann auch Wirkung zeigen würde ...


harm6

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