#lang scribble/manual
@(require (for-label racket))

@title{(degree-to-key bufnum in octave)}


Convert signal to modal pitch

The input signal value is truncated to an integer value and used as
an index into an octave repeating table of note values. indices
wrap around the table and shift octaves as they do.

bufnum - index of the buffer which contains the steps for each
         scale degree.

in - the input signal.

octave - the number of steps per octave in the scale.


@racketblock[
(let* ((b 0)
       (p (list 0 2 3.2 5 7 9 10))
       (x (mouse-x kr 0 15 0 0.1))
       (k (degree-to-key 0 x 12))
       (c (lambda (n r)
	    (let* ((o (mul (sin-osc ar (midi-cps (add3 r k n)) 0) 0.1))
		   (t (lf-pulse ar (midi-cps (mce2 48 55)) 0.15 0.5))
		   (f (midi-cps (mul-add (sin-osc kr 0.1 0) 10 r)))
		   (d (mul (rlpf t f 0.1) 0.1))
		   (m (add o d)))
	      (add (comb-n m 0.31 0.31 2) m)))))
  (with-sc3
   (lambda (fd)
     (async fd (b-alloc 0 7 1))
     (send fd (b-setn1 0 0 p))
     (let ((n (mul (lf-noise1 kr (mce2 3 3.05)) 0.04)))
       (play fd (out 0 (mul (add (c n 48) (c n 72)) 0.25)))))))
]


