From ed5e8dafa18ba45a0219c4484036feb8c4a72a45 Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Mon, 28 Jan 2019 18:25:54 +0000 Subject: [PATCH] *TransientSlice : both declarations and Helpfiles updated for bug fix and new parameter --- .../Classes/FluidBufExperiments.sc | 29 ------------------- .../Classes/FluidBufTransientSlice.sc | 4 +-- .../Classes/FluidTransientSlice.sc | 4 +-- .../Classes/FluidBufTransientSlice.schelp | 9 ++++-- .../Classes/FluidTransientSlice.schelp | 9 ++++-- 5 files changed, 16 insertions(+), 39 deletions(-) delete mode 100644 release-packaging/Classes/FluidBufExperiments.sc diff --git a/release-packaging/Classes/FluidBufExperiments.sc b/release-packaging/Classes/FluidBufExperiments.sc deleted file mode 100644 index aed0c97..0000000 --- a/release-packaging/Classes/FluidBufExperiments.sc +++ /dev/null @@ -1,29 +0,0 @@ -FluidBufExperiments { - - *allocMatch{|server, srcbuf, rank=1| - var dstbuf,srcbufnum; - - srcbufnum = srcbuf.bufnum; - - server = server ? Server.default; - dstbuf = Buffer.new(server:server,numFrames:0,numChannels:1); - - server.listSendMsg( - [\b_gen, srcbufnum, "BufMatch",dstbuf.bufnum, rank] - ); - ^dstbuf; - } - - - *allocMatchAsync{|server, srcbuf, rank=1| - - var dstbuf,srcbufnum; - - srcbufnum = srcbuf.bufnum; - server = server ? Server.default; - dstbuf = Buffer.new(server:server,numFrames:0,numChannels:1); - server.sendMsg(\cmd, \AsyncBufMatch, srcbufnum, dstbuf.bufnum, rank); - ^dstbuf; - } - -} diff --git a/release-packaging/Classes/FluidBufTransientSlice.sc b/release-packaging/Classes/FluidBufTransientSlice.sc index bdda702..fd8c4bb 100644 --- a/release-packaging/Classes/FluidBufTransientSlice.sc +++ b/release-packaging/Classes/FluidBufTransientSlice.sc @@ -1,11 +1,11 @@ FluidBufTransientSlice{ - *process { arg server, srcBufNum, startAt = 0, nFrames = -1, startChan = 0, nChans = -1, transBufNum, order = 200, blockSize = 2048, padSize = 1024, skew = 0, threshFwd = 3, threshBack = 1.1, winSize = 14, debounce = 25; + *process { arg server, srcBufNum, startAt = 0, nFrames = -1, startChan = 0, nChans = -1, transBufNum, order = 200, blockSize = 2048, padSize = 1024, skew = 0, threshFwd = 3, threshBack = 1.1, winSize = 14, debounce = 25, minSlice = 1000; if(srcBufNum.isNil) { Error("Invalid buffer").format(thisMethod.name, this.class.name).throw}; if(transBufNum.isNil) { Error("Invalid buffer").format(thisMethod.name, this.class.name).throw}; server = server ? Server.default; - server.sendMsg(\cmd, \BufTransientSlice, srcBufNum, startAt, nFrames, startChan, nChans, transBufNum, order, blockSize, padSize, skew, threshFwd, threshBack, winSize, debounce); + server.sendMsg(\cmd, \BufTransientSlice, srcBufNum, startAt, nFrames, startChan, nChans, transBufNum, order, blockSize, padSize, skew, threshFwd, threshBack, winSize, debounce, minSlice); } } diff --git a/release-packaging/Classes/FluidTransientSlice.sc b/release-packaging/Classes/FluidTransientSlice.sc index 5ef269a..00ae369 100644 --- a/release-packaging/Classes/FluidTransientSlice.sc +++ b/release-packaging/Classes/FluidTransientSlice.sc @@ -1,5 +1,5 @@ FluidTransientSlice : UGen { - *ar { arg in = 0, order = 20, blockSize = 256, padSize = 128, skew = 0.0, threshFwd = 3.0, threshBack = 1.1, winSize=14, debounce=25; - ^this.multiNew('audio', in.asAudioRateInput(this), order, blockSize, padSize, skew, threshFwd ,threshBack, winSize, debounce) + *ar { arg in = 0, order = 20, blockSize = 256, padSize = 128, skew = 0.0, threshFwd = 3.0, threshBack = 1.1, winSize=14, debounce=25, minSlice = 1000; + ^this.multiNew('audio', in.asAudioRateInput(this), order, blockSize, padSize, skew, threshFwd ,threshBack, winSize, debounce, minSlice) } } \ No newline at end of file diff --git a/release-packaging/HelpSource/Classes/FluidBufTransientSlice.schelp b/release-packaging/HelpSource/Classes/FluidBufTransientSlice.schelp index d693f36..16af951 100644 --- a/release-packaging/HelpSource/Classes/FluidBufTransientSlice.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufTransientSlice.schelp @@ -58,7 +58,10 @@ ARGUMENT:: winSize The averaging window of the error detection function. It needs smoothing as it is very jittery. The longer the window, the less precise, but the less false positives. ARGUMENT:: debounce - The window size in sample within which positive detections will be clumped together to avoid overdetecting in time. No slice will be shorter than this duration. + The window size in sample within which positive detections will be clumped together to avoid overdetecting in time. + +ARGUMENT:: minSlice + The minimum duration of a slice in samples. RETURNS:: Nothing, as the destination buffer is declared in the function call. @@ -77,7 +80,7 @@ c = Buffer.new(s); ( Routine{ t = Main.elapsedTime; - FluidBufTransientSlice.process(s,b.bufnum, transBufNum:c.bufnum, order:80, debounce:4410); + FluidBufTransientSlice.process(s,b.bufnum, transBufNum:c.bufnum, order:80, minSlice:4410); s.sync; (Main.elapsedTime - t).postln; }.play @@ -105,7 +108,7 @@ c.query; ( Routine{ t = Main.elapsedTime; - FluidBufTransients.process(s,b.bufnum, 44100, 44100, 0, 0, c.bufnum, d.bufnum, 100, 512,256,1,2,1,12,20); + FluidBufTransients.process(s,b.bufnum, 44100, 44100, 0, 0, c.bufnum, d.bufnum, 100, 512,256,1,2,1,12,20,441); s.sync; (Main.elapsedTime - t).postln; }.play diff --git a/release-packaging/HelpSource/Classes/FluidTransientSlice.schelp b/release-packaging/HelpSource/Classes/FluidTransientSlice.schelp index fd1ea88..2b9ea03 100644 --- a/release-packaging/HelpSource/Classes/FluidTransientSlice.schelp +++ b/release-packaging/HelpSource/Classes/FluidTransientSlice.schelp @@ -38,7 +38,10 @@ ARGUMENT:: winSize The averaging window of the error detection function. It needs smoothing as it is very jittery. The longer the window, the less precise, but the less false positives. ARGUMENT:: debounce - The window size in sample within with positive detections will be clumped together to avoid overdetecting in time. No slice will be shorter than this duration. + The window size in sample within with positive detections will be clumped together to avoid overdetecting in time. + +ARGUMENT:: minSlice + The minimum duration of a slice in samples. RETURNS:: An audio stream with impulses at detected transients. The latency between the input and the output is (blockSize + padSize - order) samples. @@ -54,14 +57,14 @@ b = Buffer.read(s,File.realpath(FluidTransientSlice.class.filenameSymbol).dirnam {var sig = PlayBuf.ar(1,b.bufnum,loop:1); [FluidTransientSlice.ar(sig)*0.5, DelayN.ar(sig, 1, ((256 + 128 - 20)/ s.sampleRate))]}.play // other parameters -{var sig = PlayBuf.ar(1,b.bufnum,loop:1); [FluidTransientSlice.ar(sig,order:80,debounce:2205)*0.5, DelayN.ar(sig, 1, ((256 + 128 - 80)/ s.sampleRate))]}.play +{var sig = PlayBuf.ar(1,b.bufnum,loop:1); [FluidTransientSlice.ar(sig,order:80,minSlice:2205)*0.5, DelayN.ar(sig, 1, ((256 + 128 - 80)/ s.sampleRate))]}.play // more musical trans-trigged autopan ( { var sig, trig, syncd, pan; sig = PlayBuf.ar(1,b.bufnum,loop:1); - trig = FluidTransientSlice.ar(sig,order:10,debounce:2205); + trig = FluidTransientSlice.ar(sig,order:10,minSlice:4410); syncd = DelayN.ar(sig, 1, ((256 + 128 - 10)/ s.sampleRate)); pan = TRand.ar(-1,1,trig); Pan2.ar(syncd,pan);