Thanks, Pedro, this is some interesting code! There's definitely something for me to learn here.
On Wed, Feb 13, 2019 at 4:13 AM Pedro Pessoa <pedrops...@gmail.com> wrote: > Hello John, > I took this task as a way of learning a bit more about moments and > durations > (and also, I wanted to achieve this a while ago). It is certainly not a > very > robust or elegant solution, but seems to work for this particular case. > > %% \makeRestOfLenght \mus "rest/skip" upbeat %% > > \version "2.19.82" > partA = { c'2 b | R1*3 } > partB = { \partial 4 g4 | \bar "||" c'1 } > > #(define (make-dynamic-rest len event) > "The rest/skip body." > (make-music > event ; To choose if it is gonna be Skip or Rest > 'duration > ; intlog transforms the rational values used in Moments (the > denominator) into log values used in Durations. > ; 1 (whole)->0 > ; 2 (half)->1 > ; 4 (quarter)->2 ... etc > (ly:make-duration (ly:intlog2 len)))) > > #(define (makeRestofLog num den opts) > "Logging function" > (display (format "~%>> \\makeRestOfLenght:~%~A ~As of value ~A will be > created:~%" num opts den))) > > makeRestOfLenght= > #(define-scheme-function (mus opts upbeat)(ly:music? string? ly:music?) > "Creates a series of rests/skips of the same length as the given music > minus an upbeat value. Opts are 'rest', 'skip'. Anything else calls > 'rest'." > (let* ((musLen (ly:music-length mus)); > (upBeatLen (ly:music-length upbeat)) > (musMinusUp (ly:moment-sub musLen upBeatLen)) > (den (ly:moment-main-denominator musMinusUp)) > (num (ly:moment-main-numerator musMinusUp)) > (event (cond > ((string>= opts "skip") > 'SkipEvent) > ((string>= opts "rest") > 'RestEvent) > (else > (set! opts "rest") > 'RestEvent) > )) > (rests '())) > (makeRestofLog num den opts) ; Didatic logging. > > ; Iterate over the number of rest needed (given by the numerator). > ; The value of the rest is given by the denominator. > (let loop ((i 0)) > (if (< i num) > (begin > (set! rests (append rests (list (make-dynamic-rest den > event)))) > (loop (+ i 1))))) > (newline) > (make-music > 'SequentialMusic > 'elements > rests) > )) > > \score { > \new Staff << > \new Voice \partA > \new Voice { > % \makeRestOfLenght \partA "rest" 4 % To visualize rests. > \makeRestOfLenght \partA "skip" 4 > \partB > } > >> > } > > > > > > -- > Sent from: http://lilypond.1069038.n5.nabble.com/User-f3.html > > _______________________________________________ > lilypond-user mailing list > lilypond-user@gnu.org > https://lists.gnu.org/mailman/listinfo/lilypond-user >
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user