                                  :else nil)
                           :key (mod (+ (* (+ 1 octave) 12) key accidental) 128)
                           :param (if key-pressure :key-pressure :octave)
-                          :notes (rest notes)}))
+                          :notes (vec-rest notes)}))
           ;; cc
           (if-let [m (re-matches #"cc([0-9]+)" note)]
             (merge state {:key-type ShortMessage/CONTROL_CHANGE
                           :key (mod (Integer. (get m 1)) 128)
                           :param :cc-value
-                          :notes (rest notes)})
+                          :notes (vec-rest notes)})
             ;; program change
             (if-let [m (re-matches #"prog([0-9]+)" note)]
               (merge state {:key-type ShortMessage/PROGRAM_CHANGE
                             :key (mod (Integer. (get m 1)) 128)
                             :param nil
-                            :notes (rest notes)})
+                            :notes (vec-rest notes)})
               ;; channel pressure, pitch bend, note on/off / key pressure by key number
               (if-let [m (re-matches #"(&&|\^|&k|k|-k)(>+|<+|)(-?(?:[0-9]+|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)(?:[eE]-?[0-9]+)?|)(-|)" note)]
                 (let [max-value (if (= "^" (get m 1)) 16384 128)

                                           :else value)]
                               [{param value}]))
                     (re-seq #"\G(!|\?|&|@|)(>+|<+|)(-?(?:[0-9]+|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)(?:[eE]-?[0-9]+)?|)" token)))
         {:notes (rest notes)})
        state))))

(defn make-sequencer [& [sequence]]

        (merge state {:key (if (< length 0) nil (:key state))
                      :length (Math/abs (* 4.0 length ppq))
                      :repeat-length nil
                      :notes (vec-rest notes)})
        (symbol? length)
        (if-let [m (re-matches #"(-|)((?:[xwhqistjlmno]\.*)+)" (name length))]
          (let [length-map {"x" 2 "w" 1 "h" 1/2 "q" 1/4 "i" 1/8 "s" 1/16 "t" 1/32
