I share my work, but it's still in progress (Perhaps language blunders
are present, especially in the random distribution).
Best
Le 16/12/2016 à 13:03, Lervik Olav a écrit :
funny, I was wondering about the same thing today…
would be curious to see an example as well.
cheers
On 16 Dec 2016, at 12:38, Ali Rasulovitch <alikthen...@gmail.com
<mailto:alikthen...@gmail.com>> wrote:
I've been searching through several faust docs and couldn't find any
granular synthesis examples. Are there any?
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org <http://slashdot.org>!
http://sdm.link/slashdot_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
<mailto:Faudiostream-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/faudiostream-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users
import("stdfaust.lib");
///////////////////////////////////////////////////////////////
// Tools
///////////////////////////////////////////////////////////////
scale(value, minIn, maxIn, minOut, maxOut) =
((maxOut - minOut) * (value - minIn) / (maxIn - minIn)) + minOut;
//------------------------------------------------------------
range(signal, low, high) = scale(signal, -1,1, low,high);
//------------------------------------------------------------
syncPulse(freq) = ba.beat(60*freq);
//------------------------------------------------------------
asyncPulse(freq, driftPerCent) = syncPulse(driftFreq)
with {
point = freq * driftPerCent / 100;
driftFreq = range(no.lfnoise0(freq), freq-point, freq+point);
// driftFreq = range(no.lfnoiseN(1, freq), freq-point, freq+point);
};
//------------------------------------------------------------
envTri(d, t) = en.ar(d/2, d/2, t);
//------------------------------------------------------------
envSin(d, t) = (envTri(d, t)*ma.PI/2) : sin;
//------------------------------------------------------------
envSqrt(d, t) = envTri(d, t) : sqrt;
//------------------------------------------------------------
envHann(d, t) = (1-cos(ma.PI*envTri(d, t)))/2;
//------------------------------------------------------------
//TODO
//clip(value, min, max) = case
// if value <= min, min
// if value >= max, max
// value
///////////////////////////////////////////////////////////////
// Granular synthesis
///////////////////////////////////////////////////////////////
signalGrain(sig, grainEnv, amp) = sig * grainEnv * amp;
//------------------------------------------------------------
sinGrain(freq, grainDur, pulse, amp) =
signalGrain(os.oscsin(freq), envHann(grainDur, pulse), amp);
//------------------------------------------------------------
sinGrainSync(freq, grainDur, density, amp) =
sinGrain(freq, grainDur, syncPulse(density), amp);
sinGrainAsync(freq, grainDur, density, amp) =
sinGrain(freq, grainDur, asyncPulse(density, 50), amp);
//------------------------------------------------------------
cloudGrain(minFreq, maxFreq, grainDur, pulse, density, amp) =
sinGrain(range(no.lfnoise0(density), minFreq, maxFreq), grainDur,
pulse, amp);
// sinGrain(range(no.lfnoiseN(1, density), minFreq, maxFreq), grainDur,
pulse, amp);
//------------------------------------------------------------
cloudGrainSync(minFreq, maxFreq, grainDur, density, amp) =
cloudGrain(minFreq, maxFreq, grainDur, syncPulse(density), density,
amp);
cloudGrainAsync(minFreq, maxFreq, grainDur, density, amp) =
cloudGrain(minFreq, maxFreq, grainDur, asyncPulse(density, 50),
density, amp);
//------------------------------------------------------------
cloudGrainRange(minFreq, maxFreq, minGrainDur, maxGrainDur, minDensity,
maxDensity, minAmp, maxAmp) = cloudRange
with {
rangeDensity = range(no.lfnoiseN(3, maxDensity), minDensity,
maxDensity);
cloudRange = cloudGrainSync(minFreq, maxFreq,
range(no.lfnoiseN(4, rangeDensity), minGrainDur, maxGrainDur),
rangeDensity,
range(no.lfnoiseN(5, rangeDensity), minAmp, maxAmp));
};
//------------------------------------------------------------
sawGrain(freq, grainDur, pulse, amp) =
signalGrain(os.saw1(freq), envHann(grainDur, pulse), amp);
//------------------------------------------------------------
sawGrainSync(freq, grainDur, density, amp) =
sawGrain(freq, grainDur, syncPulse(density), amp);
sawGrainAsync(freq, grainDur, density, amp) =
sawGrain(freq, grainDur, asyncPulse(density, 50), amp);
//------------------------------------------------------------
fm(carrier, modulating, index, amp) = fmSignal * amp
with {
modulation = os.oscsin(modulating) * modulating * index;
fmSignal = os.oscsin(carrier + modulation);
};
fmGrain(carrier, modulating, index, grainDur, pulse, amp) =
signalGrain(fm(carrier, modulating, index, amp), envHann(grainDur,
pulse));
//------------------------------------------------------------
fmGrainSync(carrier, modulating, index, grainDur, density, amp) =
fmGrain(carrier, modulating, index, grainDur, syncPulse(density), amp);
fmGrainAsync(carrier, modulating, index, grainDur, density, amp) =
fmGrain(carrier, modulating, index, grainDur, asyncPulse(density, 50),
amp);
//------------------------------------------------------------
//wobble(freq, wobbleFreq, wobbleAmp, Q, mix, amp, trig) = signal * amp
wobble(freq, wobbleFreq, wobbleAmp, Q, mix, amp) = signal * amp
with {
// wobble = (os.oscp(wobbleFreq, trig:si.smoo) * wobbleAmp) + (freq*1.5);
// wobble = (os.oscp(wobbleFreq, trig) * wobbleAmp) + (freq*1.5);
wobble = (os.osci(wobbleFreq) * wobbleAmp) + (freq*1.5);
signal = (os.square(freq) * (1-mix)) + (os.square((freq)*2.01) * mix) :
fi.resonbp(wobble, Q, 1) : co.compressor_mono(3,-6,0.02,0.5);
};
wobbleGrainSync(freq, wobbleFreq, wobbleAmp, Q, mix, grainDur, density, amp) =
sig
with {
sig = signalGrain(wobble(freq, wobbleFreq, wobbleAmp, Q, mix, amp),
envHann(grainDur,syncPulse(density)), 1);
};
wobbleGrainAsync(freq, wobbleFreq, wobbleAmp, Q, mix, grainDur, density, amp) =
sig
with {
sig = signalGrain(wobble(freq, wobbleFreq, wobbleAmp, Q, mix, amp),
envHann(grainDur,asyncPulse(density, 50)), 1);
};
import("stdfaust.lib");
import("grain.lib");
freq = hslider("[1]freq [unit:Hz]", 440, 100, 15000, 10): si.smoo;
grainDur = hslider("[2]grainDur", 0.01, 0.01, 0.25, 0.01): si.smoo;
density = hslider("[3]density", 5, 0.5, 250, 0.5);
//grain = vgroup("[1]grain", sinGrain(freq, grainDur, density, 1));
//grain = vgroup("[1]grain", sinGrainSync(freq, grainDur, density, 1));
//grain = vgroup("[1]grain", cloudGrainAsync(50,freq, grainDur, density, 1));
grain = vgroup("[1]grain", cloudGrainRange(50,freq, 0.001,grainDur,
0.5,density, 0.1,0.8));
//grain = vgroup("[1]grain", sawGrainAsync(freq, grainDur, density, 1));
volume = vslider("[4]volume [unit:dB]", -30, -96, 0, 1): ba.db2linear :
si.smoo;
vmeter(x) = attach(x, envelop(x) : vbargraph("[5][unit:dB]", -70, +5));
envelop = abs : max ~ -(1.0/ma.SR) : max(ba.db2linear(-70)) : ba.linear2db;
process = hgroup( "", grain * volume : vmeter);
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users