add Chroma feature
parent
1acf0fac55
commit
49f0acd9fd
@ -0,0 +1,49 @@
|
|||||||
|
FluidBufChroma : FluidBufProcessor {
|
||||||
|
*kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, features, numChroma = 12, ref = 440, normalize = 0, minFreq = 0, maxFreq = -1, windowSize = 1024, hopSize = -1, fftSize = -1, padding = 1, trig = 1, blocking = 0|
|
||||||
|
|
||||||
|
var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize};
|
||||||
|
|
||||||
|
source = source.asUGenInput;
|
||||||
|
features = features.asUGenInput;
|
||||||
|
|
||||||
|
source.isNil.if {"FluidBufChroma: Invalid source buffer".throw};
|
||||||
|
features.isNil.if {"FluidBufChroma: Invalid features buffer".throw};
|
||||||
|
|
||||||
|
^FluidProxyUgen.kr(\FluidBufChromaTrigger,-1, source, startFrame, numFrames, startChan, numChans, features, padding, numChroma, ref, normalize, minFreq, maxFreq, numChroma, windowSize, hopSize, fftSize, maxFFTSize, trig, blocking);
|
||||||
|
}
|
||||||
|
|
||||||
|
*process { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, features, numChroma = 12, ref = 440, normalize = 0, minFreq = 0, maxFreq = -1, windowSize = 1024, hopSize = -1, fftSize = -1, padding = 1, freeWhenDone = true, action|
|
||||||
|
|
||||||
|
var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize};
|
||||||
|
|
||||||
|
source = source.asUGenInput;
|
||||||
|
features = features.asUGenInput;
|
||||||
|
|
||||||
|
source.isNil.if {"FluidBufChroma: Invalid source buffer".throw};
|
||||||
|
features.isNil.if {"FluidBufChroma: Invalid features buffer".throw};
|
||||||
|
|
||||||
|
^this.new(
|
||||||
|
server, nil, [features]
|
||||||
|
).processList(
|
||||||
|
[source, startFrame, numFrames, startChan, numChans, features, padding, numChroma, ref, normalize, minFreq, maxFreq, numChroma, windowSize, hopSize, fftSize, maxFFTSize, 0],freeWhenDone,action
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
*processBlocking { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, features, numChroma = 12, ref = 440, normalize = 0, minFreq = 0, maxFreq = -1, windowSize = 1024, hopSize = -1, fftSize = -1, padding = 1, freeWhenDone = true, action|
|
||||||
|
|
||||||
|
var maxFFTSize = if (fftSize == -1) {windowSize.nextPowerOfTwo} {fftSize};
|
||||||
|
|
||||||
|
source = source.asUGenInput;
|
||||||
|
features = features.asUGenInput;
|
||||||
|
|
||||||
|
source.isNil.if {"FluidBufChroma: Invalid source buffer".throw};
|
||||||
|
features.isNil.if {"FluidBufChroma: Invalid features buffer".throw};
|
||||||
|
|
||||||
|
^this.new(
|
||||||
|
server, nil, [features]
|
||||||
|
).processList(
|
||||||
|
[source, startFrame, numFrames, startChan, numChans, features, padding, numChroma, ref, normalize, minFreq, maxFreq, numChroma, windowSize, hopSize, fftSize, maxFFTSize, 1],freeWhenDone,action
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluidBufChromaTrigger : FluidProxyUgen {}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
FluidChroma : FluidRTMultiOutUGen {
|
||||||
|
|
||||||
|
*kr { arg in = 0, numChroma = 12, ref = 440, normalize = 0, minFreq = 0, maxFreq = -1, maxNumChroma = 120, windowSize = 1024, hopSize = -1, fftSize = -1, maxFFTSize = 16384;
|
||||||
|
^this.multiNew('control', in.asAudioRateInput(this), numChroma, ref, normalize, minFreq, maxFreq, maxNumChroma, windowSize, hopSize, fftSize, maxFFTSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
init {arg ...theInputs;
|
||||||
|
inputs = theInputs;
|
||||||
|
^this.initOutputs(inputs.at(6),rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkInputs {
|
||||||
|
if(inputs.at(6).rate != 'scalar') {
|
||||||
|
^(": maxNumChroma cannot be modulated.");
|
||||||
|
};
|
||||||
|
if(inputs.at(10).rate != 'scalar') {
|
||||||
|
^(": maxFFTSize cannot be modulated.");
|
||||||
|
};^this.checkValidInputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue