«stutter» by Santiago Vilanova
on 23 Feb'24 16:05 inmicro-beat repeat, based on delay
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
(
SynthDef(\stutter,{
	arg in=0, out=0;
    var sig, delayTime, increment, trigger;
	var reset=\reset.kr(0);
	var delayPitch=\pitch.kr(12);
	var offsetms=\offsetms.kr(0)/1000;
	var strobe=\strobe.kr(1);
	var on=\onoff.kr(0);
	var envGen, sustainTime;
	var atkTime=0.002, relTime=0.002;
	reset=reset*on;
    // Convert pitch to delay time in seconds
    delayTime = delayPitch.midicps.reciprocal;
    // Trigger for incrementing delay time
    trigger = Impulse.ar(delayTime.reciprocal);
	// Calculate sustain time to ensure envelope stays high for the chunk duration minus attack and release
    sustainTime = delayTime - (atkTime + relTime);
    // Ensure sustainTime is not negative
    sustainTime = max(sustainTime, 0)*strobe;
    // Increment delay time
    increment = Dseries(0, delayTime, inf)*on;
    increment = Demand.ar(trigger, reset, increment);
	// Generate an envelope to soften clicks
    envGen = EnvGen.ar(Env([0, 1, 1, 0], [atkTime, sustainTime, relTime], 'lin'), trigger);
    // Get input signal
    sig = In.ar(in, 1); // Assuming stereo input
    // Apply delay
    sig = DelayC.ar(sig, 24, increment+offsetms);
	// Apply envGen
	sig=sig*envGen;
    // Output
    Out.ar(out, sig);
}).add();
)
        
        reception
        
            
        
        
    
    
        comments