 
         (swap! state-atom assoc-in [:step] index)
 
-        (doseq [row (:rows state)]
-          (when-not (:mute row)
-            (at (metro beat) (play-step row index))))
+        (doseq [{:keys [inst value]} (:rows state)]
+          (when (value index)
+            (at (metro beat) (inst))))
 
         (apply-at (metro next-beat) #'step-player
                   [state-atom next-beat])))))

                               :north control-pane
                               :west (grid-panel :columns 1
                                                 :items inst-panels)
                               :center grid)
                   :on-close :dispose)]

      (bind/bind bpm-spinner (bind/b-do [v] (metro :bpm v)))
      (bind/bind state-atom (bind/b-do [v] (repaint! grid)))

      (swap! state-atom assoc-in [:solo-bg]
             (button-group :buttons (select f [:.solo])))

      (listen play-btn :action
              (fn [e]

        r-size (/ (height grid) n-rows)
        c-size (/ (width  grid) n-cols)
        r      (int (/ y r-size))
        c      (int (/ x c-size))]
    { :row r :col c }))

(defn- on-grid-clicked [state e]
  (let [{:keys [row col]} (parse-grid-click state e)
        new-state (toggle-entry state row col)]

    ;;when they enable a cell, play the sample.
    (when-not (:playing? new-state)
      ((get-in new-state [:rows row :inst])))

    new-state))

(defn- on-grid-drag [state e]
  (let [{:keys [row col]} (parse-grid-click state e)]
    (set-entry state row col (not (.isShiftDown e)))))

(defn- step-grid [state-atom]
  (let [state @state-atom

        c (canvas :background :darkgrey
