Hey Graham,

I've been trying to tackle this recently. I'm taking
a slightly different approach, partly because I want
a flexible way of having dynamic-text and italic-text
in any order.

For instance, a line like this:

  subitopp = #(make-dynamic-extra "subito" "pp")

won't display properly because LliyPond will tryto 
display the "subito" as dynamic text.

My procedure solves this, but it's still a work in 
progress, mostly because I haven't gotten around to
address the horizontal placement issue. There's an
exhaustive snippet (kudos to that author) on that 
very issue, I just haven't incorporated it yet. 

Also, your procedure name is more concise! I opted 
for the lengthy "make-custom-dynamic-script" because
I'm a stickler for sticking to a convention. I don't 
know if that's always a good thing.

As far as scheme goes, I'm still learning. I'm 
constantly plagued by the feeling that there's a more
elegant or concise solution, so any comments are
certainly welcome.

Let me know what you think,
Mark


      
%2_11_my_dynamics.ly

#(define dynamic-char?
  (lambda (c)
	 (or (eq? #\f c) (eq? #\m c) (eq? #\p c)
	     (eq? #\r c) (eq? #\s c) (eq? #\v c) (eq? #\z c))))

#(define dynamic?
  (lambda (str)
    (let ((i (string-length str)))
      (case i
        ((0) #f)
        ((1) (dynamic-char? (string-ref str 0)))
        (else (and (dynamic-char? (string-ref str (- i 1)))
                   (dynamic? (substring str 0 (- i 1)))))))))

#(define make-custom-dynamic-script
  (lambda (a b)
   (cond
    ((dynamic? a)
     (make-dynamic-script
      (markup #:line (#:dynamic a #:normal-text #:italic b))))
    ((dynamic? b)
     (make-dynamic-script
      (markup #:line (#:normal-text #:italic a #:dynamic b))))
    (else (ly:error "no dynamics found in make-custom-dynamic-script")))))


%% ----------------------------------------------------


pppsempre = #(make-custom-dynamic-script "ppp" "sempre")
ppsempre = #(make-custom-dynamic-script "pp" "sempre")
psempre = #(make-custom-dynamic-script "p" "sempre")
mpsempre = #(make-custom-dynamic-script "mp" "sempre")
mfsempre = #(make-custom-dynamic-script "mf" "sempre")
fsempre = #(make-custom-dynamic-script "f" "sempre")
ffsempre = #(make-custom-dynamic-script "ff" "sempre")
fffsempre = #(make-custom-dynamic-script "fff" "sempre")	

pppsubito = #(make-custom-dynamic-script "ppp" "subito")
ppsubito = #(make-custom-dynamic-script "pp" "subito")
psubito = #(make-custom-dynamic-script "p" "subito")
mpsubito = #(make-custom-dynamic-script "mp" "subito")
mfsubito = #(make-custom-dynamic-script "mf" "subito")
fsubito = #(make-custom-dynamic-script "f" "subito")
ffsubito = #(make-custom-dynamic-script "ff" "subito")
fffsubito = #(make-custom-dynamic-script "fff" "subito")	

ppptresExpr = #(make-custom-dynamic-script "ppp" "très expr.")
pptresExpr = #(make-custom-dynamic-script "pp" "très expr.")
ptresExpr = #(make-custom-dynamic-script "p" "très expr.")
mptresExpr = #(make-custom-dynamic-script "mp" "très expr.")
mftresExpr = #(make-custom-dynamic-script "mf" "très expr.")
ftresExpr = #(make-custom-dynamic-script "f" "très expr.")
fftresExpr = #(make-custom-dynamic-script "ff" "très expr.")
ffftresExpr = #(make-custom-dynamic-script "fff" "très expr.")

menoppp = #(make-custom-dynamic-script "meno" "ppp")
menopp = #(make-custom-dynamic-script "meno" "pp")
menop = #(make-custom-dynamic-script "meno" "p")
menomp = #(make-custom-dynamic-script "meno" "mp")
menomf = #(make-custom-dynamic-script "meno" "mf")
menof = #(make-custom-dynamic-script "meno" "f")
menoff = #(make-custom-dynamic-script "meno" "ff")
menofff = #(make-custom-dynamic-script "meno" "fff")

pocoppp = #(make-custom-dynamic-script "poco" "ppp")
pocopp = #(make-custom-dynamic-script "poco" "pp")
pocop = #(make-custom-dynamic-script "poco" "p")
pocomp = #(make-custom-dynamic-script "poco" "mp")
pocomf = #(make-custom-dynamic-script "poco" "mf")
pocof = #(make-custom-dynamic-script "poco" "f")
pocoff = #(make-custom-dynamic-script "poco" "ff")
pocofff = #(make-custom-dynamic-script "poco" "fff")

piuppp = #(make-custom-dynamic-script "più" "ppp")
piupp = #(make-custom-dynamic-script "più" "pp")
piup = #(make-custom-dynamic-script "più" "p")
piump = #(make-custom-dynamic-script "più" "mp")
piumf = #(make-custom-dynamic-script "più" "mf")
piuf = #(make-custom-dynamic-script "più" "f")
piuff = #(make-custom-dynamic-script "più" "ff")
piufff = #(make-custom-dynamic-script "più" "fff")

sempreppp = #(make-custom-dynamic-script "sempre" "ppp")
semprepp = #(make-custom-dynamic-script "sempre" "pp")
semprep = #(make-custom-dynamic-script "sempre" "p")
sempremp = #(make-custom-dynamic-script "sempre" "mp")
sempremf = #(make-custom-dynamic-script "sempre" "mf")
sempref = #(make-custom-dynamic-script "sempre" "f")
sempreff = #(make-custom-dynamic-script "sempre" "ff")
semprefff = #(make-custom-dynamic-script "sempre" "fff")

subitoppp = #(make-custom-dynamic-script "subito" "ppp")
subitopp = #(make-custom-dynamic-script "subito" "pp")
subitop = #(make-custom-dynamic-script "subito" "p")
subitomp = #(make-custom-dynamic-script "subito" "mp")
subitomf = #(make-custom-dynamic-script "subito" "mf")
subitof = #(make-custom-dynamic-script "subito" "f")
subitoff = #(make-custom-dynamic-script "subito" "ff")
subitofff = #(make-custom-dynamic-script "subito" "fff")





_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to