Updates from Daniel Ross Toggle Comment Threads | Keyboard Shortcuts

  • Daniel Ross 16:07 on July 7, 2016 Permalink | Reply
    Tags: rhythm   

    I turns out you can make a rhtyhm with value ‘fq, fh, etc. What does the ‘f’ mean?

     
    • Daniel Ross 16:18 on July 7, 2016 Permalink | Reply

      O wait, ignore me

  • Daniel Ross 10:41 on July 6, 2016 Permalink | Reply  

    At the conference MIke mentioned how to stop the sl-c global variable from triggering a warning. Can anyone remember how to do this?

     
    • Michael Edwards 16:58 on July 10, 2016 Permalink | Reply

      if you mean when calling e.g. a post-gen function, then you can put something like this at the top of your file: (proclaim ‘(special +my-piece+)) then any reference to +my-piece+ in that source file will not trigger a warning. Or within a single function, your first line of code in the body should be (declare (special +my-piece+))

  • Daniel Ross 13:32 on June 28, 2016 Permalink | Reply
    Tags: dynamics, , staff, staves   

    Above-the-staff Lilypond dynamics. Simple but very useful code.
    Above-the-Staff Lilypond Dynamics

     
    • Michael Edwards 17:53 on June 28, 2016 Permalink | Reply

      nice one dan. and for future reference, if you ever add text marks to an event, you can force these to be above or below the staff by starting the string with ^ (up) or _ (down)

  • Daniel Ross 18:36 on June 27, 2016 Permalink | Reply  

    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)))
    
     
    • Michael Edwards 18:01 on June 28, 2016 Permalink | Reply

      Well spotted Dan. Thanks for this. I’d do your is-tied-* tests after the (event-p ) test because otherwise those methods might fail. But I’ve added this very sane code to the repo now:

                         (if (and (event-p thing)
                                  ;; thanks to Dan Ross for this; a further
                                  ;; improvement might be to change the tied notes if
                                  ;; this is tied-from but hey ho...
                                  (not (is-tied-to thing))
                                  (not (is-tied-from thing)))
      
  • Daniel Ross 14:21 on June 15, 2016 Permalink | Reply
    Tags: add-auxiliary-notes, error, transpose   

    Getting an error when calling add-auxiliary-notes. No idea how it is passing the wrong arguments to transpose in add-axiliary-notes-aux

    There is no applicable method for the generic function

    1. when called with arguments

    (2 1).
    [Condition of type SIMPLE-ERROR]

     
    • Daniel Ross 14:32 on June 15, 2016 Permalink | Reply

      Here’s some simplified code. I think it’s a rhythm chain problem.

      (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)
      :activity-curve ‘(0 10 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 1)
      :sticking-repeats ‘(3 5 7 11 2 7 5 3 13)
      :sticking-rthms ‘(e s e q)
      :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-auxiliary-notes +mini+)
      ;;; Output
      (midi-play +mini+ :midi-file “/users/danieljross/desktop/mini.mid”)
      (cmn-display +mini+) ; score display
      ;(lp-display +mini+) ; lilypond display
      )

    • Michael Edwards 19:53 on June 15, 2016 Permalink | Reply

      Hi Dan, you’re going to hate this answer but this code runs perfectly for me. Have you got an old/corrupted version of the source again perhaps?

      By the way, if you put code within the <pre> </pre> tags copy/paste might be easier

      • Daniel Ross 10:02 on June 16, 2016 Permalink | Reply

        Yeah, sorry, forgot about the tags. Anyway, re-updated and all works now. Odd. Thanks for the help.

  • Daniel Ross 17:01 on June 12, 2016 Permalink | Reply  

    IMG_1058

    The EMS was packed for the concert and the Disklavier did sterling work! There will be video and audio available soon so watch this space!

     
  • Daniel Ross 16:50 on June 12, 2016 Permalink | Reply  

    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

     

     
  • Daniel Ross 15:56 on June 9, 2016 Permalink | Reply  

    When adding dynamics post-gen with add-mark, the added dynamic doesn’t effect the midi velocity of subsequent notes. How do you get around this, Mike?

     
    • Daniel Ross 16:48 on June 9, 2016 Permalink | Reply

      OK, have found set-amplitudes.

  • Daniel Ross 13:16 on June 6, 2016 Permalink | Reply
    Tags: add-bar, make-rthm-chain, rthm-chain   

    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
      )
    
     
    • Michael Edwards 14:22 on June 6, 2016 Permalink | Reply

      add-bar is a rthm-seq method but rthm-chain is a rthm-seq-map subclass so you just can’t do what you’ve tried to do. Maybe if you get a rthm-seq out of rch via get-data you might be able to add a bar

  • Daniel Ross 09:42 on June 6, 2016 Permalink | Reply
    Tags:   

    I did a recording session with the disklavier on Friday. Velocity 90 is massive. Don’t go above 90.

     
    • Michael Edwards 12:19 on June 6, 2016 Permalink | Reply

      anyone who’s setting their amplitudes before the call to midi-play can make sure their velocities don’t get too high via this hard-limiting approach when calling midi-play:

      (midi-play +jitterbug+ :force-velocity
      	   #'(lambda (event)
      	       (min 100 (floor (* (amplitude event) 127)))))
      
      • Michael Edwards 12:23 on June 6, 2016 Permalink | Reply

        or perhaps simpler and not hard-limiting, this will automatically range over 100 instead of 127, assuming that your events’ amplitude values range up to 1.0

        (midi-play +jitterbug+ :force-velocity
                   #'(lambda (event)
                       (floor (* (amplitude event) 100))))
        
  • Daniel Ross 16:22 on May 31, 2016 Permalink | Reply  

    Would be lovely to include something like this in sl-c. Something to discuss at the symposium, perhaps?

     
    • Michael Edwards 16:48 on June 1, 2016 Permalink | Reply

      That looks great though I’m not sure how it works. Definitely something to discuss at the symposium though, thanks.

  • Daniel Ross 09:46 on May 20, 2016 Permalink | Reply
    Tags:   

    slip chick symp

    slippery chicken symposium

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel