├── README.md ├── compressor.dsp └── granulator.dsp /README.md: -------------------------------------------------------------------------------- 1 | faust-code 2 | ========== 3 | 4 | Setup 5 | ----- 6 | You need Faust to run these. Get it from http://faust.grame.fr 7 | 8 | Use 9 | --- 10 | Run 'faust2caqt faust_script.dsp' on a Mac OS machine the appropriate faust2... command for the platform you are interested in and then run the compiled app -------------------------------------------------------------------------------- /compressor.dsp: -------------------------------------------------------------------------------- 1 | declare name "Compressor"; 2 | declare author "Mayank Sanganeria"; 3 | declare version "0.1"; 4 | 5 | 6 | SR = fconstant(int fSamplingFreq, ); 7 | 8 | // Controls 9 | 10 | 11 | 12 | 13 | //Level estimator 14 | 15 | 16 | leaky(x,a) = +((exp(-1/(SR*t)))*abs(x))~(1-a)*_'; 17 | level = leaky(_,0.01); 18 | 19 | //Gain computer 20 | gain = select2((level>0.1),1,0.1); 21 | 22 | 23 | process = gain*_; -------------------------------------------------------------------------------- /granulator.dsp: -------------------------------------------------------------------------------- 1 | declare name "Granulator"; 2 | declare author "Mayank Sanganeria"; 3 | declare version "1.0"; 4 | 5 | // Controls 6 | N = hslider("grain density", 1, 1, maxN, 1); 7 | gLength = hslider("grain length", 0.1, 0.01, 0.5, 0.01); 8 | dLength = hslider("delay length", 10, 0.5, 10, 0.1); 9 | 10 | // Globals 11 | SR = fconstant(int fSamplingFreq, ); 12 | counter = +(1)%delayLength~_; // to iterate through the delay line 13 | delayBufferSize = 480000; 14 | maxN = 64; 15 | 16 | //Granular synth variables 17 | grainLength = int(SR*gLength); 18 | delayLength = int(SR*dLength); 19 | 20 | 21 | //Noise Generator 22 | 23 | S(1,F) = F; 24 | S(i,F) = F <: S(i-1,F),_ ; 25 | Divide(n,k) = par(i, n, /(k)) ; 26 | random = +(12345) : *(1103515245) ; 27 | RANDMAX = 2^32 - 1 ; 28 | chain(n) = S(n,random) ~ _; 29 | NoiseN(n) = chain(n) : Divide(n,RANDMAX); 30 | 31 | noiser = NoiseN(maxN+1); //multi channel noiser 32 | 33 | NoiseChan(n,0) = noiser:>_,par( j, n-1 , !); 34 | NoiseChan(n,i) = noiser:>par( j, i , !) , _, par( j, n-i-1,!); 35 | 36 | noise(i) = (NoiseChan(maxN+1,i) + 1) / 2; //get nth channel of multi-channel noiser 37 | //-------------Noise Generator End 38 | 39 | //Sample & Hold 40 | SH(trig,x) = (*(1 - trig) + x * trig) ~ _; 41 | 42 | 43 | //Grain Positions 44 | grainOffset(i) = int(SH(1-1',int(delayLength*noise(i)))) ; 45 | grainCounterMaster = +(1)%grainLength~_; // universal counter for all grains 46 | grainCounter(i) = (grainCounterMaster + grainOffset(i) ) % grainLength; 47 | grainRandomStartPos(i) = int(SH(int(grainCounter(i)/(grainLength-1)),int(delayLength*noise(i)))); 48 | grainPosition(i) = grainCounter(i) + grainRandomStartPos(i); 49 | 50 | //Delay Line 51 | buffer(write,read,x) = rwtable(delayBufferSize, 0.0, write%delayLength, x, read%delayLength); 52 | 53 | //sin wave for windowing 54 | window(i) = sin(2*3.14159*grainCounter(i)/(grainLength-1)); 55 | 56 | process = _<: par(i,maxN,buffer(counter, grainPosition(i))*window(i)*(i _,_; --------------------------------------------------------------------------------