/* matt written by Luka Prinčič for 'noether' release. you need the matthew_1-25.wav in a smp folder. */ ( Server.default.waitForBoot { Buffer.freeAll; // load buffers ~selfpath = PathName.new(thisProcess.nowExecutingPath).pathOnly; ~buf2 = Buffer.readChannel(s, ~selfpath +/+ "smp/matthew_1-25.wav", channels:1); SynthDef(\granulator, { var snd, mpos, clicks, env, glitch, nenv; // positions mpos = Demand.kr(Impulse.kr(1/64), 0, Dseq([ 0.247, 0.295, 0.265, 0.39, 0.147, 0.275, 0.698, 0.242 ],inf)); env = EnvGen.ar( Env([0, 0, 1, 0.5, 0.8, 0.5, 0.8, 0.5, 1, 0, 0], [ 0, 15, 1, 15, 1, 15, 1, 15.95, 0.05, 0 ], \sqr, releaseNode: 9, loopNode: 0), gate:1); snd = GrainBuf.ar( numChannels: 2, trigger: Impulse.ar(128 * LFNoise0.ar(128).range(1,1.4)), dur: 0.2, sndbuf: ~buf2, rate: [0.5, 1], pos: SinOsc.kr(1/64, phase:pi/2*3).range(mpos, mpos+0.01).poll(2, \pos) * LFNoise0.ar(128).range(1, 0.999), ) * 0.3; snd = LPF.ar(in: snd, freq: LFNoise1.ar(0.3).exprange(450,15000)); snd = Splay.ar( [ snd[0][0] * 0.5, snd[0][1] ] + [ snd[1][1], snd[1][0] * 0.5 ], 1) * 2 ; snd = snd * LFPulse.kr(8).range(LFNoise1.kr([0.1,0.1]).range( EnvGen.kr(Env([1, 1, 0.5, 0.2, 1, 1],[64, 64, 256, 64, 64])), 1),1); snd = snd * LFPulse.kr(3).range(LFNoise1.kr([0.1,0.1]).range( EnvGen.kr(Env([1, 1, 0.8, 0.6, 1, 1],[64, 64, 256, 64, 64])), 1),1); clicks = HPF.ar(LFSaw.ar(8, 1, mul:LFNoise0.kr(2).range(0.02,0.05)), 1000); clicks = LPF.ar(in: clicks, freq: LFNoise1.ar(0.3).exprange(450,9000)) * LFSaw.kr(1/16, iphase:1).range(0,1); clicks = clicks + LPF.ar( HPF.ar( LFSaw.ar(1, 0, mul:LFNoise0.kr(2).range(0.005,0.04)), LFNoise1.kr(1/8).range(500,4000)), 7000); clicks = clicks * EnvGen.kr(Env([0,0,1,1,0,0],[128,32,256,32,64])); glitch = GbmanN.ar(LFNoise0.kr(LFNoise0.kr(4).range(1,20)).exprange(240, SampleRate.ir)); glitch = glitch * EnvGen.ar(Env( [0, 0, 0, 1, 1, 0, 0], [ 0, 16+15.75, 0, 0.25, 0, 0 ], \lin, 5, 0)); glitch = BPF.ar(glitch, 1000) * LFNoise0.kr(1/16).range(0.005, 0.02); glitch = glitch * EnvGen.kr(Env([0,0,1,1,1,0],[256,128,64,64])); glitch = GVerb.ar(glitch, 100, 5, 0.8, 0.5, 30, 1, 0, 0.8); nenv = EnvGen.ar(Env([0,0,1,0,0], [0,32,0,0], 20, 3, 0)); snd = snd * env * EnvGen.kr(Env([1,1,0],[512,0.1])); snd = Decimator.ar(snd, LFNoise1.kr(1/16).range(5000,22050), mul:-18.dbamp, add:snd); snd = CombL.ar(BPF.ar(snd, 1000), 1, [0.5,2/3], 8, add:snd); snd = snd + clicks; snd = snd + glitch; snd = snd + (PinkNoise.ar * nenv * LFNoise0.kr(1/16).range(0.005, 0.05) * EnvGen.kr(Env([0,0,1,1,0,0],[128,256,64,64])) ); snd = snd * EnvGen.kr(Env([0, 1, 1, 0],[32, 512-32, 32], \sqr), doneAction:2); Out.ar(0,Limiter.ar(snd, 0.95)); }).play; } )