   If an init function is already present it will get called after doing the
   mapping and mode transformations."
   [spec]
-  (let [defaulter    (partial add-default-args spec)
-        mapper       (partial map-ugen-args spec)
-        init-fn      (if (contains? spec :init)
-                       (:init spec)
-                       placebo-ugen-init-fn)
-        initer       (partial with-ugen-metadata-init spec init-fn)
-        n-outputer   (partial with-num-outs-mode spec)
-        floater      (partial with-floated-args spec)
-        appender     (partial append-seq-args spec)
-        auto-rater   (partial auto-rate-setter spec)
-        rate-checker (partial check-arg-rates spec)]
+  (let [defaulter       (partial add-default-args spec)
+        mapper          (partial map-ugen-args spec)
+        init-fn         (if (contains? spec :init)
+                          (:init spec)
+                          placebo-ugen-init-fn)
+        initer          (partial with-ugen-metadata-init spec init-fn)
+        n-outputer      (partial with-num-outs-mode spec)
+        floater         (partial with-floated-args spec)
+        appender        (partial append-seq-args spec)
+        auto-rater      (partial auto-rate-setter spec)
+        rate-checker    (partial check-arg-rates spec)
+        checker-fn      (if (contains? spec :check)
+                          (:check spec)
+                          placebo-ugen-checker-fn)
+        bespoke-checker (partial with-ugen-checker-fn spec checker-fn)]
 
     (assoc spec :init
 

  "The default ugen init fn (used if an :init key is not present in the ugen
  metadata). Simply returns the args unchanged."
  [rate args spec] args)

(defn- check-arg-rates [spec ugen]
  (let [cur-rate (REVERSE-RATES (:rate ugen))

                 bus->id
                 appender
                 auto-rater
                 rate-checker
                 bespoke-checker)))))

(defn- with-fn-names
  "Generates all the function names for this ugen and adds a :fn-names map
