(buf)ampseg: more test code and commented examples of interface use

nix
Pierre Alexandre Tremblay 7 years ago
parent 6729665ce5
commit 982db962a4

@ -1,5 +1,5 @@
FluidAmpSlice : UGen { FluidAmpSlice : UGen {
*ar { arg in = 0, absRampUp = 10, absRampDown = 10, absThreshOn = -40, absThreshOff = -40, minSliceLength = 1, minSilenceLength = 1, minLengthAbove = 1, minLengthBelow = 1, lookBack = 0, lookAhead = 0, relRampUp = 1, relRampDown = 1, relThreshOn = 144, relThreshOff = -144, highPassFreq = 250, maxSize = 88200, outputType = 0; *ar { arg in = 0, absRampUp = 10, absRampDown = 10, absThreshOn = -90, absThreshOff = -90, minSliceLength = 1, minSilenceLength = 1, minLengthAbove = 1, minLengthBelow = 1, lookBack = 0, lookAhead = 0, relRampUp = 1, relRampDown = 1, relThreshOn = 144, relThreshOff = -144, highPassFreq = 85, maxSize = 88200, outputType = 0;
^this.multiNew('audio', in.asAudioRateInput(this), absRampUp, absRampDown, absThreshOn, absThreshOff, minSliceLength, minSilenceLength, minLengthAbove, minLengthBelow, lookBack, lookAhead, relRampUp, relRampDown, relThreshOn, relThreshOff, highPassFreq, maxSize, outputType) ^this.multiNew('audio', in.asAudioRateInput(this), absRampUp, absRampDown, absThreshOn, absThreshOff, minSliceLength, minSilenceLength, minLengthAbove, minLengthBelow, lookBack, lookAhead, relRampUp, relRampDown, relThreshOn, relThreshOff, highPassFreq, maxSize, outputType)
} }
checkInputs { checkInputs {

@ -1,5 +1,5 @@
FluidBufAmpSlice{ FluidBufAmpSlice{
*process { arg server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, absRampUp = 10, absRampDown = 10, absThreshOn = -40, absThreshOff = -40, minSliceLength = 1, minSilenceLength = 1, minLengthAbove = 1, minLengthBelow = 1, lookBack = 0, lookAhead = 0, relRampUp = 1, relRampDown = 1, relThreshOn = 144, relThreshOff = -144, highPassFreq = 250, outputType = 0, action; *process { arg server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, absRampUp = 10, absRampDown = 10, absThreshOn = -90, absThreshOff = -90, minSliceLength = 1, minSilenceLength = 1, minLengthAbove = 1, minLengthBelow = 1, lookBack = 0, lookAhead = 0, relRampUp = 1, relRampDown = 1, relThreshOn = 144, relThreshOff = -144, highPassFreq = 85, outputType = 0, action;
var maxSize = max(minLengthAbove + lookBack, max(minLengthBelow,lookAhead)); var maxSize = max(minLengthAbove + lookBack, max(minLengthBelow,lookAhead));

@ -97,7 +97,7 @@ code::
[source, env] [source, env]
}.plot(0.1); }.plot(0.1);
) )
//basic tests: absThresh histeresis //basic tests: absThresh hysteresis
( (
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -16); env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -16);
@ -118,14 +118,14 @@ code::
[source, env] [source, env]
}.plot(0.1); }.plot(0.1);
) )
//mid tests: absThresh time histeresis on //mid tests: absThresh time hysteresis on
( (
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthAbove:441, outputType:0); env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthAbove:441, outputType:0);
[DelayN.ar(source,0.1,441/44100), env] [DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1); }.plot(0.1);
) )
//mid tests: absThresh time histeresis off //mid tests: absThresh time hysteresis off
( (
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthBelow:441); env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthBelow:441);
@ -153,7 +153,7 @@ code::
[DelayN.ar(source,0.1,441/44100), env] [DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1); }.plot(0.1);
) )
//advanced tests: absThresh histeresis, long tail //advanced tests: absThresh hysteresis, long tail
( (
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16); env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16);

@ -93,130 +93,92 @@ RETURNS::
EXAMPLES:: EXAMPLES::
code:: code::
//basic tests: highPass sanity // define a test signal and a destination buffer
( (
{var env, source = SinOsc.ar(320,0,0.5); b = Buffer.sendCollection(s, Array.fill(44100,{|i| sin(i*pi/ (44100/640)) * (sin(i*pi/ 22050)).abs}));
env = FluidAmpSlice.ar(source,highPassFreq:250, outputType:1); c = Buffer.new(s);
[source, env]
}.plot(0.03);
) )
//basic tests: absRampUp-Down sanity b.play
( b.plot
{var env, source = SinOsc.ar(320,0,0.5);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:1000, outputType:2);
[source.abs, env]
}.plot(0.03);
)
/////////////////////////////
//basic tests: absThresh sanity //basic tests: absThresh sanity
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12); c.getn(0,c.numFrames*2,{|item|item.postln;})
[source, env]
}.plot(0.1); //basic tests: absThresh hysteresis
) FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -16)
//basic tests: absThresh histeresis c.query
( c.getn(0,c.numFrames*2,{|item|item.postln;})
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -16);
[source, env]
}.plot(0.1);
)
//basic tests: absThresh min slice //basic tests: absThresh min slice
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minSliceLength:441)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minSliceLength:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[source, env]
}.plot(0.1);
)
//basic tests: absThresh min silence //basic tests: absThresh min silence
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minSilenceLength:441)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minSilenceLength:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[source, env]
}.plot(0.1);
) //mid tests: absThresh time hysteresis on
//mid tests: absThresh time histeresis on FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthAbove:441)
( c.query
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.getn(0,c.numFrames*2,{|item|item.postln;})
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthAbove:441, outputType:0);
[DelayN.ar(source,0.1,441/44100), env] //mid tests: absThresh time hysteresis off
}.plot(0.1); FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthBelow:441)
) c.query
//mid tests: absThresh time histeresis off c.getn(0,c.numFrames*2,{|item|item.postln;})
(
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, minLengthBelow:441);
[DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1);
)
//mid tests: absThresh with lookBack //mid tests: absThresh with lookBack
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, lookBack:441)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12,lookBack:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1);
)
//mid tests: absThresh with lookAhead //mid tests: absThresh with lookAhead
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, lookAhead:441)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12,lookAhead:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1);
)
//mid tests: absThresh with asymetrical lookBack and lookAhead //mid tests: absThresh with asymetrical lookBack and lookAhead
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12, lookBack:221, lookAhead:441)
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); c.query
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:100, absThreshOn:-12, absThreshOff: -12,lookBack:221, lookAhead:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[DelayN.ar(source,0.1,441/44100), env]
}.plot(0.1); //advanced tests: absThresh hysteresis, long tail //STRANGE OFFSET ADDRESS
) FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:22050, absThreshOn:-12, absThreshOff: -16, minSliceLength:441)
//advanced tests: absThresh histeresis, long tail c.query
( c.getn(0,c.numFrames*2,{|item|item.postln;})
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16); //solution: have to recut with relThresh //STRANGE OFFSET ADDRESS
[source, env] FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:22050, absThreshOn:-12, absThreshOff: -16, relRampUp:5, relRampDown:200, relThreshOn:-1, relThreshOff:-12)
}.plot(0.1); c.query
) c.getn(0,c.numFrames*2,{|item|item.postln;})
//solution: have to recut with relThresh
( //beware of double trig. a solution: minSliceLength //STRANGE OFFSET ADDRESS
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); FluidBufAmpSlice.process(s,b,indices:c, absRampUp:10, absRampDown:22050, absThreshOn:-12, absThreshOff: -16, relRampUp:5, relRampDown:200, relThreshOn:-1, relThreshOff:-12, minSliceLength:441)
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16, relRampUp:5, relRampDown:200, relThreshOn:-1, relThreshOff:-12); c.query
[source, env] c.getn(0,c.numFrames*2,{|item|item.postln;})
}.plot(0.1);
) /////////////////////////
//beware of double trig
(
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16, relRampUp:5, relRampDown:200, relThreshOn:-1, relThreshOff:-1);
[source, env]
}.plot(0.05);
)
//a solution: minSliceLength
(
{var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs);
env = FluidAmpSlice.ar(source,absRampUp:10, absRampDown:2000, absThreshOn:-12, absThreshOff: -16, relRampUp:5, relRampDown:200, relThreshOn:-1, relThreshOff:-1, minSliceLength:441);
[source, env]
}.plot(0.05);
)
//drum slicing, many ways //drum slicing, many ways
//load a buffer //load a buffer
b = Buffer.read(s,File.realpath(FluidAmpSlice.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Nicol-LoopE-M.wav");
( (
{var env, source = PlayBuf.ar(1,b); b = Buffer.read(s,File.realpath(FluidBufAmpSlice.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Nicol-LoopE-M.wav");
env = FluidAmpSlice.ar(source,absRampUp:2205, absRampDown:2205, absThreshOn:-70, absThreshOff: -80, relRampUp:10, relRampDown:441, relThreshOn:14, relThreshOff:12, minSliceLength:4410, outputType:0); c = Buffer.new(s);
[source, env]
}.plot(2,maxval:[1,1],separately:true);
) )
( FluidBufAmpSlice.process(s,b,indices:c, absRampUp:2205, absRampDown:2205, absThreshOn:-70, absThreshOff: -80, relRampUp:10, relRampDown:441, relThreshOn:14, relThreshOff:12, minSliceLength:4410)
{var env, source = PlayBuf.ar(1,b); c.query
env = FluidAmpSlice.ar(source,highPassFreq:120, absRampUp:2205, absRampDown:2205, absThreshOn:-70, absThreshOff: -80, relRampUp:10, relRampDown:2205, relThreshOn:12, relThreshOff:8, minSliceLength:441); c.getn(0,c.numFrames*2,{|item|item.postln;})
[source, env]
}.play); //AGAIN STRANGE OFFSET ADDRESSES
)
:: ::
/// //TO TROUBLESHOOT
STRONG::A stereo buffer example.:: STRONG::A stereo buffer example.::
CODE:: CODE::
// make a stereo buffer // make a stereo buffer
@ -234,7 +196,7 @@ c = Buffer.new(s);
// with basic params // with basic params
Routine{ Routine{
t = Main.elapsedTime; t = Main.elapsedTime;
FluidBufAmpSlice.process(s,b, indices: c); FluidBufAmpSlice.process(s,b, indices: c, absRampUp:1, absRampDown:1, absThreshOn:-90, absThreshOff:-95);
(Main.elapsedTime - t).postln; (Main.elapsedTime - t).postln;
}.play }.play
) )

Loading…
Cancel
Save