     (let [info (server-info)]
       (reset! buffer-count*  (:num-buffers info)))))
 
+(defn server-radians-per-sample
+  "Returns the number of radians per sample on the server. This number
+  may change depending on host architecture but is cached for a given
+  running server for the duration of boot."
+  []
+  (if-let [num @radians-per-sample*]
+    num
+    (let [info (server-info)]
+      (reset! radians-per-sample* (:radians-per-sample info)))))
+
+
 (on-sync-event :shutdown (fn [event-info]
                            (reset! output-bus-count* nil)
                            (reset! input-bus-count* nil)
                            (reset! audio-bus-count* nil)
-                           (reset! buffer-count* nil))
+                           (reset! buffer-count* nil)
+                           (reset! sample-rate* nil)
+                           (reset! sample-dur* nil)
+                           (reset! control-rate* nil)
+                           (reset! control-dur* nil)
+                           (reset! radians-per-sample* nil))
                ::reset-cached-server-info)

      res)))

(defn server-sample-rate
  "Returns the sample rate of the server. This number is cached for a given
  running server for the duration of boot"
  []
  (if-let [rate @sample-rate*]
    rate
    (let [info (server-info)]
      (reset! sample-rate* (:sample-rate info)))))

(defn server-num-output-buses
  "Returns the number of output buses accessible by the server. This number may

        [overtone.sc.machinery.allocator]
        [overtone.helpers lib]))

(defonce output-bus-count*   (atom nil))
(defonce input-bus-count*    (atom nil))
(defonce audio-bus-count*    (atom nil))
(defonce buffer-count*       (atom nil))
(defonce sample-rate*        (atom nil))
(defonce sample-dur*         (atom nil))
(defonce control-rate*       (atom nil))
(defonce control-dur*        (atom nil))
(defonce radians-per-sample* (atom nil))

(defonce __SERVER-INFO__
  (defsynth snd-server-info
