 
 (def ^:dynamic *sequencer* (make-sequencer *seq* *synth*))
 
-(defn compose [notes & [sequencer state]]
+(defn compose [notes & [sequencer state _]]
   (let [sequencer (or sequencer *sequencer*)
         notes (if (or (vector? notes) (seq? notes)) notes (list notes))
         state (merge {:sequencer sequencer

                                     :midi-message nil})))
        state))))

(defn play [& [notes sequencer state]]
  (let [sequencer (or sequencer *sequencer*)
        state (compose (or notes '()) sequencer state)]
    (when (nil? notes)

;;    - get a unique set of channels from the intersecting notes
;;    - choose to play on the next available channel on the channel list
;;    - if no channels are available, play on the next channel/least used channel
;;   fix envelopes
;;   :time-signature [4 4]
;;   add shortcuts for intervals, chords, key signatures, dynamics
;;   DAW recording interface for capturing param values / performances
