i have created these coloured noise impulses by using PV_MagDiv and the single side band PM from this thread and nathans Hasher approach for creating deterministic noise. But im currently a bit limited in getting different timbres out of this beside changing the modulational index (with MouseX here). I have tried to put it into a Non Linear Filter for more variation but thats not adding alot, does somebody has other ideas for more timbral variation?
(
var randomPhase = { |triggerRate, randomness|
var minDuration = (2 ** randomness) / triggerRate;
var maxDuration = (2 ** (-1 * randomness)) / triggerRate;
var demand = Dunique(minDuration * ((maxDuration / minDuration) ** Dwhite(0, 1)));
var duration = Duty.ar(demand, DC.ar(0), demand);
var phase = Phasor.ar(DC.ar(0), SampleDur.ir / duration, 0, 1);
(phase: phase, trigger: (HPZ1.ar(phase) < 0) + Impulse.ar(0));
};
var channelMask = { |trig, numChannels, channelMask, centerMask|
var rate = if(trig.rate == \audio, \ar, \kr);
var panChannels = Array.series(numChannels, -1 / numChannels, 2 / numChannels).wrap(-1.0, 1.0);
var panPositions = panChannels.collect { |pos| Dser([pos], channelMask) };
panPositions = panPositions ++ Dser([0], centerMask);
Demand.perform(rate, trig, 0, Dseq(panPositions, inf));
};
var raisedCos = { |phase, index|
var cosine = cos(phase * 2pi);
exp(index.abs * (cosine - 1));
};
var singleSideBandPM = { |carrPhase, modPhase, index|
var raisedCosWindow = raisedCos.(modPhase, index);
var mod = sin(modPhase * 2pi);
var carr = sin(carrPhase * 2pi + (mod * index));
carr * raisedCosWindow;
};
SynthDef(\pv_magDiv, {
var numChannels = 5;
var tFreq, trig, phase, randomTrigPhase, inA, inB, chanMask, chainA, chainB, chain, sig;
var modPhase, randomModTrigPhase;
tFreq = \tFreq.kr(100);
randomTrigPhase = randomPhase.(tFreq, \randomnessA.kr(1));
randomModTrigPhase = randomPhase.(tFreq * MouseY.kr(1, 10), \randomnessB.kr(1));
trig = randomTrigPhase.trigger;
phase = randomTrigPhase.phase;
modPhase = randomModTrigPhase.phase;
inA = Hasher.ar(phase);
inA = inA * IEnvGen.ar(Env([0, 1, 0], [0.001, 0.01], [4.0, -4.0]), phase);
inB = singleSideBandPM.(phase, modPhase, \modIndex.kr(10));
chanMask = channelMask.(trig, numChannels - 1, \channelMask.kr(1), \centerMask.kr(1));
chainA = FFT(LocalBuf(2048), inA, hop: 1 / 16);
chainB = FFT(LocalBuf(2048), inB, hop: 1 / 16);
chain = PV_MagDiv(chainA, chainB);
sig = IFFT(chain);
sig = (sig * \boost.kr(3.dbamp)).tanh;
sig = PanAz.ar(2, sig, chanMask * \panMax.kr(0.4));
sig = sig * Env.asr(0.001, 1, 0.001).ar(Done.freeSelf, \gate.kr(1));
sig = sig * \amp.kr(-15.dbamp);
sig = LeakDC.ar(sig);
OffsetOut.ar(\out.kr(0), sig);
}).add;
)
(
Routine({
loop{
s.bind {
~pvMagDiv = Synth(\pv_magDiv, [
// custom phase
\tFreq, 24,
\randomness, 1,
// amp & outs
\amp, -15.dbamp,
\out, 0,
]);
};
rrand(2, 5).wait;
~pvMagDiv.set(\gate, 0);
rrand(2, 4).wait;
};
}).play;
)
EDIT: these releases are a nice inspiration for this kind of sound: