(ns unheard.dsl (:require [missionary.core :as m] [clojure.set :refer [union]])) (comment ;; Parallel groups ;; Notes 1, 2, and 3 simultaneously ;; = should remind you of amb= ;; implicit duration of 1 [= 1 2 3] ;; Compiles to? ;; Same as above, but with duration 3 ([= 1 2 3] 3) ;; Notes 1, 2, and 3 all with different durations [= (1 2) (2 3) (3 4)] ;; Inner values override outer values ;; In this chord, 1 would have a duration of 3 while 2 and 3 would have a duration of 2 ([= (1 3) 2 3] 2) ;; Notes 1, 2, and 3 all with different durations and velocities [= (1 2 100) (2 3 110) (3 4 123)] ;; Sequential groups ;; Note 1, then note 2, then note 3 [1 2 3] ;; Note 1 duration 1, then note 2 duration 2, then note 3 duration 1 [(1 1) (2 2) (3 1)] ;; Three chords played sequentially [[= 1 2 3] [= 1 2 3] [= 1 2 3]] ;; Note 1, followed by a rest, followed by note 3 [1 (r) 3] ;; Unlike notes, rests are at most 2-tuples ;; (Think about it: Rests never have a note value) ;; Assign the note sequence 1 2 3 to the name loop1 ;; The first argument is always the name; the last argument is always either ;; a sequential or parallel group (=loop1 [1 2 3]) ;; Use loop1 [1 (loop1) 2 3] ;; Middle arguments are variable names (=loop2 dur ([1 2 3] dur)))