A library for generating microtonal scales inspired by work and theories of Erv Wilson.
This library has several different namespaces each corresponding to a different type of scale.
For an introduction to CPS scales:
(require '[erv.cps.core :as cps])
(def my-hexany (cps/make 2 [1 3 5 7]))
(-> my-hexany
;; add all subsets under the `:subcps` key
cps/+all-subcps)S: readme-cps :results none
{:meta {:scale :cps, :period 2, :size 6, :cps/size 2, :cps/factors (1 3 5 7), :cps/normalized-by 1, :cps/type "2)4"}, :scale ({:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2, :degree 0} {:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2, :degree 1} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2, :degree 2} {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2, :degree 3} {:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2, :degree 4} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2, :degree 5}), :nodes ({:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}, {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 1}, :archi-set #{:d :a}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}, {:set #{3 5}, :archi-set #{:c :b}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{1 5}, :archi-set #{:c :a}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 3}, :archi-set #{:b :d}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{:c :d}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 3}, :archi-set #{:b :a}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}}, :simple {#{7 1} #{#{7 5} #{7 3} #{1 5} #{1 3}}, #{7 5} #{#{7 1} #{3 5} #{7 3} #{1 5}}, #{7 3} #{#{7 1} #{7 5} #{3 5} #{1 3}}, #{1 5} #{#{7 1} #{7 5} #{3 5} #{1 3}}, #{1 3} #{#{7 1} #{3 5} #{7 3} #{1 5}}, #{3 5} #{#{7 5} #{7 3} #{1 5} #{1 3}}}}, :subcps {"1)2 of 2)4 7-1.5" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}, {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}}, :simple {#{7 1} #{#{7 5}}, #{7 5} #{#{7 1}}}}}, "1)3 of 2)4 1-3.5.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 5 7), :cps/normalized-by 1, :cps/type "1)3 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}}, :simple {#{7 1} #{#{1 5} #{1 3}}, #{1 5} #{#{7 1} #{1 3}}, #{1 3} #{#{7 1} #{1 5}}}}}, "2)3 of 2)4 1.3.5" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 5), :cps/normalized-by 1, :cps/type "2)3 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :graphs {:full {{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}}, :simple {#{3 5} #{#{1 5} #{1 3}}, #{1 5} #{#{3 5} #{1 3}}, #{1 3} #{#{3 5} #{1 5}}}}}, "2)2 of 2)4 3.5" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (3 5), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 5-1.3" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 5), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :graphs {:full {{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}}, :simple {#{3 5} #{#{1 5}}, #{1 5} #{#{3 5}}}}}, "2)2 of 2)4 1.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 7), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 7-1.3" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}}, :simple {#{7 1} #{#{7 3}}, #{7 3} #{#{7 1}}}}}, "1)1 of 2)4 1.5" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 5), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "2)3 of 2)4 1.5.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 5 7), :cps/normalized-by 1, :cps/type "2)3 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 1} #{#{7 5} #{1 5}}, #{7 5} #{#{7 1} #{1 5}}, #{1 5} #{#{7 1} #{7 5}}}}}, "2)2 of 2)4 1.3" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 3), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 5-1.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 5} #{#{1 5}}, #{1 5} #{#{7 5}}}}}, "1)2 of 2)4 3-1.5" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 5), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :graphs {:full {{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}}, :simple {#{3 5} #{#{1 3}}, #{1 3} #{#{3 5}}}}}, "1)3 of 2)4 3-1.5.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 5 7), :cps/normalized-by 1, :cps/type "1)3 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}}, :simple {#{3 5} #{#{7 3} #{1 3}}, #{7 3} #{#{3 5} #{1 3}}, #{1 3} #{#{3 5} #{7 3}}}}}, "1)3 of 2)4 7-1.3.5" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 5 7), :cps/normalized-by 1, :cps/type "1)3 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 1} #{#{7 5} #{7 3}}, #{7 5} #{#{7 1} #{7 3}}, #{7 3} #{#{7 1} #{7 5}}}}}, "1)2 of 2)4 1-3.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}}, :simple {#{7 1} #{#{1 3}}, #{1 3} #{#{7 1}}}}}, "2)2 of 2)4 5.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (5 7), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :nodes ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 5-3.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (3 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}, {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 5} #{#{3 5}}, #{3 5} #{#{7 5}}}}}, "1)2 of 2)4 3-5.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (3 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}}}, :simple {#{3 5} #{#{7 3}}, #{7 3} #{#{3 5}}}}}, "1)2 of 2)4 1-5.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}}, :simple {#{7 1} #{#{1 5}}, #{1 5} #{#{7 1}}}}}, "1)1 of 2)4 3.5" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (3 5), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)3 of 2)4 5-1.3.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 5 7), :cps/normalized-by 1, :cps/type "1)3 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}, {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 5} #{#{3 5} #{1 5}}, #{3 5} #{#{7 5} #{1 5}}, #{1 5} #{#{7 5} #{3 5}}}}}, "2)3 of 2)4 1.3.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (1 3 7), :cps/normalized-by 1, :cps/type "2)3 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}}, :simple {#{7 1} #{#{7 3} #{1 3}}, #{7 3} #{#{7 1} #{1 3}}, #{1 3} #{#{7 1} #{7 3}}}}}, "1)2 of 2)4 7-3.5" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (3 5 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :nodes ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 5} #{#{7 3}}, #{7 3} #{#{7 5}}}}}, "1)1 of 2)4 3.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (3 7), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :nodes ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 3-1.7" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 7), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {{:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}}, :simple {#{7 3} #{#{1 3}}, #{1 3} #{#{7 3}}}}}, "1)1 of 2)4 1.3" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 3), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "2)3 of 2)4 3.5.7" {:meta {:scale :cps, :period 2, :size 3, :cps/size 2, :cps/factors (3 5 7), :cps/normalized-by 1, :cps/type "2)3 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2}), :nodes ({:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} #{{:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2} {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}}, {:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2} #{{:set #{3 5}, :archi-set #{nil}, :ratio 15, :bounded-ratio 15/8, :bounding-period 2} {:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}}}, :simple {#{7 5} #{#{3 5} #{7 3}}, #{3 5} #{#{7 5} #{7 3}}, #{7 3} #{#{7 5} #{3 5}}}}}, "2)2 of 2)4 3.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (3 7), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :nodes ({:set #{7 3}, :archi-set #{nil}, :ratio 21, :bounded-ratio 21/16, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)1 of 2)4 5.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (5 7), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :nodes ({:set #{7 5}, :archi-set #{nil}, :ratio 35, :bounded-ratio 35/32, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)1 of 2)4 1.7" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 7), :cps/normalized-by 1, :cps/type "1)1 of 2)4"}, :scale ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :nodes ({:set #{7 1}, :archi-set #{nil}, :ratio 7, :bounded-ratio 7/4, :bounding-period 2}), :graphs {:full {}, :simple {}}}, "1)2 of 2)4 1-3.5" {:meta {:scale :cps, :period 2, :size 2, :cps/size 2, :cps/factors (1 3 5), :cps/normalized-by 1, :cps/type "1)2 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}), :nodes ({:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} {:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :graphs {:full {{:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2} #{{:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2}}, {:set #{1 3}, :archi-set #{nil}, :ratio 3, :bounded-ratio 3/2, :bounding-period 2} #{{:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}}}, :simple {#{1 5} #{#{1 3}}, #{1 3} #{#{1 5}}}}}, "2)2 of 2)4 1.5" {:meta {:scale :cps, :period 2, :size 1, :cps/size 2, :cps/factors (1 5), :cps/normalized-by 1, :cps/type "2)2 of 2)4"}, :scale ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :nodes ({:set #{1 5}, :archi-set #{nil}, :ratio 5, :bounded-ratio 5/4, :bounding-period 2}), :graphs {:full {}, :simple {}}}}}
For an introduction to MOS scales:
- https://www.anaphoria.com/mos.pdf
- https://anaphoria.com/wilsonintroMOS.html
- https://en.xen.wiki/w/MOS_scale
(require '[erv.mos.mos :as mos]
'[erv.mos.submos :as submos])
(def period 31)
(def generator 13)
(def my-mos (mos/make period generator))
;; this will generate all secondary MOS and all possible traverse MOS
(submos/make-all-submos (nth my-mos 3) generator) ;; NOTE: arity should change in the near future to take generator first
(submos/print-submos-list generator (nth my-mos 3))This library is a work in progress and mostly a workshop for myself, so the code is not polished as it should. If you are using this library, feel free to let make me aware of it so that I can take more care of the code and the documentation.
- [x] In JS, by using exact, operations involving floating point or double instances may be broken as they expect the source to be strings containing parseable integers or rationals. Floating point support needs to be tested and supported.
On emacs one can run cider-jackin-clj&cljs then select the shadow-cljs server and the :browser-test.
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.