         (first expanded)
         expanded))))
 
-; TODO: Finish me!  
+; TODO: Finish me!
 ; Need to execute the check predicates to do things like verify argument rates, etc...
 (defn check-ugen-args [spec rate special args]
   (if (vector? (:check spec))

   :standard true
   })

(defn normalize-ugen-name 
  "Normalizes SuperCollider and overtone-style names to squeezed lower-case."
  [n]
  (.replaceAll (.toLowerCase (str n)) "[-|_]" ""))

(defn overtone-ugen-name 
  "A basic camelCase to with-dash name converter tuned to convert SuperCollider names to Overtone names.  
  Most likely needs improvement."
  [n]
  (let [n (.replaceAll n "([a-z])([A-Z])" "$1-$2") 
        n (.replaceAll n "([A-Z])([A-Z][a-z])" "$1-$2") 
        n (.replaceAll n "_" "-") 
        n (.toLowerCase n)]
  n))


  [spec]
  (assoc spec :categories (get UGEN-CATEGORY-MAP (:name spec) [])))

(defn- with-expands
  "Sets the :expands? attribute for ugen-spec arguments, which will inform the
  automatic channel expansion system when to expand argument."
  [spec]
  (assoc spec :args
         (map (fn [arg]
                (assoc arg :expands?
                       (get UGEN-SPEC-EXPANSION-MODES (get arg :mode :standard))))
              (:args spec))))

(defn- with-fn-names
  "Generates all the function names for this ugen and adds a :fn-names map
  that maps function names to rates, representing the output rate.

  All available rates get an explicit function name of the form <fn-name>:<rate>
