desc:Buffer Glitch

slider1:0<0,100,1>Trigger
slider2:1000<10,3000,1>Length
slider3:1<1,20,1>Period count
slider4:50<0,50,1>Clicks smooth

@init
pos = 0; // Position in buffer
gpos = 0; // Sample counter, set to zero to start refilling the buffer
tpos = 0; // Period counter
random_tlen_range = 10;
random_tlen = rand(random_tlen_range);

@sample
buffer = pos * 2;
bv0 = buffer[0];
bv1 = buffer[1];

gpos += 1;
gpos < slider2 ? (

  // Prevent clicks with smoothing
  k = 1.0;
  gpos < slider4 ? (
    // Smooth attack
    k = gpos / slider4;
    k = k * k;
  ) :
  gpos > slider2 - slider4 ? (
    // Smooth release
    k = (slider2 - gpos) / slider4;
    k = k * k;
  );
  
  // Fill buffer
  buffer[0] = spl0 * k;
  buffer[1] = spl1 * k;
);

slider1 > 1.0 ? gpos = 0;

tlen = slider3 + random_tlen;
(pos+=1) >= slider2 ? (
  pos = 0;
  tpos += 1;
  (tpos>=tlen) ? (
    tpos = 0;
    gpos = 0;
    random_tlen = rand(1);
    random_tlen  = random_tlen_range * (random_tlen^3);
  );
);

spl0 = bv0;
spl1 = bv1;

