I made a small change to the randomization code (attached).
- Mark
\version "2.12.0"
rightTearWidth = #1
rightTearFixedLengths = #'(0 1 3 4 2)
rightTearGeneric =
#(define-music-function (parser location lengths) (list?)
#{
#(define (x-ext n)
(cons (* (list-ref $lengths n) (/ rightTearWidth 4)) rightTearWidth))
#(define y-ext '(1.5 . 2.5))
\once \override Staff.BarLine #'stencil = #ly:text-interface::print
\once \override Staff.BarLine #'text = \markup
\override #'(baseline-skip . 0) \with-color #white
\column {
\filled-box #(x-ext 0) #y-ext #0
\filled-box #(x-ext 1) #y-ext #0
\filled-box #(x-ext 2) #y-ext #0
\filled-box #(x-ext 3) #y-ext #0
\filled-box #(x-ext 4) #y-ext #0
}
\once \override Staff.BarLine #'layer = #1
\once \override Staff.BarLine #'X-extent = #(cons 0 (- rightTearWidth 0.1))
\break
#} )
rightTearFixed =
#(define-music-function (parser location) ()
#{ \rightTearGeneric \rightTearFixedLengths #} )
rightTearCustom =
#(define-music-function (parser location lengths) (list?)
#{ \rightTearGeneric #$lengths #} )
rightTearRandom =
#(define-music-function (parser location) ()
#{
\rightTearGeneric
#(let loop ((unused '(0 1 2 3 4))
(lengths '()))
(if (= (length lengths) 5)
lengths
(let* ((x (random (length unused)))
(y (- (length unused) x))
(z (list-ref unused x)))
(loop (append (list-tail unused (+ x 1))
(list-tail (reverse unused) y))
(append lengths `(,z))))))
#} )
rTF = #rightTearFixed
rTC = #rightTearCustom
rTR = #rightTearRandom
\score {
\relative {
g'4 d' b d \rightTearFixed
g,4 d' b d \rTR
g,4 d' b d \rTR
g,4 d' b d \rTR
g,4 d' b d \rTR
g,4 d' b d \rTR
g,4 d' b d \rightTearCustom #'(0 1 2 3 4)
g,4 d' b d \rightTearRandom
%%using abbreviated forms:
g,4 d' b d \rTF
g,4 d' b d \rTC #'(0 1 2 3 4)
g,4 d' b d \rTR
}
\layout {
indent = #0
ragged-right = ##t
}
}
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user