Skip to content

set limits by section

Michael Edwards edited this page May 12, 2020 · 10 revisions

set-limits-by-section

I find using set-limits in slippery-chicken is really powerful for providing forward-movement in the pitch domain. For example, in the first part of my for Magda Cordell, if she'll have it, the piano part is controlled by set-limits to create an overall descending motion. You can listen at bandcamp and read all about set-limits in the manual.

Sometimes though you don't want to have interpolating limits, rather, you need abrupt pitch range changes on section boundaries. This is where the set-limits-by-section method comes in handy. As this is a slippery-chicken method, it begs the question what comes first, the creation of the slippery-chicken instance, with all its pitches selected as per usual (without set-limits), or the algorithmic generation of set-limits based on the section boundaries (which may be at unknown bar numbers, and may even change as you develop and increase/decrease the length of the piece)?

This chicken-before-the-egg problem can be solved with sc-init. This method is actually called by the system every time you initialise a slippery-chicken object, but it can also be called again, explicitly, if you need to regenerate the piece:

(let ((mini
       (make-slippery-chicken
        '+mini+
        :ensemble '(((vc (cello :midi-channel 1))))
        :set-palette '((1 ((f3 g3 a3 b3 c4))))
        :set-map '((1 (1 1 1 1 1))
                   (2 (1 1 1 1 1))
                   (3 (1 1 1 1 1)))
        :rthm-seq-palette '((1 ((((4 4) h q e s s))
                                :pitch-seq-palette ((1 2 3 4 5)))))
        :rthm-seq-map '((1 ((vc (1 1 1 1 1))))
                        (2 ((vc (1 1 1 1 1))))
                        (3 ((vc (1 1 1 1 1))))))))
  (flet ((print-em ()
                   ;;                first bars of sections 1, 2, 3
                   (loop for bar in '(1 6 11) do
                         (print (get-pitch-symbols (get-bar mini bar 'vc))))))
    (print-em)
    ;; replace existing curve. NB The y values are degrees which if default is
    ;; quarter-tone scale might be the double of what is perhaps  expected
    ;; (i.e. (note-to-degree 'c4) -> 120)
    (print (set-limits-by-section mini '(g3 a3 c4) 'set-limits-high 'vc))
    (sc-init mini)
    ;; note the new (repeating) pitches
    (print-em)))

---->>

******* section (1)
Getting notes for VC
******* section (2)
Getting notes for VC
******* section (3)
Getting notes for VC
WARNING:
   slippery-chicken::tempo-curve-to-map: No tempo-map or tempo-curve given. 
Using default of crotchet/quarter = 60.
Shortening short, fast leaps...
Shortened 0 large fast leaps
(F3 G3 A3 B3 C4) 
(F3 G3 A3 B3 C4) 
(F3 G3 A3 B3 C4) 
(1 110 5 110 6 114 10 114 11 120 15 120) 
******* section (1)
Getting notes for VC
******* section (2)
Getting notes for VC
******* section (3)
Getting notes for VC
Shortening short, fast leaps...
Shortened 0 large fast leaps
(F3 F3 G3 G3 G3) 
(F3 G3 G3 A3 A3) 
(F3 G3 A3 B3 C4) 
NIL
Clone this wiki locally