anchor.diff:                                                        (list ,@(ensure-list remove-keys)))))
          ,(when define-methods
             `(progn
  +             ,(when documentation
  +                `(defgeneric ,name (object)
  +                   (:documentation ,documentation)))
                (defmethod ,name ((event null)) nil)
                (defmethod ,name ((event event))
                  (event-value event ,kwname))
  
positive.code: ;;; amp/pan
  
  (define-event-special-key amp (:db (db-amp (raw-event-value event :db))
                                      t 0.5)
    :define-methods t)
  
  (define-event-special-key db (:amp (amp-db (raw-event-value event :amp))
                                      t (amp-db 0.5))
    :define-methods t)
  
  (define-event-special-key pan (t 0)
    :define-methods t)
  
  ;;; dur/delta
  
  
negative.code: ;; FIX: implement more keys and event types (see TODO.org)
  
  ;;; event glue
  
  (defgeneric event-plist (event)
    (:documentation "The raw plist containing the key/value pairs of the event."))
  
  (defclass event ()
    ((event-plist :initarg :event-plist :initform (list) :reader event-plist :type list :documentation "The plist containing all of the event's keys and values.")
  