;; Hi ;George,
;;
;; I modified G-pc:relative to do non "12 tone music",
;; though I'm not sure that this explanation is correct or not.
;; But I guess that probably this is one of what you want.
;; You can make your own scale or .....
;;
;; Anyway this G-pc:relative has option variable for degree(??) or pseudo octave(??).
;; It has the same function as the last time without this option variable.
;;
;; Caution : option value should be more than PC
;; but it's ok if you like results which is some funny ....
;;
(define G-pc:relative
(lambda (p n pc . opt)
(let ((wts (if (null? opt) 12 (car opt))))
(set! pc (rotate pc (* -1 n)))
(+ p (car pc) (if (negative? n)
(* (+ 1 (abs (quotient (+ n 1) (length pc)))) (* -1 wts))
(* (quotient n (length pc)) wts))))))
;; some results are ....
;; A.
(let ((p 60) (n1 10) (pc '(0 1 2)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 62 72 73 74 84 85 86 96)
;; (60 61 62 72 73 74 84 85 86 96))
;; B.
(let ((p 60) (n1 10) (pc '(0 1 2)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 3) ans1)) ;<-- option
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 62 63 64 65 66 67 68 69) <-- G:pc:relative
;; (60 61 62 72 73 74 84 85 86 96)) <-- pc:relative
;; C.
(let ((p 60) (n1 10) (pc '(0 1 2)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 5) ans1)) ;<--- option
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 62 65 66 67 70 71 72 75)
;; (60 61 62 72 73 74 84 85 86 96))
;; D.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 61.2 61.5 72 73 73.2 73.5 84 85 85.2 85.5 96 97 97.2)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; E.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 4) ans1)) ;<--- option,
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 61.2 61.5 64 65 65.2 65.5 68 69 69.2 69.5 72 73 73.2)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; F.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 3) ans1)) ;<--- option > PC
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 61.2 61.5 63 64 64.2 64.5 66 67 67.2 67.5 69 70 70.2)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; G.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 2) ans1)) ;<--- option > PC
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 61.2 61.5 62 63 63.2 63.5 64 65 65.2 65.5 66 67 67.2)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; H.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 1.5) ans1)) ;<--- option = PC
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60.0 61.0 61.2 61.5 61.5 62.5 62.7 63.0 63.0 64.0 64.2 64.5 64.5 65.5 65.7)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; I.
(let ((p 60) (n1 15) (pc '(0 1 1.2 1.5)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 1.6) ans1)) ;<--- option > PC
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60.0 61.0 61.2 61.5 61.6 62.6 62.8 63.1 63.2 64.2 64.4 64.7 64.8 65.8 66.0)
;; (60 61 72 73 84 85 96 97 108 109 120 121 132 133 144))
;; J.
(let ((p 60) (n1 15) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 64 67 72 76 79 84 88 91 96 100 103 108 112 115)
;; (60 64 67 72 76 79 84 88 91 96 100 103 108 112 115))
;; K.
(let ((p 60) (n1 15) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc 5) ans1)) ;<--- not good, option 5 < PC 7
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 64 67 65 69 72 70 74 77 75 79 82 80 84 87)
;; (60 64 67 72 76 79 84 88 91 96 100 103 108 112 115))
;; L.
(let ((p 60) (n1 -10) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(let loop ((i 0))
(if (< i n1)
(list (reverse ans1) (reverse ans2))
(loop (- i 1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2))))))
;; ((60 55 52 48 43 40 36 31 28 24 19) <-- G-pc:relative
;; (60 55 52 48 43 40 36 31 28 24 19)) <-- pc:relative
;; M.
(let ((p 60) (n1 -10) (pc '(0 1 2)) (ans1 '()) (ans2 '()))
(let loop ((i 0))
(if (< i n1)
(list (reverse ans1) (reverse ans2))
(loop (- i 1)
(set! ans1 (cons (G-pc:relative p i pc 4) ans1)) ;<- ok, option 4 > PC 2
(set! ans2 (cons (pc:relative p i pc) ans2))))))
;;((60 58 57 56 54 53 52 50 49 48 46)
;; (60 50 49 48 38 37 36 26 25 24 14))
;; N.
(let ((p 60) (n1 -10) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(let loop ((i 0))
(if (< i n1)
(list (reverse ans1) (reverse ans2))
(loop (- i 1)
(set! ans1 (cons (G-pc:relative p i pc 3) ans1)) ; <- not good, option 3 < PC 7
(set! ans2 (cons (pc:relative p i pc) ans2))))))
;;((60 64 61 57 61 58 54 58 55 51 55)
;; (60 55 52 48 43 40 36 31 28 24 19))
;; O.
(let ((p 60) (n1 -10) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(let loop ((i 0))
(if (< i n1)
(list (reverse ans1) (reverse ans2))
(loop (- i 1)
(set! ans1 (cons (G-pc:relative p i pc 4) ans1)) ; <- not good, option 4 < PC 7
(set! ans2 (cons (pc:relative p i pc) ans2))))))
;;((60 63 60 56 59 56 52 55 52 48 51)
;; (60 55 52 48 43 40 36 31 28 24 19))
;; P.
(let ((p 60) (n1 -10) (pc '(0 4 7)) (ans1 '()) (ans2 '()))
(let loop ((i 0))
(if (< i n1)
(list (reverse ans1) (reverse ans2))
(loop (- i 1)
(set! ans1 (cons (G-pc:relative p i pc 8) ans1)) ;<- ok, option 8 > PC 7
(set! ans2 (cons (pc:relative p i pc) ans2))))))
;;((60 59 56 52 51 48 44 43 40 36 35)
;; (60 55 52 48 43 40 36 31 28 24 19))
;; Q.
(let ((p 60) (n1 15) (pc '(0 1 2 3 4 5 6 7 8 9 10 11)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;; ((60 61 62 63 64 65 66 67 68 69 70 71 72 73 74)
;; (60 61 62 63 64 65 66 67 68 69 70 71 72 73 74))
;; R.
(let ((p 60) (n1 30) (pc '(0 1 1.1 2 2.2 3 3.3 4 4.4 5 6 7 8 9 10 11)) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;; ((60 61 61.1 62 62.2 63 63.3 64 64.4 65 66 67 68 69 70 71 72 73 73.1 74 74.2 75 75.3 76 76.4 77 78 79 80 81)
;; (60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89))
;; S.
(let ((p 60) (n1 30) (pc '(0 1 1.1 2 2.2 3 3.3 4 4.4 )) (ans1 '()) (ans2 '()))
(dotimes (i n1)
(set! ans1 (cons (G-pc:relative p i pc) ans1))
(set! ans2 (cons (pc:relative p i pc) ans2)))
(list (reverse ans1) (reverse ans2)))
;;((60 61 61.1 62 62.2 63 63.3 64 64.4 72 73 73.1 74 74.2 75 75.3 76 76.4 84 85 85.1 86 86.2 87 87.3 88 88.4 96 97 97.1)
;; (60 61 62 63 64 72 73 74 75 76 84 85 86 87 88 96 97 98 99 100 108 109 110 111 112 120 121 122 123 124))
Regards
2023年1月25日水曜日 23:12:03 UTC+9 Minoru: