     - ditto for also-play-chord, also-play-notes 
     - 'mute' functionality, stops oscs but also keeps track of their state so
       they can be restarted when 'unmuted'
+    - a generic `play` function that will do the right thing, depending on the types of the arguments
+        e.g. multiple arguments are treated as a sequence of notes, a collection of notes is treated as a chord
 ")
 

  (doseq [osc @*oscillators*]
    (stop-osc osc)))

(comment "
  TODO: 
    - play-notes and play-chord will also stop all notes


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn start-osc
  "Start an oscillator and add it to *oscillators*."
  [{:keys [osc-node] :as osc-impl}]
