           :let [st (+ base (MAJOR-STEPS p))]]
       (chord st (MAJOR-ARRANGEMENTS p)))))
 
-(s/def ::scale-position #{0 1 2 3 4 5 6})
+(s/def ::scale-position (s/int-in 0 7))
 
 (s/fdef major-chord-progression
-  :args (s/cat :base ::sound :progression ()))
+  :args (s/cat :base ::sound :progression (s/coll-of ::scale-position [])))

                #(s/gen ALL-NOTES)))
(s/def ::semitone (s/and integer? #(<= 0 % 87)))

(s/def ::sound (s/or ::note ::semitone))

(declare semitone->note)


(s/fdef play
  :args (s/cat :sound ::sound-point
               :tracker (s/? #(instance? Atom %))))

(defn loop-chan [items start chan]
  {:pre [(s/valid? ::items-list items)
