   (if (empty? notes)
     state
     (if (= (type (first notes)) MidiMessage)
-      (merge state {:key (first notes) :notes (rest notes)})
+      (merge state {:key (first notes) :notes (vec-rest notes)})
       (let [note (clojure.string/replace (name (first notes)) #"__[0-9]+__auto__$" "#")]
         ;; note on/off / key pressure by key name
         (if-let [m (re-matches #"(&|-|)([a-gA-G])(#|##|b|bb|n|)(-?[0-9]+|)(-|)" note)]

              state (cond
                      (or (seq? (first notes)) (vector? (first notes)))
                      (merge (compose (first notes) sequencer state)
                             {:notes (rest notes)}
                             (if (vector? notes) {:position position} {}))
                      (map? (first notes))
                      (parse-state notes state)
                      (keyword? (first notes))
                      (parse-state (cons {(first notes) (first (rest notes))} (rest (rest notes))) state)
                      :else
                      (let [notes (:notes state)
                            state (parse-param (:notes state) state)

        (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
