         (recur (assoc done group-rate ctl-proxy) (rest todo) (+ offset group-size))))))
 
 (defn- group-params
-  "Groups params by rate.  Groups a list of parameters into a
-   list of lists, one per rate."
+  "Groups params by rate.  Groups a list of parameters into a list of
+   lists, one per rate."
   [params]
   (let [by-rate (reduce (fn [mem param]
                           (let [rate (:rate param)


(defmacro defsynth
  "Define a synthesizer and return a player function. The synth
  definition will be loaded immediately, and a :new-synth event will
  be emitted. Expects a name, an optional doc-string, a vector of
  synth params, and a ugen-form as it's arguments.

  (defsynth foo [freq 440]
    (out 0 (sin-osc freq)))

  (foo :position :head :target 2 440 0.3)

  These can also be abbreviated:
  (foo :tgt 2 :pos :head)"
  [s-name & s-form]
  {:arglists '([name doc-string? params ugen-form])}
  (let [[s-name params ugen-form] (synth-form s-name s-form)]
