anchor.diff:  
   (defun ensure-german-piano-key (key-string groups)
     (when key-string
  -    (let ((sharp-p (aref groups 4))
  -          (flat-p (aref groups 5))
  -          (low (when (aref groups 2) (length (aref groups 0))))
  -          (high (when (aref groups 3) (length (aref groups 6)))))
  +    (let ((sharp-p (when (< 0 (length (aref groups 4))) (aref groups 4)))
  +          (flat-p (when (< 0 (length (aref groups 5))) (aref groups 5)))
  +          (low (when (< 0 (length (aref groups 2))) (length (aref groups 0))))
  +          (high (when (< 0 (length (aref groups 3))) (length (aref groups 6)))))
         (when (or (and high low) (and flat-p sharp-p))
           (invalid-key-notation-error key-string))
         (let ((note (string-upcase (if low (aref groups 2) (aref groups 3)))))
  
positive.code:     (double-float number)
      (number (coerce number 'double-float))))
  
  (defun ensure-pitch (pitch)
    (etypecase pitch
      (symbol (case pitch
                ((german austrian) 443.0d0)
                (swiss 442.0d0)
                (von-kajaran 444.0d0)
                (T 440.0d0)))
      (number (ensure-double-float pitch))))
  
  (defun piano-key->pitch (key &key (tuning 440.0d0))
    (coerce (+ (- (ensure-pitch tuning) 440.0d0)
               (* 440.0d0 (expt 2.0d0 (/ (- (ensure-piano-key key) 49.0d0) 12.0d0))))
            'single-float))
  
  
negative.code: (defun ensure-english-piano-key (key-string groups)
    (when key-string
      (let ((note (char (aref groups 0) 0))
            (flat-p (when (< 0 (length (aref groups 1))) (aref groups 1)))
            (sharp-p (when (< 0 (length (aref groups 2))) (aref groups 2)))
            (octave (parse-integer (aref groups 3))))
        (when (and flat-p sharp-p)
          (invalid-key-notation-error key-string))
        (+ (cond (flat-p -1) (sharp-p 1) (T 0))
  