diff --git a/release-packaging/ignore/Examples/nmf/JiT-NMF-classifier.scd b/release-packaging/ignore/Examples/nmf/JiT-NMF-classifier.scd index e1c00c0..b76c08d 100644 --- a/release-packaging/ignore/Examples/nmf/JiT-NMF-classifier.scd +++ b/release-packaging/ignore/Examples/nmf/JiT-NMF-classifier.scd @@ -52,7 +52,7 @@ Routine { audioin = In.ar(input,1); BufWr.ar(audioin,bufnum,head,0); BufWr.ar(audioin,bufnum,head+duration,0); - trig = FluidAmpSlice.ar(audioin,2205,2205,-47,-47,4410,4410,relRampUp: 10, relRampDown:1666, relThreshOn:12, relThreshOff: 9, highPassFreq: 85); + trig = FluidAmpSlice.ar(audioin, 10, 1666, 2205, 2205, 12, 9, -47,4410, 85); // cue the calculations via the language SendReply.ar(trig, '/attack',head); @@ -148,9 +148,9 @@ Routine { if (activation_vals[1] >= thresholds[1], {Synth(\fluidsn,[\out,1])}); if (activation_vals[2] >= thresholds[2], {Synth(\fluidhh,[\out,1])}); defer{ - activations_disps[0].string_("A: " ++ activation_vals[0].round(0.001)); - activations_disps[1].string_("B: " ++ activation_vals[1].round(0.001)); - activations_disps[2].string_("C: " ++ activation_vals[2].round(0.001)); + activations_disps[0].string_("A:" ++ activation_vals[0].round(0.01)); + activations_disps[1].string_("B:" ++ activation_vals[1].round(0.01)); + activations_disps[2].string_("C:" ++ activation_vals[2].round(0.01)); }; }); }; @@ -163,35 +163,35 @@ Routine { // GUI for control { - var win = Window("Control", Rect(100,100,590,100)).front; + var win = Window("Control", Rect(100,100,610,100)).front; Button(win, Rect(10,10,80, 80)).states_([["bd",Color.black,Color.white]]).mouseDownAction_({Synth(\fluidbd, [\out, input_bus], analysis_synth, \addBefore)}); Button(win, Rect(100,10,80, 80)).states_([["sn",Color.black,Color.white]]).mouseDownAction_({Synth(\fluidsn, [\out, input_bus], analysis_synth, \addBefore)}); Button(win, Rect(190,10,80, 80)).states_([["hh",Color.black,Color.white]]).mouseDownAction_({Synth(\fluidhh, [\out, input_bus], analysis_synth,\addBefore)}); - StaticText(win, Rect(280,7,75,25)).string_("Select").align_(\center); - PopUpMenu(win, Rect(280,32,75,25)).items_(["learn","classify"]).action_({|value| + StaticText(win, Rect(280,7,85,25)).string_("Select").align_(\center); + PopUpMenu(win, Rect(280,32,85,25)).items_(["learn","classify"]).action_({|value| classifying = value.value; if(classifying == 0, { train_base.fill(0,65,0.1) }); }); - PopUpMenu(win, Rect(280,65,75,25)).items_(["classA","classB","classC"]).action_({|value| + PopUpMenu(win, Rect(280,65,85,25)).items_(["classA","classB","classC"]).action_({|value| cur_training_class = value.value; train_base.fill(0,65,0.1); }); - Button(win, Rect(365,65,65,25)).states_([["transfer",Color.black,Color.white]]).mouseDownAction_({ + Button(win, Rect(375,65,85,25)).states_([["transfer",Color.black,Color.white]]).mouseDownAction_({ if(classifying == 0, { // if training FluidBufCompose.process(s, train_base, numChans:1, destination:~classify_bases, destStartChan:cur_training_class); }); }); - StaticText(win, Rect(440,7,75,25)).string_("Activations"); + StaticText(win, Rect(470,7,75,25)).string_("Acts"); activations_disps = Array.fill(3, {arg i; - StaticText(win, Rect(440,((i+1) * 20 )+ 7,75,25)); + StaticText(win, Rect(470,((i+1) * 20 )+ 7,80,25)); }); - StaticText(win, Rect(520,7,55,25)).string_("Thresh").align_(\center); + StaticText(win, Rect(540,7,55,25)).string_("Thresh").align_(\center); 3.do {arg i; - TextField(win, Rect(520,((i+1) * 20 )+ 7,55,25)).string_("0.5").action_({|x| thresholds[i] = x.value.asFloat;}); + TextField(win, Rect(540,((i+1) * 20 )+ 7,55,25)).string_("0.5").action_({|x| thresholds[i] = x.value.asFloat;}); }; win.onClose_({circle_buf.free;input_bus.free;osc_func.clear;analysis_synth.free;}); diff --git a/release-packaging/ignore/Examples/segmenting/size_of_slices.scd b/release-packaging/ignore/Examples/segmenting/size_of_slices.scd deleted file mode 100644 index 4135cba..0000000 --- a/release-packaging/ignore/Examples/segmenting/size_of_slices.scd +++ /dev/null @@ -1,81 +0,0 @@ -( -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, target, tolerance, startThresh, prevThresh, curThresh, curVal, prevVal, iters, maxIters, dVal, dThresh; - startTime = Main.elapsedTime; - prevThresh = 0.1; //initial threshold (between 0.00001 and 0.99999 - target = 0.3 * s.sampleRate; //average of slices desired - tolerance = 0.01 * s.sampleRate; // the acceptable error in the number of slices yield - maxIters = 100; //max number of iterations acceptable - - //makes a first iteration and checks the average of slight lenght - FluidBufNoveltySlice.process(s,b, indices: c, threshold: prevThresh,action:{|x|x.getn(0,x.numFrames,{|y|var out; out = Array.new; y.doAdjacentPairs({|a,b|out = out ++ (b - a);});prevVal = out.mean;})}); - //makes a second iteration - s.sync; // OWEN: why is this needed??? - "1: % % %\n".postf(prevThresh, prevVal, c.numFrames); - if ( (prevVal > target), { - curThresh = (prevThresh * 0.5).max(0.000001); - }, { - curThresh = (prevThresh * 2).min(0.999999); - }); - FluidBufNoveltySlice.process(s,b, indices: c, threshold: curThresh,action:{|x|x.getn(0,x.numFrames,{|y|var out; out = Array.new; y.doAdjacentPairs({|a,b|out = out ++ (b - a);});curVal = out.mean;})}); - s.sync; - "2: % % %\n".postf(curThresh, curVal, c.numFrames); - //makes further iterations until the result is achieved, or the maximum of acceptable iterations is reached - iters = 2; - while ( { - (iters < maxIters) && ((curVal - target).abs > tolerance) - }, { - 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).min(0.999999).max(0.000001); - },{ - //if we have - curThresh = (((dThresh / dVal) * (target - curVal)) + curThresh).min(0.999999).max(0.000001); - }); - FluidBufNoveltySlice.process(s,b, indices: c, threshold: curThresh,action:{|x|x.getn(0,x.numFrames,{|y|var out; out = Array.new; y.doAdjacentPairs({|a,b|out = out ++ (b - a);});curVal = out.mean;})}); - s.sync; - "%: % % %\n".postf(iters, curThresh, curVal, c.numFrames); - } - ); - //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 for an average lenght of % samples per slices (% of target) in % seconds and % iterations.\n".postf(curThresh.round(0.001), curVal.asInt, (curVal/target).round(0.01), (Main.elapsedTime - startTime).round(0.01), iters); - } - ); -}.play -) - - - - -//sanity check -c.getn(0,c.numFrames,{|x|a=x}) - -a -d = Array.new; -a.doAdjacentPairs({|a,b|d = d ++ (b - a);}) -d.median -d.mean -{e=0;d.do({|x|e = e + (x - d.mean).squared});e = e / d.size; e = e.sqrt;}.value -f = d.sort -f.first -f.last -(f.blendAt((f.size-1) * 0.75) - f.blendAt((f.size-1) * 0.25))