updated the bufcompose examples

nix
Pierre Alexandre Tremblay 5 years ago
parent 5b030b7a40
commit 3e698538b6

@ -21,6 +21,10 @@ FluidBufCompose.process(s,b, numChans: 1, gain: -3.0.dbamp * -1.0, startChan: 1,
b.play; b.play;
{PlayBuf.ar(1, [c,d])}.play; {PlayBuf.ar(1, [c,d])}.play;
//check nullsum with real-time versions
{PlayBuf.ar(1, c) - PlayBuf.ar(2, b).madd(-3.0.dbamp).sum}.play;
{PlayBuf.ar(1, d) - PlayBuf.ar(2, b).madd(-3.0.dbamp * [1,-1]).sum}.play;
// The geeky bit: copy the side (buffer d) on itself with specific amplitudes and delays, in effect applying a FIR filter through expensive convolution // The geeky bit: copy the side (buffer d) on itself with specific amplitudes and delays, in effect applying a FIR filter through expensive convolution
// Important: do either of the 3 options below // Important: do either of the 3 options below

@ -40,6 +40,6 @@ c.postln
b.play b.play
{PlayBuf.ar(1,b.bufnum,startPos:c[740])}.play {PlayBuf.ar(1,b.bufnum,startPos:c[15])}.play
Buffer.freeAll Buffer.freeAll

@ -37,4 +37,4 @@ b.plot
c.postln c.postln
b.play b.play
{PlayBuf.ar(1,b.bufnum,startPos:c[740])}.play {PlayBuf.ar(1,b.bufnum,startPos:c[15])}.play

@ -7,6 +7,8 @@ c = Buffer.new(s);
// with basic params // with basic params
Routine{ Routine{
var startTime, target, tolerance, startThresh, prevThresh, curThresh, curVal, prevVal, iters, maxIters, dVal, dThresh; var startTime, target, tolerance, startThresh, prevThresh, curThresh, curVal, prevVal, iters, maxIters, dVal, dThresh;
var cond = Condition.new;
startTime = Main.elapsedTime; startTime = Main.elapsedTime;
prevThresh = 0.1; //initial threshold (between 0.00001 and 0.99999 prevThresh = 0.1; //initial threshold (between 0.00001 and 0.99999
target = 10; //number of slices desired target = 10; //number of slices desired
@ -14,14 +16,17 @@ Routine{
maxIters = 100; //max number of iterations acceptable maxIters = 100; //max number of iterations acceptable
//makes a first iteration //makes a first iteration
FluidBufNoveltySlice.process(s,b, indices: c, threshold:prevThresh,action:{|x|prevVal = x.numFrames}); FluidBufNoveltySlice.process(s,b, indices: c, threshold:prevThresh, action:{|x|prevVal = x.numFrames;\there.postln;cond.unhang;});
\here.postln;
cond.hang;
//makes a second iteration //makes a second iteration
if ( (prevVal < target), { if ( (prevVal < target), {
curThresh = (prevThresh * 0.5).max(0.000001); curThresh = (prevThresh * 0.5).max(0.000001);
}, { }, {
curThresh = (prevThresh * 2).min(0.999999); curThresh = (prevThresh * 2).min(0.999999);
}); });
FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames}); FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames;cond.unhang;});
cond.hang;
//makes further iterations until the result is achieved, or the maximum of acceptable iterations is reached //makes further iterations until the result is achieved, or the maximum of acceptable iterations is reached
iters = 2; iters = 2;
@ -42,7 +47,8 @@ Routine{
//if we have //if we have
curThresh = (((dThresh / dVal) * (target - curVal)) + curThresh).min(0.999999).max(0.000001); curThresh = (((dThresh / dVal) * (target - curVal)) + curThresh).min(0.999999).max(0.000001);
}); });
FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames}); FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames;cond.unhang;});
cond.hang;
} }
); );
//depending on the outcome, gives the right info back //depending on the outcome, gives the right info back

Loading…
Cancel
Save