   (:require [afterglow.rhythm :refer [metro-snapshot]]
             [clojure.math.numeric-tower :as math]
             [com.evocomputing.colors :as colors]
-            [taoensso.timbre :refer [error]]))
+            [taoensso.timbre :refer [error]])
+  (:import [afterglow.rhythm Metronome]))
 
 (defprotocol IParam
   "A dynamic parameter which gets evaluated during the run of a light show,


(defn- oscillator-resolver-internal
  "Handles the calculation of an oscillator based on dynamic parameter
  values for at least one of min and max"
  [show params-snapshot min-arg max-arg osc osc-snapshot]
  (let [min (resolve-param min-arg show params-snapshot)
        max (resolve-param max-arg show params-snapshot)
        range (- max min)]
    (if (neg? range)
      (do

      (let [dyn (boolean frame-dynamic)
            eval-fn (if (some? metronome)
                      (fn [show snapshot]
                        (oscillator-resolver-internal show snapshot min max osc
                                                      (metro-snapshot (resolve-param metronome show snapshot))))
                      (fn [show snapshot]
                        (oscillator-resolver-internal show snapshot min max osc snapshot)))]
        (reify IParam
