           data (.getChannelData buffer 0)]
       (doseq [i (range sample-rate)]
         (aset data i (generate-bit! i)))
-      (doto (.createConvolver context)
-        (-> .-buffer (set! buffer))))))
+      (section
+        (doto (.createConvolver context)
+          (-> .-buffer (set! buffer)))))))
 
 (def reverb
   (let [duration 5

; Combinators

(defn connect
  "Use the output of one node as the input to another."
  [node1 node2]
  (fn [context at duration]
    (let [sink (-> node2 (run-with context at duration))]
      (-> node1 (run-with context at duration) (.connect sink))
      sink)))

(defn connect->
  "Connect nodes in series."
  [& nodes]
  (reduce connect nodes))

(defn add
  "Add together nodes by connecting them all to the same gain."
  [& nodes]
  (fn [context at duration]
    (let [sink (-> (gain 1.0) (run-with context at duration))]
      (doseq [node nodes]
        (-> node (run-with context at duration) (.connect sink)))
      sink)))


; Noise

          data (.getChannelData buffer 0)]
      (doseq [i (range sample-rate)]
        (aset data i (generate-bit!)))
      (section
        (doto (.createBufferSource context)
          (-> .-buffer (set! buffer))
          (.start at))))))

(def white-noise
  (let [white #(-> (js/Math.random) (* 2.0) (- 1.0))]
