         [overtone.libs counters]
         [overtone.helpers seq]
         [overtone.sc bindings]
+        [overtone.sc.node :only [idify]]
         [overtone.sc.machinery.ugen sc-ugen defaults specs special-ops intern-ns]
         [overtone.sc.machinery.ugen.metadata unaryopugen binaryopugen])
   (:require [overtone.sc.machinery.ugen.doc :as doc]))

    (if (and
         (= 1 (count args))
         (not (sc-ugen? (first args)))
         (not (isa? (type (first args)) :overtone.sc.buffer/buffer))
         (not (isa? (type (first args)) :overtone.sc.bus/audio-bus))
         (not (isa? (type (first args)) :overtone.sc.bus/control-bus))
         (map? (first args)))
      (apply f (flatten (seq (first args))))
      (apply f args))))

  arguments, rates, etc."
  [spec rate special]
  (let [expand-flags (map #(:expands? %) (:args spec))]
    (idify-args
     (unwrap-map-arg
      (make-expanding
       (ugen-base-fn spec rate special) expand-flags)))))

;; TODO: Figure out the complete list of control types
;; This is used to determine the controls we list in the synthdef, so we need
