summaryrefslogtreecommitdiff
path: root/src/unheard/dsl.clj
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-11-05 16:45:22 -0500
committerJake Zerrer <him@jakezerrer.com>2025-11-06 11:08:24 -0500
commit2d956a3a779672ab3acfc1bc542ebba855522d06 (patch)
tree37c5f1eb7e549e2662bfb6abbe932136aa53cdf0 /src/unheard/dsl.clj
parentbee77914483da25831093e0475e4a71f1383253b (diff)
Organize namespaces
Diffstat (limited to 'src/unheard/dsl.clj')
-rw-r--r--src/unheard/dsl.clj61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/unheard/dsl.clj b/src/unheard/dsl.clj
new file mode 100644
index 0000000..e111725
--- /dev/null
+++ b/src/unheard/dsl.clj
@@ -0,0 +1,61 @@
+(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)))