anchor.diff:                                                        (list nv))))))))
       event))
   
  -(defun play-test (item &optional pstream) ;; FIX: move this to debug.lisp
  -  "Simply output information about the event that's being played. Useful for diagnostics when no audio output is available."
  -  (declare (ignore pstream))
  -  (format t "Playing ~s at ~f.~%" item (/ (get-internal-real-time) internal-time-units-per-second)))
  -
   (defmethod keys ((item event))
     (keys (slot-value item 'event-plist)))
   
  
positive.code: (defmethod print-object ((item event) stream)
    (format stream "(~s~{ ~s ~s~})" 'event (event-plist item)))
  
  (defmacro define-event-special-key (name cases &key (remove-keys t) (define-methods nil))
    "Define a special key with the key NAME for events (i.e. keys that take their values from other keys, or keys that have default values).
  
  CASES is a plist of cases mapping event key names to forms. When `event-value' is called on an event for the NAME key, then the event is tested for the keys of CASES in the order they're listed. The associated form of the first key of CASES that exists in the event is evaluated to get the value of that call to `event-value'.
  
negative.code: ;;; instrument/group/out
  
  (define-event-special-key instrument (t :default)
    :define-methods t
    :documentation "The instrument or synth to trigger.")
  
  (define-event-special-key group (t 1))
  
  