lilypond-user
[Top][All Lists]
Advanced

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

Re: Beat grouping and reverting


From: Trevor Daniels
Subject: Re: Beat grouping and reverting
Date: Sat, 25 Oct 2008 21:30:19 +0100

Hi Neil

You wrote  Saturday, October 25, 2008 9:06 PM

2008/10/25 Trevor Daniels <address@hidden>:
Carl

But how do you revert entries like this:

((end * * 6 8) . #f) ;; switch-off at-any-beat feature

The simplest way would be to add a function to switch this back on:

I'd like to see the complex way  ;)

Seriously, this confirms what I suspected, that these entries
cannot easily be reverted, so setting beam behaviour with
beatGrouping and friends cannot easily be made to work
with any time signature for which these beam ending rules
are defined.

I'll modify the section of the docs which deals with modifying
auto beams to reflect this behaviour.

I'll also have a play with your function to see what possibilities
it opens up.  Not for the docs, but maybe for a snippet.

Thanks Neil.

#(define (revert-property-setting context property setting)
 "Like the C++ code that executes \revert, but without type
checking. "
 (define (revert-member alist entry new)
   "Return ALIST, with ENTRY removed.  ALIST is not modified, instead
a fresh copy of the list-head is made."
   (cond
    ((null? alist) new)
    ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
    (else (revert-member (cdr alist) entry (cons (car alist) new)))))
 (ly:context-set-property!
  context property
  (revert-member (ly:context-property context property) setting '())))

#(define (allow-at-any-beat num den)
 (ly:export
  (context-spec-music
   (make-apply-context (lambda (c)
  (revert-property-setting
   c 'autoBeamSettings
   (cons `(end * * ,num ,den) #f))))
'Voice)))

\relative c'' {
 #(set-time-signature 6 8 '())
 #(allow-at-any-beat 6 8)
 #(revert-auto-beam-setting '(end * * 6 8) 3 8)
 #(revert-auto-beam-setting '(end 1 32 6 8) 1 8)
 #(revert-auto-beam-setting '(end 1 32 6 8) 1 4)
 #(revert-auto-beam-setting '(end 1 32 6 8) 1 2)
 #(revert-auto-beam-setting '(end 1 32 6 8) 5 8)
 a8 a a a a a
 \set beatGrouping = #'(2 2 2)
 a8 a a a a a
}

A better solution might be to rewrite revert-auto-beam-setting so that
the args for beat begin/end are moved to the optional argument list
(which is currently only used for the context).

Regards,
Neil





reply via email to

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