   [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

   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)))
        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-default-ins (apply vector (flatten (map vector
                                                     gate-ins
                                                     (repeat num-strings {:default 0}))))

                        (+ t (* fret-delta dt)))))))
  ([chord-fret-map the-strings the-inst the-chord direction strum-time]
     (strum-strings chord-fret-map the-strings the-inst the-chord
                    direction strum-time (now+)))
  ([chord-fret-map the-strings the-inst the-chord direction]
     (strum-strings chord-fret-map the-strings the-inst the-chord
                    direction 0.05 (now+)))
  ([chord-fret-map the-strings the-inst the-chord]
     (strum-strings chord-fret-map the-strings the-inst the-chord
                    :down 0.05 (now+))))

;; ======================================================================
;; The Guitar Instrument Code
