completer.scm 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. (define-module (gac sg1)
  2. #:use-module (srfi srfi-1)
  3. #:export (%dyads
  4. %decachords
  5. %trichords
  6. transpose-all))
  7. (define %dyads '((0 1) (0 2) (0 3) (0 4) (0 5) (0 6)))
  8. (define %decachords '((0 1 2 3 4 5 6 7 8 9)
  9. (0 1 2 3 4 5 6 7 8 10)
  10. (0 1 2 3 4 5 6 7 9 10)
  11. (0 1 2 3 4 5 6 8 9 10)
  12. (0 1 2 3 4 5 7 8 9 10)
  13. (0 1 2 3 4 6 7 8 9 10)))
  14. (define %trichords '((0 1 2) (0 1 3) (0 2 3) (0 1 4)
  15. (0 3 4) (0 1 5) (0 4 5) (0 1 6)
  16. (0 5 6) (0 2 4) (0 2 5) (0 3 5)
  17. (0 2 6) (0 4 6) (0 2 7) (0 3 6)
  18. (0 3 7) (0 4 7) (0 4 8)))
  19. (define
  20. (transpositions l)
  21. (define
  22. (rot o)
  23. (map
  24. (lambda (e)
  25. (remainder (+ o e) 12)) l))
  26. (map rot (iota 12)))
  27. (define (transpose-all chords)
  28. (map transpositions chords))
  29. (transpose-all %dyads)
  30. (transpose-all %trichords)
  31. (transpose-all %decachords)
  32. ;; (define
  33. ;; (transpositions l)
  34. ;; (letrec
  35. ;; ((rot
  36. ;; (lambda (o)
  37. ;; (map
  38. ;; (lambda (e)
  39. ;; (remainder (+ o e) 12))
  40. ;; l))))
  41. ;; (map rot (iota 12))))
  42. (unfold
  43. (lambda (xs)
  44. (= (car xs) 12))
  45. values
  46. (lambda (xs) (map 1+ xs))
  47. '(0 1 2))
  48. (map (lambda (i) (list i (remainder (+ 1 i) 12) (remainder (+ 2 i) 12))) (iota 12))
  49. (let
  50. loop
  51. ((res '())
  52. (i1 0)
  53. (i2 1)
  54. (i3 3)
  55. (cnt 12))
  56. (if (zero? cnt)
  57. res
  58. (loop
  59. (cons (list i1 i2 i3) res)
  60. (1+ i1)
  61. (1+ i2)
  62. (1+ i3)
  63. (1- cnt))))
  64. (if (zero? cnt) res" => (if (zero? cnt) (reverse res)
  65. (define (transpositions l) (letrec ((rot (lambda (o) (map (lambda (e) (remainder (+ o e) 12)) l)))) (map rot (iota 12))))
  66. (modulo 13 12)
  67. (unfold (lambda (x) (> x 10))
  68. (lambda (x) (* x x))
  69. (lambda (x) (+ x 1))
  70. 1)
  71. (define s0 (list-ref 3-1 0))
  72. (define s1 (list-ref 3-1 1))
  73. (define s2 (list-ref 3-1 2))
  74. (define s3 (list-ref 3-1 3))
  75. (define s4 (list-ref 3-1 4))
  76. (define s5 (list-ref 3-1 5))
  77. (define s6 (list-ref 3-1 6))
  78. (define s7 (list-ref 3-1 7))
  79. (define s8 (list-ref 3-1 8))
  80. (define s9 (list-ref 3-1 9))
  81. (define s10 (list-ref 3-1 10))
  82. (define s11 (list-ref 3-1 11))
  83. (define c0 (list-ref 9-1 0))
  84. (define c1 (list-ref 9-1 1))
  85. (define c2 (list-ref 9-1 2))
  86. (define c3 (list-ref 9-1 3))
  87. (define c4 (list-ref 9-1 4))
  88. (define c5 (list-ref 9-1 5))
  89. (define c6 (list-ref 9-1 6))
  90. (define c7 (list-ref 9-1 7))
  91. (define c8 (list-ref 9-1 8))
  92. (define c9 (list-ref 9-1 9))
  93. (define c10 (list-ref 9-1 10))
  94. (define c11 (list-ref 9-1 11))
  95. (define a0 (append s0 c0))
  96. (define a1 (append s1 c1))
  97. (define a2 (append s2 c2))
  98. (define a3 (append s3 c3))
  99. (define a4 (append s4 c4))
  100. (define a5 (append s5 c5))
  101. (define a6 (append s6 c6))
  102. (define a7 (append s7 c7))
  103. (define a8 (append s8 c8))
  104. (define a9 (append s9 c9))
  105. (define a10 (append s10 c10))
  106. (define a11 (append s11 c11))
  107. (define b0 (cons s0 c0))
  108. (define b1 (cons s1 c1))
  109. (define b2 (cons s2 c2))
  110. (define b3 (cons s3 c3))
  111. (define b4 (cons s4 c4))
  112. (define b5 (cons s5 c5))
  113. (define b6 (cons s6 c6))
  114. (define b7 (cons s7 c7))
  115. (define b8 (cons s8 c8))
  116. (define b9 (cons s9 c9))
  117. (define b10 (cons s10 c10))
  118. (define b11 (cons s11 c11))
  119. (reverse b0)
  120. (identity b0)
  121. (define (choose-three)
  122. (list-ref 3-1 (random 12)))
  123. (define (choose-nine)
  124. (list-ref 9-1 (random 12)))
  125. (define (choose-three-nine)
  126. (cons (choose-three) (choose-nine)))
  127. (choose-three-nine)
  128. (reverse (append b0 b1))
  129. (display b0)
  130. (display b1)
  131. ;; add hash map for converting to lilypond tokens
  132. ;; add keyword argument for choosing between cons and append
  133. (identity a0)
  134. (identity 3-1)
  135. (define
  136. (reverse-all lst)
  137. (map
  138. (lambda (x) (reverse x))
  139. lst))
  140. (define
  141. (transpose lst)
  142. (map
  143. (lambda (x) (reverse x))
  144. lst))
  145. (reverse-all 3-1)
  146. (define
  147. (transpose lst)
  148. (map
  149. (lambda (x) (1+ (identity x)))
  150. lst))
  151. (define s0 (list-ref 3-1 0))
  152. (list-ref 3-1 15)
  153. (car 3-1)
  154. (length 3-1)
  155. (if (= (random 2) 0)
  156. (if (= (random 12) 6)
  157. "play a soft note"
  158. "play a loud note")
  159. "play a high note")
  160. (transpose 3-1)
  161. (reverse 3-1)
  162. (reverse-all 3-1)
  163. (map 1+ '(1 2 3))
  164. (cons s0 s1)
  165. (append s0 s1)