All posts by Daniel Ross

EDIT: add-auxiliary-notes

Hi Mike,

I’m loving add-auxiliary-notes but it plays havoc with handle-ties when used in conjunction with any of the tie-over-rests, etc. methods.

I’ve added an extra line to the add-auxiliary-notes-aux function which makes everything work nicely. Could this be incorporated into the download, please?

(defun add-auxiliary-notes-aux (pitch-list &key (num-notes 3) (interval 1)
                                             ignore (activity-level 5)
                                             destructively verbose)
  (let* ((igns (loop for p in (force-list ignore) collect
                    (frequency (make-pitch p))))
         (most-used (hash-least-useds (pitch-list-stats pitch-list)
                                      :ignore igns :num num-notes
                                      :auto-inc nil :invert t))
         (result '())
         (als (loop repeat num-notes collect (make-al 2))))
    (loop for thing in pitch-list
       for freq = (get-freq thing)
       for pos = (position freq most-used)
       do
         (push (if (and (atom freq)     ; don't fiddle with chords
                        pos
                        (active (nth pos als) activity-level))
		   ;; DJR - Mon Jun 27 18:34:35 BST 2016
		   ;; The following line stops the function from
		   ;; disrupting handle-ties
		   (unless (or (is-tied-to thing)(is-tied-from thing))
		     (if (event-p thing)
			 (prog2
			     (when verbose
			       (format t "~&At bar ~a, transposing ~a "
				       (bar-num thing) (get-pitch-symbol thing)))
			     (transpose thing interval
					:destructively destructively)
			   (when verbose
			     (format t "to ~a" (get-pitch-symbol thing))))
			 (transpose thing interval)))
                   thing)
               result))
    (nreverse result)))

Why The title of my piece for the…

IMG_1057

Why

The title of my piece for the slippery chicken Symposium arose after attending a lecture by the composer Christopher Fox on musical memory. One of the points he mentioned was that when we listen to music we tend to have in mind the thing we are currently listening to and the thing we listened to just before that. Every time we hear something that we recognise it is like returning to the (a) chorus, therefore it is possible to say that all music is essentially in rondo form.

How

At the heart of this piece is a rhythm chain, or more specifically, two rhythm chains which give me four lines of counterpoint. Using the add-voice method I then double the number of voices to eight and use the data to generate two separate slippery chicken objects. These are spliced together using my copy-bars-sc2sc method. (Follow the link and you can have it for yourself.)

The rondo part of the piece comes from a third slippery chicken object which contains hand coded rthm-seqs. I substitute these for the sticking points of the rhythm chain using a loop that analyses time signatures bar-by-bar and copy-bars-sc2sc. When the time signature is ‘(3 8) the method does its thing. (The time signature is only ever ‘(3 8) during the sticking points because these are defined as repeated quavers (‘e) in multiples of 3. The rhythm chain itself tends to make bars of ‘(2 4) and ‘(3 4).)

The pitch data is generated from harmonic sequences. Most by harm-list. The ordering of the set-map is determined by L-system rules.

Tempo changes are dependent on the sl-c object and there are brief rallentandi between these sections to make the piece sound more natural. This is further aided by my sc-midi-groove method (NB this is not yet available to the public).

Afters

It is very easy to create interesting material within sl-c but it is much harder to combine several different sections together within the same call to make-slippery-chicken. My copy-bars-sc2sc method makes life a lot easier in this regard and I plan to use it a lot more. At the conference, I presented work I had made using the method and have made it available on my website for anyone else to use. http://vitruviandan.wordpress.com/code

Midi-file of the piece: rondo-del-computer

 

How do I add a bar to the…

How do I add a bar to the end of a rthm-chain? The add-bar method returns an error.

(let* ((rch (make-rthm-chain
	     'test-rch 23
	     '((((e) e)			; 4 in total
		(- s (s) (s) s -)
		({ 3 (te) - te te - })
		((e.) s))
	       (({ 3 (te) te (te) })	; what we transition to
		({ 3 - te (te) te - })
		({ 3 (te) - te te - })
		({ 3 (te) (te) te })))
	     '((((q q)			; the 2/4 bars: 5 total
		 ((q) q)
		 ((q) q)
		 ((q) (s) e.)
		 (- e e - (e) e))
		(({ 3 te+te te+te te+te }) ; what we transition to
		 (q - s e. -)
		 (q (s) e.)
		 (q (s) - s e -)
		 ({ 3 te+te te+te - te te - })))
	       ((((e.) s (e) e (s) e.)	; the 3/4 bars: 4 total
		 (- e e - (e) e (q))
		 (- e. s - - +e e - (q))
		 (q (e.) s (q)))
		(({ 3 (te) (te) te+te te+te } (q)) ; what we transition to
		 (- e. s - (q) (s) - s e -)
		 ({ 3 te+te te } (q) q)
		 ({ 3 - te te te - } (e) e { 3 (te) (te) te }))))
	     :players '(pno pnol)
	     :slow-fibonacci t
	     :activity-curve '(0 1 100 10)
	     :harmonic-rthm-curve '(0 1 100 3)
	     :do-sticking t
	     :do-sticking-curve '(0 1 25 0 50 1 75 0 100 1)
	     :sticking-curve '(0 0 100 10)
	     :sticking-repeats '(3 5 7 11 2 7 5 3 13)
	     :sticking-rthms '(e s. 32 e.)
	     :split-data '(4 7))))

  (create-psps (palette rch))
  
  (make-slippery-chicken  
   '+mini+ 
   :title "Your Title Here" 
   :composer "Your Name Here"
   :ensemble '(((pno (piano :midi-channel 1))
		(pnol (piano-lh :midi-channel 1))))
   :staff-groupings '(2)
   :tempo-map '((1 (q 60)))
   :set-palette `((set1 ((b2 a4 d5 e5 a5 d6))) 
		  (set2 ((b2 fs3 d4 e4 a4 d5 e5 a5 d6))))
   :set-map `((1 ,(loop for i below (num-rthm-seqs rch)
		     collect (if (evenp i) 'set1 'set2))))
   :rthm-seq-palette (palette rch)
   :rthm-seq-map rch)

  (add-bar rch (make-rthm-seq-bar '((5 8) e e+32 s. +q)))

;;; Output
  (midi-play +mini+)			; midi file
  (cmn-display +mini+)			; score display
					;(lp-display +mini+) ; lilypond display
  )