    ::release 5.0
    ::gate 1})
 
-(defn tremelo-freq []
-  (fn [] (sin-osc:kr 0.5)))
-
 (s/fdef vowel-formant
         :args (s/cat :freq number? :eq-freq number? :q number?)
         :ret (s/fspec :args (s/cat :saw clojure.test/function? :freq number?)
                       :ret number?))
 
-(defn vowel-formant [freq eq-freq q]
-  (fn [] (resonz (saw freq) eq-freq q)))
+;;;;;;;;;;;;;;;;;;;;;
+;; Audio           ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+(defn vowel-formant
+  "I EQ a narrow Q on a given frequency to shape a saw waveform of a certain pitch."
+  [pitch eq-freq q]
+  (fn [] (resonz (saw pitch) eq-freq q)))
 
 (defn synth-unit-layered [freq eq-freq q kr-mul]
   (let [[freq-a freq-b freq-c] eq-freq]

        synth-unit-lpf (rlpf (* 0.5 synth-unit)
                                       (mouse-x 10 10000)
                                       (mouse-y 0.0001 0.9999))]

    synth-unit-lpf))

(definst drone-aw-sus [freq 300
                       amp (synth-defaults ::vca)
                       verb (synth-defaults ::reverb)
                       kr-mul (synth-defaults ::vco)
                       attack (synth-defaults ::attack)
                       sustain (synth-defaults ::sustain)
                       release (synth-defaults ::release)
                       gate (synth-defaults ::gate)]
  (let [eq-freq      [570 840 2410]
        q            0.1
        synth-unit (synth-unit-layered freq eq-freq q 0.5)
        synth-unit-env  (* (env-gen (asr attack sustain release) gate) synth-unit)
        synth-unit-hpf  (hpf synth-unit-env 900)
        synth-unit-lpf  (* amp (rlpf synth-unit-hpf 600 0.6))]

    (out 0 (free-verb synth-unit-lpf verb verb verb))
    (out 1 (free-verb synth-unit-lpf verb verb verb))))


(definst drone-ae-sus [freq 100 verb 1 kr-mul 25 amp 0.75
                       attack 35.0 sustain 0.4 release 15.0 gate 1]

  (let [eq-freq      [270 2290 3010]
        q            0.1
        synth-unit (synth-unit-layered freq eq-freq q 0.5)
        synth-unit-env  (* (env-gen (asr attack sustain release) gate) synth-unit)
        synth-unit-hpf  (* amp (hpf synth-unit-env 600))
        synth-unit-lpf  (rlpf synth-unit-hpf 8000 0.6)]

    (out 0 (free-verb synth-unit-lpf verb verb verb))
    (out 1 (free-verb synth-unit-lpf verb verb verb))))

(definst drone-eh-sus [freq 80 verb 1 kr-mul 25 amp 1
                       attack 5.0 sustain 0.4 release 15.0 gate 1]
  (let [eq-freq      [530 1840 2480]
        q            0.1
        synth-unit (synth-unit-layered freq eq-freq q 0.5)
        synth-unit-env  (* (env-gen (asr attack sustain release) gate) synth-unit)
        synth-unit-lpf  (rlpf synth-unit-env 750 0.9)]

    (out 0 (free-verb synth-unit-lpf verb verb verb))
    (out 1 (free-verb synth-unit-lpf verb verb verb))))

(definst drone-oo-sus [freq 120 verb 1 kr-mul 25 amp 1
                       attack 5.0 sustain 0.4 release 15.0 gate 1]

  (let [eq-freq      [300 870 2240]
        q            0.1
        synth-unit (synth-unit-layered freq eq-freq q 0.5)
        synth-unit-env  (* (env-gen (asr attack sustain release) gate) synth-unit)
        synth-unit-lpf  (rlpf synth-unit-env 600 0.6)]

    (out 0 (free-verb synth-unit-lpf verb verb verb))
    (out 1 (free-verb synth-unit-lpf verb verb verb))))

(defn amplitude-mul
  "This is a quick 'n dirty function that lowers the amplitude over time. It was written to compensate the removal of reverb over time and the increase in the perceived loudness of a sound."

    (>= age 1000) 0.4
    :else 1))

(defn end-sound! [pid]
  (if (contains? @person-sound pid)
    (do
