               (events/listen audio "pause" #(update-status :paused))
               (events/listen audio "ended" #(update-status :ended))
               (events/listen audio "error" #(update-status :error))
-              (events/listen audio "abort" #(update-status :aborted))])
-
-           (go-loop []
-             (match [(<! (:chan @st))]
-                    [:pause]       (do (.pause audio)
-                                       (recur))
-                    [[:play src]]  (do (ensure-src src)
-                                       (when (let [st (:status @st)]
-                                               (or (= st :error)
-                                                   (= st :aborted)))
-                                         (.load audio))
-                                       (.play audio)
-                                       (recur))
-                    [[:preload src]] (do (ensure-src src)
-                                         (set! (.-preload audio) true)
-                                         (recur))
-                    [[:seek time]] (do (set! (.-currentTime audio) time)
-                                       (recur))
-                    [nil]          nil
-                    [bad-command]  (do (prn "audio player: bad command, "
-                                            bad-command)
-                                       (recur))))))
+              (events/listen audio "abort" #(update-status :aborted))])))
 
        :component-will-unmount
        (fn [this]
-         (async/close! (:chan @st))
          (dorun (map events/unlistenByKey @events)))
 
        :reagent-render

           (pos? (:current-time @st)))

     toggle-play
     #(go (>! (:chan @st) (if (is-playing)
                            :pause
                            [:play src])))

     seek-time
     #(go (>! (:chan @st) [:seek @mouse-time]))

     update-mouse-time
     (fn [ev]

         (seek-time)))

     enable-preload
     #((:command @st) [:preload src])]

    (into
      [:div.audio-player (r/merge-props
