diff --git a/release-packaging/ignore/Examples/nb_of_slices.scd b/release-packaging/ignore/Examples/nb_of_slices.scd new file mode 100644 index 0000000..7f6bc5e --- /dev/null +++ b/release-packaging/ignore/Examples/nb_of_slices.scd @@ -0,0 +1,61 @@ +( +b = Buffer.read(s,File.realpath(FluidBufNoveltySlice.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Nicol-LoopE-M.wav"); +c = Buffer.new(s); +) + +( +// with basic params +Routine{ + var startTime, goal, startThresh, prevThresh, curThresh, curVal, prevVal, iters, maxIters, dVal, dThresh; + startTime = Main.elapsedTime; + prevThresh = 0.1; //initial threshold + goal = 10; //number of slices desired + maxIters = 100; //max number of iterations acceptable + + //makes a first iteration + FluidBufNoveltySlice.process(s,b, indices: c, threshold:prevThresh,action:{|x|prevVal = x.numFrames}); + s.sync; + //makes a second iteration + if ( (prevVal < goal), { + curThresh = prevThresh * 0.5; + }, { + curThresh = prevThresh * 2; + }); + FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames}); + s.sync; + + //makes further iterations until the result is achieved, or the maximum of acceptable iterations is reached + iters = 2; + while ( { + (iters < maxIters) && ((curVal - goal) != 0) + }, { + iters = iters + 1; + dVal = curVal - prevVal; + dThresh = curThresh - prevThresh; + + prevThresh = curThresh; + prevVal = curVal; + + if ( (dVal == 0), { + //if we have not change results between the last 2 passes, make the variation of threshold bigger + curThresh = dThresh + curThresh; + },{ + //if we have + curThresh = ((dThresh / dVal) * (goal - curVal)) + curThresh; + }); + FluidBufNoveltySlice.process(s,b, indices: c, threshold:curThresh,action:{|x|curVal = x.numFrames}); + s.sync; + } + ); + //depending on the outcome, gives the right info back + + if ( iters >= maxIters, { + // failed + "Failed to find a suitable threshold in % seconds.\n".postf((Main.elapsedTime - startTime).round(0.01)); + }, { + // succeeded + "Found % as a suitable threshold in % seconds and % iterations.\n".postf(curThresh, (Main.elapsedTime - startTime).round(0.01), iters); + } + ); +}.play +) \ No newline at end of file