2022-08-24 13:53:18 +00:00
|
|
|
#lang scribble/manual
|
|
|
|
@(require (for-label racket))
|
|
|
|
|
|
|
|
@title{(t-grains numChannels trigger bufnum rate centerPos dur pan amp interp)}
|
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
|
2022-08-24 13:53:18 +00:00
|
|
|
Buffer granulator. triggers generate grains from a buffer. Each
|
|
|
|
grain has a Hanning envelope (sin^2(x) for x from 0 to pi) and is
|
|
|
|
panned between two channels of multiple outputs.
|
|
|
|
|
|
|
|
numChannels - number of output channels.
|
|
|
|
|
|
|
|
trigger - at each trigger, the following arguments are sampled and
|
|
|
|
used as the arguments of a new grain. A trigger occurs
|
|
|
|
when a signal changes from <= 0 to > 0. If the trigger
|
|
|
|
is audio rate then the grains will start with sample
|
|
|
|
accuracy.
|
|
|
|
|
|
|
|
bufnum - the index of the buffer to use. It must be a one channel
|
|
|
|
(mono) buffer.
|
|
|
|
|
|
|
|
rate - 1.0 is normal, 2.0 is one octave up, 0.5 is one octave down
|
|
|
|
and -1.0 is backwards normal rate ... etc. Unlike play-buf,
|
|
|
|
the rate is multiplied by BufRate, so you needn't do that
|
|
|
|
yourself.
|
|
|
|
|
|
|
|
centerPos - the position in the buffer in seconds at which the
|
|
|
|
grain envelope will reach maximum amplitude.
|
|
|
|
|
|
|
|
dur - duration of the grain in seconds.
|
|
|
|
|
|
|
|
pan - a value from -1 to 1. Determines where to pan the output in
|
|
|
|
the same manner as pan-az.
|
|
|
|
|
|
|
|
amp - amplitude of the grain.
|
|
|
|
|
|
|
|
interp - 1, 2, or 4. Determines whether the grain uses (1) no
|
|
|
|
interpolation, (2) linear interpolation, or (4) cubic
|
|
|
|
interpolation.
|
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
|
|
|
|
@racketblock[
|
2022-08-24 13:53:18 +00:00
|
|
|
(with-sc3
|
|
|
|
(lambda (fd)
|
|
|
|
(async fd (b-alloc-read 10 "/home/rohan/audio/metal.wav" 0 0))))
|
2022-08-28 10:27:01 +00:00
|
|
|
]
|
2022-08-24 13:53:18 +00:00
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
|
|
|
|
@racketblock[
|
2022-08-24 13:53:18 +00:00
|
|
|
(audition
|
|
|
|
(let* ((b 10)
|
|
|
|
(trate (mouse-y kr 2 200 1 0.1))
|
|
|
|
(dur (fdiv 4 trate))
|
|
|
|
(t (impulse ar trate 0))
|
|
|
|
(i (mouse-x kr 0 (buf-dur kr b) 0 0.1)))
|
|
|
|
(out 0 (t-grains 2 t b 1 i dur 0 0.1 2))))
|
2022-08-28 10:27:01 +00:00
|
|
|
]
|
|
|
|
|
2022-08-24 13:53:18 +00:00
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
@racketblock[
|
2022-08-24 13:53:18 +00:00
|
|
|
(audition
|
|
|
|
(let* ((b 10)
|
|
|
|
(trate (mouse-y kr 8 120 1 0.1))
|
|
|
|
(dur (fdiv 12 trate))
|
|
|
|
(clk (impulse ar trate 0))
|
|
|
|
(x (mouse-x kr 0 (buf-dur kr b) 0 0.1))
|
|
|
|
(pos (add x (t-rand 0 0.01 clk)))
|
|
|
|
(pan (mul (white-noise kr) 0.6)))
|
|
|
|
(out 0 (t-grains 2 clk b 1 pos dur pan 0.1 2))))
|
2022-08-28 10:27:01 +00:00
|
|
|
]
|
2022-08-24 13:53:18 +00:00
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
|
|
|
|
@racketblock[
|
2022-08-24 13:53:18 +00:00
|
|
|
(audition
|
|
|
|
(let* ((b 10)
|
|
|
|
(trate (mouse-y kr 8 120 1 0.1))
|
|
|
|
(dur (fdiv 4 trate))
|
|
|
|
(clk (dust ar trate))
|
|
|
|
(x (mouse-x kr 0 (buf-dur kr b) 0 0.1))
|
|
|
|
(pos (add x (t-rand 0 0.01 clk)))
|
|
|
|
(pan (mul (white-noise kr) 0.6)))
|
|
|
|
(out 0 (t-grains 2 clk b 1 pos dur pan 0.1 2))))
|
2022-08-28 10:27:01 +00:00
|
|
|
]
|
2022-08-24 13:53:18 +00:00
|
|
|
|
|
|
|
The SC3 ** operator is the ShiftLeft binary UGen.
|
|
|
|
|
2022-08-28 10:27:01 +00:00
|
|
|
|
|
|
|
@racketblock[
|
2022-08-24 13:53:18 +00:00
|
|
|
(audition
|
|
|
|
(let* ((b 10)
|
|
|
|
(trate (mouse-y kr 2 120 1 0.1))
|
|
|
|
(dur (fdiv 1.2 trate))
|
|
|
|
(clk (impulse ar trate 0))
|
|
|
|
(pos (mouse-x kr 0 (buf-dur kr b) 0 0.1))
|
|
|
|
(pan (mul (white-noise kr) 0.6))
|
|
|
|
(rate (shift-left 1.2 (u:round (mul (white-noise kr) 3) 1))))
|
|
|
|
(out 0 (t-grains 2 clk b rate pos dur pan 0.1 2))))
|
2022-08-28 10:27:01 +00:00
|
|
|
]
|
|
|
|
|
2022-08-24 13:53:18 +00:00
|
|
|
|