     (let [remainder (- duration attack decay sustain)
           hold (max 0.0 remainder)
           ugen (adshr attack decay sustain hold release)]
-      (ugen context at duration))))
+      (-> ugen (run context at duration)))))
 
 (defn percussive [attack decay]
   (envelope [attack 1.0] [decay 0.0]))

(defn connect
  [ugen1 ugen2]
  (fn [context at duration]
    (let [sink (ugen2 context at duration)]
      (.connect (ugen1 context at duration) sink)
      sink)))

(defn connect-> [& nodes]

  "Plug an input into an audio parameter,
  accepting both numbers and ugens."
  (if (fn? input)
    (-> input (run context at duration) (.connect param))
    (.setValueAtTime param input at)))

(defn gain [level]
