         (overtone.sc.ugen-collide/* mod-rate-ctl)
         (o/free-verb verb verb verb))))
 
-(def drones {::drone-aw {::pitch 300 ::eq-freq [570 840 2410]  ::hpf-rlpf [900 600 0.6] ::q 0.1}
-             ::drone-oo {::pitch 120 ::eq-freq [300 870 2240]  ::hpf-rlpf [0 600 0.6] ::q 0.1}
-             ::drone-ae {::pitch 100 ::eq-freq [270 2290 3010] ::hpf-rlpf [600 8000 0.6] ::q 0.1}
-             ::drone-eh {::pitch 80  ::eq-freq [530 1840 2480] ::hpf-rlpf [0 750 0.9] ::q 0.1}})
-
 (defn ctl-names
-  "I take a generated sound's symbol (ex: 'drone-aw11111) and a parameter (ex: :freq) and destructure the generated control values (ex: :freq > freq__20280__auto__).
+  "I take an instrument (type - :overtone.studio.inst/instrument) and a keyword parameter (ex: :freq)
+   ane destructure the generated control values (ex: :freq > freq__20280__auto__).
+
    I return the generated control value.
 
-   Example: (ctl-names 'drone-aw20496 :amp) => :amp__20282__auto__"
-
-  [sound-symbol parameter]
-  (let [ctl-data (o/ctl (eval sound-symbol))
-        {params :params} ctl-data
-        [freq gate amp] params
-        gensym-keymap {:freq (freq :name) :gate (gate :name) :amp (amp :name)}]
-
-    (keyword (gensym-keymap parameter))))
+   Example: (ctl-names (get @person-sound 1) :amp) => :amp__20282__auto__"
+
+  [instrument parameter]
+
+  (if-let [instrument-symbol (inst-name-getter instrument)]
+    ;; If the instrument doesn't exist, it will return nil and not execute the rest of the closure.
+
+    (let [ctl-data (o/ctl (eval instrument-symbol)) ;; Grab the control data map
+          {params :params} ctl-data                 ;; Grab the parametrs from the control data
+          [freq gate amp verb mod-rate] params      ;; Destructure the parameters
+          gensym-keymap {:freq (freq :name)
+                         :gate (gate :name)
+                         :amp (amp :name)
+                         :verb (verb :name)
+                         :mod-rate (mod-rate :name)}]
+
+      (keyword (gensym-keymap parameter)))))
 
 (defmacro sound-returner [drone]
   "I take a sound's name as defined using clojure.spec and call the definst macro to generate an instrument on the fly

    (println pid " entered")

  (case number-of-people
    0 (add-person-sound! pid "drone-aw")
    1 (add-person-sound! pid "drone-ae")
    2 (add-person-sound! pid "drone-eh")
    3 (add-person-sound! pid "drone-oo")
    "atom full: four people are tracked")))

  ;; (case number-of-people
  ;;   0 (add-person-sound! pid "drone-aw-sus")
  ;;   1 (add-person-sound! pid "drone-ae-sus")
  ;;   2 (add-person-sound! pid "drone-eh-sus")
  ;;   3 (add-person-sound! pid "drone-oo-sus")
  ;;   "atom full: four people are tracked")))

(defn control-sound
  "I take a val between 0 and 1000+, map the value, and send it to the instrument's controller."
  [pid val]
  (let [verb-val  (o/scale-range val 0 1000 1 0.3)
        kr-val    (o/scale-range val 0 1000 25 0)
        amp-val   (amplitude-mul val)]
    (if (contains? @person-sound pid)
      (o/ctl (get-sound pid)
           :amp amp-val
           :verb verb-val
           :mod-rate-ctl kr-val))))


;; TODO -

          :opt [::attack ::sustain ::release ::gate]))

(def synth-defaults
  {::vca 1 ;; TODO: arbitrarily changed this from 1. What is the correct value?
   ::reverb 1
   ::vco 25
   ::attack 5.0
