 (defn create-midi-port-filter
   "Return a filter which selects midi inputs and outputs we actually
   want to use. If this is a Mac, and the Humatic MIDI extension has
-  been installed, create a filter which will accept only its ports.
-  Otherwise, return a filter which accepts all ports."
+  been installed, create a filter which will accept only its versions
+  of ports which it offers in parallel with the standard
+  implementation. Otherwise, return a filter which accepts all ports."
   []
   (if (and (mac?) (mmj-installed?))
-    mmj-device?
+    (fn [device]
+      (let [mmj-descriptions (set (map :description (filter #(mmj-device? %)
+                                                            (overtone.midi/midi-sources))))]
+        (or (mmj-device? device)
+            ;; MMJ returns devices whose descriptions match the names of the
+            ;; broken devices returned by the broken Java MIDI implementation.
+            (not (mmj-descriptions (:name device))))))
     identity))
 
 ;; TODO: This and open-outputs will have to change once hot-plugging works.

      (filter #(or (re-find pattern (:name %1))
                   (re-find pattern (:description %1)))
              devices))))

(defn sync-to-midi-clock
  "Returns a sync function that will cause the beats-per-minute

        {:type :midi,
         :status (cond
                   (empty? @buffer)           "Inactive, no clock pulses have been received."
                   (< n  max-clock-intervals) (str "Stalled? Clock pulse buffer has " n " of "
                                                   max-clock-intervals " pulses in it.")
                   :else                      "Running, clock pulse buffer is full.")})))

(defn- describe-name-filter
