hey, i have created a repository for developing and testing out new stuff.
Currently you find my current state of a warpable filterbank in there, where i will refine the current frequency transformer and add amplitude transformation as well for generating formants.
You will also find the current state of my disperser in there, where im currently trying to find a sweet spot between disperser twang and a feedback phaser. Will add a frequency shifter with feedback as well.
Will generate and test and if im happy with the results these will go into my main repo.
You can check out the latest release here: Releases · dietcv/GenerateAndTest · GitHub
// Basic Disperser
(
{
var sig = Impulse.ar(2);
Disperser.ar(
input: sig,
freq: 500,
resonance: 0.5,
mix: 1.0,
feedback: 0.0
)!2;
}.play;
)
// Phaser with Feedback
(
{
var sig = Saw.ar(110);
Disperser.ar(
input: sig,
freq: SinOsc.kr(0.2).linlin(-1, 1, 200, 2000),
resonance: MouseY.kr(0, 1),
mix: 0.5,
feedback: MouseX.kr(0, 1)
)!2 * 0.1;
}.play;
)
// WhiteNoise into FilterBank
(
{
var sig = WhiteNoise.ar(0.5);
var spread = MouseX.kr(0, 2);
var warp = MouseY.kr(-1, 1);
sig = FilterBank.ar(sig, 220, spread, warp, 0.8);
sig!2 * 0.1;
}.play;
)
// VPS into FilterBank
(
var vps = { |freq, skew, harm|
var phase = Phasor.ar(DC.ar(0), freq * SampleDur.ir);
var harm_even = harm.round(2);
var harm_odd = ((harm + 1).round(2) - 1);
var pmod = UnitTriangle.ar(phase, skew);
var sig_even = cos(phase + (pmod * (harm_even - skew)) * 2pi).neg;
var sig_odd = cos(phase + (pmod * (harm_odd - skew)) * 2pi).neg;
LinXFade2.ar(sig_even, sig_odd, harm.fold(0, 1) * 2 - 1);
};
SynthDef(\test, {
var sig;
var grainFreqMod = LFDNoise3.ar(0.1!2);
var skewMod = LFDNoise3.ar(0.1!2);
var harmonics = [
\harmA.kr(2) * (2 ** (grainFreqMod[1] * 3)),
\harmB.kr(4) * (2 ** (grainFreqMod[0] * 1))
];
sig = vps.(\freq.kr(440), skewMod.linlin(-1, 1, 0.15, 0.35), harmonics);
[1.5, 2.0].do{ |ratio, i|
sig[i] = PitchShift.ar(sig[i], 0.2, ratio, 0.003, 0.001);
};
sig = Splay.ar(sig);
sig = sig * \amp.kr(-15.dbamp);
sig = sig * Env.asr(0.001, 1, 0.001).ar(Done.freeSelf, \gate.kr(1));
sig = Limiter.ar(sig);
Out.ar(\out.kr(0), sig);
}).add;
SynthDef(\filterbank, {
var inSig, sig;
var cuttoff, spread, warp;
inSig = In.ar(\in.kr(0), 2);
spread = LFDNoise3.kr(0.1).linlin(-1, 1, 0, 2);
warp = LFDNoise3.kr(0.1).linlin(-1, 1, -1, 1);
cuttoff = 220;
sig = FilterBank.ar(inSig, cuttoff, spread, warp, 0.1);
ReplaceOut.ar(\out.kr(0), sig);
}).add;
)
(
Routine({
var freqs = [57, 60, 64, 65, 70].midicps;
s.bind {
freqs.collect{ |freq|
Synth(\test, [
\freq, freq,
\amp, -35.dbamp,
], addAction: \addToHead);
};
};
s.bind {
Synth(\filterbank, [
], addAction: \addToTail);
};
}).play;
)