lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Customizing ottava text


From: Urs Liska
Subject: Re: Customizing ottava text
Date: Thu, 16 Feb 2017 00:19:43 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.6.0

Hi,

as I got quite a few similar responses I'll reply at once.

All the suggestions that manually set Staff.ottavation don't work
because I want something that can be defined in a stylesheet without the
user having to change the music content (by manually setting the ottava
text for each case).

So Joram's function is the only that would satisfy my needs, but then
I'm already happy with the solution I had come up with in my initial
post. So obviously there is no simpler solution available.

What I would actually like to have is a property that can hold a list of
strings to be used for the different octaves, so you could write

\override Staff.OttavaBracket.labels =
#'((2 . "16") ; (used by some publishers)
   (1 . "8")
   (0 . #f)
   (-1 . "8")
   (-2 . "16"))

The following code (from define-music-callbacks.scm) is obviously
responsible for producing the octavation. If someone could tell me how
this can read a property from Staff.OttavaBracket from within the
function I think I could make the ottava text configurable in LilyPond.

(define (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 '((2 . "15ma")
                                                    (1 . "8va")
                                                    (0 . #f)
                                                    (-1 . "8vb")
                                                    (-2 . "15mb")))))
                (set! (ly:context-property context 'middleCOffset) offset)
                (set! (ly:context-property context 'ottavation) string)
                (ly:set-middle-C! context))))
           'Staff))))

Urs

Am 15.02.2017 um 21:06 schrieb Urs Liska:
> Hi all,
>
> is it really true that the text of the OttavaBracket can't be
> customized? All I could find was the doc snippet
> http://lilypond.org/doc/v2.19/Documentation/snippets/text#text-ottava-text
> which suggests to manually set Staff.ottavation after the \ottava command.
>
> With this I created a function (overwriting the built-in function)
>
> #(define ottava
>    (let ((orig-ottava ottava)
>          (numbers '("15" "8" "" "8" "15")))
>      (define-music-function (oct)(integer?)
>        #{
>          #(orig-ottava oct)
>          #(if (not (= oct 0))
>               #{
>                 \set Staff.ottavation = #(list-ref numbers (+ oct 2))
>               #})
>        #})))
>
>
> which actually does what I want (change "8va" to "8"), but I can't
> believe that it is really necessary to go that long way for a seemingly
> simple task.
>
> Any comments?
> Urs
>

-- 
address@hidden
https://openlilylib.org
http://lilypondblog.org




reply via email to

[Prev in Thread] Current Thread [Next in Thread]