Warp0 Warp a buffer with a warp factor
Inspired by Chad Kirby's SuperCollider2 Warp1 class, which was inspired by Richard Karpen's sndwarp for CSound. A granular time strecher and pitchshifter.
Warp0.ar(numChannels, buffer, warpFactor, freqScale, windowSize, envbufnum,
overlaps, windowRandRatio, interp, mul, add)
numChannels - the number of channels in the buffer.
buffer - the buffer number of a mono soundfile.
warpFactor - amount to stretch or compress the buffer. 0.5 is half speed, 2 is twice the speed.
freqScale- the amount of frequency shift. 1.0 is normal, 0.5 is one octave down, 2.0 is one octave up.
Negative values play the soundfile backwards.
windowSIze - the size of each grain window.
envbufnum - the buffer number containing a singal to use for the grain envelope. -1 uses a built-in
Hanning envelope.
overlaps - the number of overlaping windows.
windowRandRatio - the amount of randomness to the windowing function. Must be between 0 (no
randomness) to 1.0 (probably to random actually)
interp - the interpolation method used for pitchshifting grains. 1 = no interpolation. 2 = linear.
4 = cubic interpolation (more computationally intensive).
Examples:
s.boot;
(
SynthDef(\warp, {arg buffer = 0;
var out, filelength, env;
env = EnvGen.kr(Env([0.01, 1, 1, 0.01], [0.1, 14, 0.9], 'exp'), doneAction: 2);
//warp factor of 0.25- stretch sound by 4 times
out = Warp0.ar(1, buffer, 0.25, MouseX.kr(0.25, 4), 0.1, -1, 8, 0.05, 1);
Out.ar(0, out * env);
}).send(s);
)
b = Buffer.read(s, "sounds/a11wlk01.wav");
a = Synth(\warp, [\buffer, b]);
a.free;
(
SynthDef(\warp, {arg buffer = 0;
var out, warp, filelength, env, freq;
warp = MouseX.kr(0, 1);
freq = MouseY.kr(0.5, 4);
env = EnvGen.kr(Env([0.01, 1, 1, 0.01], [0.1, 14, 0.9], 'exp'), doneAction: 2);
out = Warp0.ar(1, buffer, warp, freq, 0.1, -1, 8, 0.05, 1);
Out.ar(0, out * env);
}).send(s);
)
a = Synth(\warp, [\buffer, b]);
a.free;
b.free;