diff --git a/release-packaging/Classes/FluidBufNoveltyFeature.sc b/release-packaging/Classes/FluidBufNoveltyFeature.sc index 868c37a2..1fca9ace 100644 --- a/release-packaging/Classes/FluidBufNoveltyFeature.sc +++ b/release-packaging/Classes/FluidBufNoveltyFeature.sc @@ -6,6 +6,10 @@ FluidBufNoveltyFeature : FluidBufProcessor { source = source.asUGenInput; features = features.asUGenInput; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm) ?? { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; source.isNil.if {"FluidBufNoveltyFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufNoveltyFeature: Invalid features buffer".throw}; @@ -20,6 +24,11 @@ FluidBufNoveltyFeature : FluidBufProcessor { source = source.asUGenInput; features = features.asUGenInput; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm); + if (algorithm.isNil or: algorithm.isUGen) { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; source.isNil.if {"FluidBufNoveltyFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufNoveltyFeature: Invalid features buffer".throw}; @@ -40,6 +49,11 @@ FluidBufNoveltyFeature : FluidBufProcessor { source.isNil.if {"FluidBufNoveltyFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufNoveltyFeature: Invalid features buffer".throw}; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm); + if (algorithm.isNil or: algorithm.isUGen) { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; ^this.new( server, nil, [features] diff --git a/release-packaging/Classes/FluidBufNoveltySlice.sc b/release-packaging/Classes/FluidBufNoveltySlice.sc index b53820e5..82952fea 100644 --- a/release-packaging/Classes/FluidBufNoveltySlice.sc +++ b/release-packaging/Classes/FluidBufNoveltySlice.sc @@ -1,11 +1,15 @@ FluidBufNoveltySlice : FluidBufProcessor { - *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, algorithm = 0, kernelSize = 3, threshold = 0.5, filterSize = 1, minSliceLength = 2, windowSize = 1024, hopSize = -1, fftSize = -1, trig = 1 , blocking = 0| + *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, algorithm = 0, kernelSize = 3, threshold = 0.5, filterSize = 1, minSliceLength = 2, windowSize = 1024, hopSize = -1, fftSize = -1, trig = 1 , blocking = 0| var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm) ?? { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; source.isNil.if {"FluidBufNoveltySlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufNoveltySlice: Invalid features buffer".throw}; @@ -15,15 +19,20 @@ FluidBufNoveltySlice : FluidBufProcessor { } *process { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, algorithm= 0, kernelSize = 3, threshold = 0.5, filterSize = 1, minSliceLength = 2, windowSize = 1024, hopSize = -1, fftSize = -1, freeWhenDone = true, action | - + var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm); + if (algorithm.isNil or: algorithm.isUGen) { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; source.isNil.if {"FluidBufNoveltySlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufNoveltySlice: Invalid features buffer".throw}; - + ^this.new( server, nil, [indices] ).processList( @@ -32,15 +41,20 @@ FluidBufNoveltySlice : FluidBufProcessor { } *processBlocking { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, algorithm= 0, kernelSize = 3, threshold = 0.5, filterSize = 1, minSliceLength = 2, windowSize = 1024, hopSize = -1, fftSize = -1, freeWhenDone = true, action | - + var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm); + if (algorithm.isNil or: algorithm.isUGen) { + ("FluidBufNoveltySlice: % is not a recognised algorithm") + .format(algorithm).throw; + }; source.isNil.if {"FluidBufNoveltySlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufNoveltySlice: Invalid features buffer".throw}; - + ^this.new( server, nil, [indices] ).processList( diff --git a/release-packaging/Classes/FluidBufOnsetFeature.sc b/release-packaging/Classes/FluidBufOnsetFeature.sc index 6ea08b01..1b3235c8 100644 --- a/release-packaging/Classes/FluidBufOnsetFeature.sc +++ b/release-packaging/Classes/FluidBufOnsetFeature.sc @@ -5,6 +5,10 @@ FluidBufOnsetFeature : FluidBufProcessor { source = source.asUGenInput; features = features.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric) ?? { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufOnsetFeature: Invalid features buffer".throw}; @@ -18,6 +22,11 @@ FluidBufOnsetFeature : FluidBufProcessor { source = source.asUGenInput; features = features.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric); + if (metric.isNil or: metric.isUGen) { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufOnsetFeature: Invalid features buffer".throw}; @@ -35,6 +44,11 @@ FluidBufOnsetFeature : FluidBufProcessor { source = source.asUGenInput; features = features.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric); + if (metric.isNil or: metric.isUGen) { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetFeature: Invalid source buffer".throw}; features.isNil.if {"FluidBufOnsetFeature: Invalid features buffer".throw}; diff --git a/release-packaging/Classes/FluidBufOnsetSlice.sc b/release-packaging/Classes/FluidBufOnsetSlice.sc index 2f9a7548..0a3f6d78 100644 --- a/release-packaging/Classes/FluidBufOnsetSlice.sc +++ b/release-packaging/Classes/FluidBufOnsetSlice.sc @@ -1,27 +1,37 @@ FluidBufOnsetSlice : FluidBufProcessor { - *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, metric = 0, threshold = 0.5, minSliceLength = 2, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, trig = 1, blocking = 0| - + + *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, metric = 0, threshold = 0.5, minSliceLength = 2, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, trig = 1, blocking = 0| + var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric) ?? { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetSlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufOnsetSlice: Invalid features buffer".throw}; - + ^FluidProxyUgen.kr(\FluidBufOnsetSliceTrigger, -1, source, startFrame, numFrames, startChan, numChans, indices, metric, threshold, minSliceLength, filterSize, frameDelta, windowSize, hopSize, fftSize, maxFFTSize, trig, blocking); } *process { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, metric = 0, threshold = 0.5, minSliceLength = 2, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, freeWhenDone = true, action| - + var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric); + if (metric.isNil or: metric.isUGen) { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetSlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufOnsetSlice: Invalid features buffer".throw}; - + ^this.new( server, nil, [indices] ).processList( @@ -30,15 +40,20 @@ FluidBufOnsetSlice : FluidBufProcessor { } *processBlocking { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, indices, metric = 0, threshold = 0.5, minSliceLength = 2, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, freeWhenDone = true, action| - + var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize}; source = source.asUGenInput; indices = indices.asUGenInput; + metric = FluidOnsetSlice.prSelectMetric(metric); + if (metric.isNil or: metric.isUGen) { + ("FluidBufOnsetSlice: % is not a recognised metric") + .format(metric).throw; + }; source.isNil.if {"FluidBufOnsetSlice: Invalid source buffer".throw}; indices.isNil.if {"FluidBufOnsetSlice: Invalid features buffer".throw}; - + ^this.new( server, nil, [indices] ).processList( diff --git a/release-packaging/Classes/FluidNoveltyFeature.sc b/release-packaging/Classes/FluidNoveltyFeature.sc index ddb63139..a83df30f 100644 --- a/release-packaging/Classes/FluidNoveltyFeature.sc +++ b/release-packaging/Classes/FluidNoveltyFeature.sc @@ -1,13 +1,19 @@ FluidNoveltyFeature : FluidRTUGen { *kr { arg in = 0, algorithm = 0, kernelSize = 3, filterSize = 1, windowSize = 1024, hopSize = -1, fftSize = -1, maxFFTSize = -1, maxKernelSize, maxFilterSize; - - maxKernelSize = maxKernelSize ? kernelSize; - maxFilterSize = maxFilterSize ? filterSize; - + + maxKernelSize = maxKernelSize ? kernelSize; + maxFilterSize = maxFilterSize ? filterSize; + algorithm = FluidNoveltySlice.prSelectAlgorithm(algorithm) ?? { + ("FluidNoveltySlice: % is not a recognised algorithm").format(algorithm); + }; + ^this.multiNew('control', in.asAudioRateInput(this), algorithm, kernelSize, maxKernelSize, filterSize, maxFilterSize, windowSize, hopSize, fftSize, maxFFTSize) } - + checkInputs { + if([\scalar, \control].includes(inputs.at(1).rate).not) { + ^(": invalid algorithm"); + }; if(inputs.at(9).rate != 'scalar') { ^(": maxFFTSize cannot be modulated."); }; diff --git a/release-packaging/Classes/FluidNoveltySlice.sc b/release-packaging/Classes/FluidNoveltySlice.sc index 9dd78dfa..da43d54f 100644 --- a/release-packaging/Classes/FluidNoveltySlice.sc +++ b/release-packaging/Classes/FluidNoveltySlice.sc @@ -1,20 +1,35 @@ FluidNoveltySlice : FluidRTUGen { - const = 0 && (sym < algorithms.size)) { + ^sym + } { + ^nil + } + }; + ^algorithms.indexOf(sym.asSymbol) + } *ar { arg in = 0, algorithm = 0, kernelSize = 3, threshold = 0.8, filterSize = 1, minSliceLength = 2, windowSize = 1024, hopSize = -1, fftSize = -1, maxFFTSize = -1, maxKernelSize, maxFilterSize; - + maxKernelSize = maxKernelSize ? kernelSize; - maxFilterSize = maxFilterSize ? filterSize; - + maxFilterSize = maxFilterSize ? filterSize; + + algorithm = this.prSelectAlgorithm(algorithm) ?? { + ("FluidNoveltySlice: % is not a recognised algorithm").format(algorithm); + }; + ^this.multiNew('audio', in.asAudioRateInput(this), algorithm, kernelSize, maxKernelSize, threshold, filterSize, maxFilterSize, minSliceLength, windowSize, hopSize, fftSize, maxFFTSize) } checkInputs { + if([\scalar, \control].includes(inputs.at(1).rate).not) { + ^(": invalid algorithm"); + }; if(inputs.at(11).rate != 'scalar') { ^(": maxFFTSize cannot be modulated."); }; diff --git a/release-packaging/Classes/FluidOnsetFeature.sc b/release-packaging/Classes/FluidOnsetFeature.sc index 894b3e90..d5b7786a 100644 --- a/release-packaging/Classes/FluidOnsetFeature.sc +++ b/release-packaging/Classes/FluidOnsetFeature.sc @@ -1,8 +1,16 @@ FluidOnsetFeature : FluidRTUGen { *kr { arg in = 0, metric = 0, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, maxFFTSize = -1; + + metric = FluidOnsetSlice.prSelectMetric(metric) ?? { + ("% is not a recognised metric").format(metric); + }; + ^this.multiNew('control', in.asAudioRateInput(this), metric, filterSize, frameDelta, windowSize, hopSize, fftSize, maxFFTSize) } checkInputs { + if([\scalar, \control].includes(inputs.at(1).rate).not) { + ^(": invalid metric"); + }; if(inputs.at(7).rate != 'scalar') { ^(": maxFFTSize cannot be modulated."); }; diff --git a/release-packaging/Classes/FluidOnsetSlice.sc b/release-packaging/Classes/FluidOnsetSlice.sc index 91dd2c8d..507e1286 100644 --- a/release-packaging/Classes/FluidOnsetSlice.sc +++ b/release-packaging/Classes/FluidOnsetSlice.sc @@ -1,20 +1,42 @@ FluidOnsetSlice : FluidRTUGen { - const = 0 && (sym < metrics.size)) { + ^sym + } { + ^nil + } + }; + ^metrics.indexOf(sym.asSymbol) + } *ar { arg in = 0, metric = 0, threshold = 0.5, minSliceLength = 2, filterSize = 5, frameDelta = 0, windowSize = 1024, hopSize = -1, fftSize = -1, maxFFTSize = -1; + + metric = this.prSelectMetric(metric) ?? { + ("% is not a recognised metric").format(metric); + }; + ^this.multiNew('audio', in.asAudioRateInput(this), metric, threshold, minSliceLength, filterSize, frameDelta, windowSize, hopSize, fftSize, maxFFTSize) } checkInputs { + if([\scalar, \control].includes(inputs.at(1).rate).not) { + ^(": invalid metric"); + }; if(inputs.at(9).rate != 'scalar') { ^(": maxFFTSize cannot be modulated."); };