   {:freq 440.0 :attack 0.2}"
   [node names]
   (ensure-connected!)
+  (ensure-node-active! node "Attempting to get control values of a node that has been destroyed.")
   (let [res   (recv "/n_set")
         cvals (do (apply snd "/s_get" (to-synth-id node) (stringify names))
                   (:args (deref! res)))]


(defonce ^{:dynamic true} *inactive-node-modification-error* :exception)

(defn inactive-node-modification-error
  "The default error behaviour triggered when a user attempts to either
  control or kill an inactive node."
  [err-msg]

  all nodes in the group."
  [node ctl-start ctl-vals]
  (ensure-connected!)
  (ensure-node-active! node "Attempting to control a node that has been destroyed.")
  (let [node-id (to-synth-id node)]
    (apply snd "/n_setn" node-id ctl-start (count ctl-vals) ctl-vals))
  node)

(defn node-get-control-range
  "Get a range of n controls starting at a given name or index.
  Returns a vector of values."
  [node name-index n]
  (ensure-connected!)
  (ensure-node-active! node "Attempting to access a node that has been destroyed.")
  (let [res   (recv "/n_setn")
        cvals (do (snd "/s_getn" (to-synth-id node) (to-str name-index) n)
                  (:args (deref! res)))]
