Skip to content
TatriX edited this page Aug 13, 2021 · 1 revision

Welcome to the cl-collider wiki!

Musical Scale Quantization

See video by Eli for explanation.

(in-package :sc-user)
(ql:quickload :arrows)
(use-package :arrows)

;; If you have `cl-patterns' you can also use something like this to
;; generate scale midinotes:
;; (cl-patterns:scale-midinotes (cl-patterns:scale :minor) :octave 3)
(defparameter *scale* (let* ((scale (list (36 38 39 41 43 44 46)))
                             (buf (buffer-alloc (length scale))))
                        (buffer-setn buf scale)))

;; Optionally record to a file
;; (defparameter *recorder* (buffer-alloc (* 48000 11) :chanls 2))

(proxy :musical-quantization
       (let* ((index (-> (lfd-noise3.kr (dup 3 4))
                       (range 0 5)
                       (* (buf-frames.kr (kr :buf *scale*)))))
              (note (degree-to-key.kr (kr :buf) index))
              (detune (lf-noise1.kr (dup 1 4) 0.12))
              (sig (-> (var-saw.ar (midicps (lag.kr (+ note detune) 0.02)))
                     (splay.ar 0.75 0.1)
                     (* (env-gen.kr (env (list 0 1 0 0)
                                         (list 0.05 4 7)
                                         (list 0 -2 0)
                                         1)
                                    :act :free)))))
         (setf sig (x-fade2.ar sig (comb-n.ar sig 0.25 0.25 2) 0.5))
         (setf sig (x-fade2.ar sig (-> sig
                                     (+)
                                     (g-verb.ar 200 3)
                                     (lpf.ar 1000))
                               0.4))
         ;; (record-buf.ar sig *recorder*)
         sig))

(release :musical-quantization)

;; (buffer-write *recorder* "/tmp/mquant.wav")
Clone this wiki locally