    before a gate -> 1 transition activates it.  Testing
    showed it needed > 25 ms between these transitions to be effective."
   [name num-strings]
-  (let [note-ins (apply vector
-                        (map #(symbol (format "note-%d" %)) (range num-strings)))
+  (let [note-ins (if (= num-strings 1)
+                   [(symbol "note")]
+                   (apply vector
+                          (map #(symbol (format "note-%d" %)) (range num-strings))))
         note-default-ins (apply vector
                                 (flatten (map vector
                                               note-ins
                                               (repeat num-strings {:default 60 :min 0 :max 127}))))
-        gate-ins (apply vector
-                        (map #(symbol (format "gate-%d" %)) (range num-strings)))
+        gate-ins (if (= num-strings 1)
+                   [(symbol "gate")]
+                   (apply vector
+                          (map #(symbol (format "gate-%d" %)) (range num-strings))))
         gate-default-ins (apply vector (flatten (map vector
                                                      gate-ins
                                                      (repeat num-strings {:default 0}))))

        note-gate-pairs (apply vector (map vector note-ins gate-ins))
        ]
    `(defsynth ~name
       [~@both-default-ins
        ~'dur       {:default 10.0  :min 1.0 :max 100.0}
        ~'decay     {:default 30    :min 1   :max 100} ;; pluck decay

  [s i]
  (keyword (format "%s-%d" s i)))

(defn- now+
  "add an epsilon of time to (now) to avoid lots of 'late' error messages"
  []
  (+ (now) 21)) ;; 21ms seems to get rid of most for me.

;; ======================================================================
;; Main helper functions used to play the instrument: pick or strum
(defn pick-string
