anchor.diff:  
   (defmethod backend-task-removed (task (backend (eql :supercollider)))
     (let ((item (slot-value task 'item)))
  -    (unless (typep item 'event)
  -      (let ((last-output (last-output item)))
  -        (dolist (node (task-nodes task *supercollider-node-map*))
  -          (cl-collider:at (timestamp-to-cl-collider
  -                           (absolute-beats-to-timestamp (+ (slot-value task 'start-beat) (beat last-output) (sustain last-output))
  -                                                        (slot-value task 'clock)))
  -            (cl-collider:release node))))))
  +    (if (typep item 'event)
  +        (map nil 'stop (task-nodes task *supercollider-node-map*)) ;; FIX: this doesn't work because the preview synth doesn't have a gate argument, and non-gated synths aren't kept in the *supercollider-node-map*.
  +        (let ((last-output (last-output item)))
  +          (dolist (node (task-nodes task *supercollider-node-map*))
  +            (cl-collider:at (timestamp-to-cl-collider
  +                             (absolute-beats-to-timestamp (+ (slot-value task 'start-beat) (beat last-output) (sustain last-output))
  +                                                          (slot-value task 'clock)))
  +              (cl-collider:release node))))))
     (setf (task-nodes task *supercollider-node-map*) nil))
   
   ;;; convenience methods
  
positive.code:     t))
  
  (defmethod play ((buffer cl-collider::buffer))
    (play (event :instrument *cl-collider-buffer-preview-synth*
                 :bufnum (cl-collider:bufnum buffer) ;; FIX: send as :buffer or :bufnum key, depending on what the synthdef actually has.
                 :quant 0
                 :latency 0)))
  
  (register-backend :supercollider)
  
  
negative.code: 
  ;;; global settings
  
  (defvar *cl-collider-buffer-preview-synth* :spt
    "The name of the synth to use to `play' a buffer.")
  
  ;;; helper functions
  