matrix.scm 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. (def. (pitch-integer.pitchclass-integer [pitch-integer? i])
  2. (modulo i 12))
  3. '(TEST
  4. > (X 1 9)
  5. ;; not 8
  6. )
  7. (def r0 (.map '(3 1 9 5 4 6 8 7 12 10 11 2) dec-function))
  8. (def ri0 (.map '(3 5 9 1 2 12 10 11 6 8 7 4) dec-function))
  9. (def (r0->ri [twelve-tone-row? r])
  10. ;;;XX
  11. ri0)
  12. (TEST
  13. > (equal? (r0->ri r0) ri0)
  14. #t)
  15. (def (random-twelve-tone-row) -> twelve-tone-row?
  16. (=> (iota 12 2)
  17. (.map (lambda (v) (cons (random-float) v)))
  18. (sort (on car <))
  19. (.map cdr)))
  20. (def (twelve-tone-row->intervals [twelve-tone-row? v])
  21. (chord->intervals v))
  22. (def (chord.+pitchclass c i)
  23. (.map c (lambda (v) (pitch-integer.pitchclass-integer (+ v i)))))
  24. (def (generate-matrix.1 [twelve-tone-row? r0])
  25. (let (ri (r0->ri r0))
  26. ;; ri = pitches
  27. (.map r0
  28. (lambda (v)
  29. (chord.+pitchclass ri (- v (first r0)))))))
  30. (def (generate-matrix [twelve-tone-row? r0])
  31. (let (ri (r0->ri r0))
  32. ;; ri = pitches
  33. (.map ri
  34. (lambda (v)
  35. (chord.+pitchclass r0 (- v (first ri)))))))
  36. (def. (list.inc v) (.map v inc-function))
  37. (TEST
  38. > (equal? ((flip cons) 'a '())
  39. (cons '() 'a))
  40. #t)
  41. (def. (lists.inc v) (.map v .inc))
  42. (TEST
  43. > (=> (generate-matrix r0)
  44. .inc)
  45. ((3 1 9 5 4 6 8 7 12 10 11 2)
  46. (5 3 11 7 6 8 10 9 2 12 1 4)
  47. (9 7 3 11 10 12 2 1 6 4 5 8)
  48. (1 11 7 3 2 4 6 5 10 8 9 12)
  49. (2 12 8 4 3 5 7 6 11 9 10 1)
  50. (12 10 6 2 1 3 5 4 9 7 8 11)
  51. (10 8 4 12 11 1 3 2 7 5 6 9)
  52. (11 9 5 1 12 2 4 3 8 6 7 10)
  53. (6 4 12 8 7 9 11 10 3 1 2 5)
  54. (8 6 2 10 9 11 1 12 5 3 4 7)
  55. (7 5 1 9 8 10 12 11 4 2 3 6)
  56. (4 2 10 6 5 7 9 8 1 11 12 3)))
  57. '(def (transpose ))