session-2016-05-14-210842

clive

clive is a C audio live-coding skeleton. It allows you to hot-swap DSP processing callbacks, providing not much more than automatic C code recompilation, object code reloading, and state preservation.

diff @ 2016-05-14 22:09:01 +0100
diff --git a/src/go.c b/src/go.c
index 84e4aee..acdf6dd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -28,10 +28,10 @@ typedef struct {
 int go(S *s, int channels, const float *in, float *out) {
 
   // trigger impulse on reload
-  double impulse[2] = { s->reloaded, s->reloaded };
   if (s->reloaded) {
     s->reloaded = 0;
   }
+  double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
   double p = phasor(&s->phase, 0.001);
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, 0, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:09:16 +0100
diff --git a/src/go.c b/src/go.c
index acdf6dd..e100fea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, 0, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 500, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:09:29 +0100
diff --git a/src/go.c b/src/go.c
index e100fea..dd3eeb6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.6, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:09:32 +0100
diff --git a/src/go.c b/src/go.c
index dd3eeb6..f929b48 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.6, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:09:38 +0100
diff --git a/src/go.c b/src/go.c
index f929b48..d82cd72 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.6, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:09:50 +0100
diff --git a/src/go.c b/src/go.c
index d82cd72..7d49fab 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:09:56 +0100
diff --git a/src/go.c b/src/go.c
index 7d49fab..858699f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:10:04 +0100
diff --git a/src/go.c b/src/go.c
index 858699f..34b1a2a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.6, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:10:14 +0100
diff --git a/src/go.c b/src/go.c
index 34b1a2a..5998fcb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.6, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.9, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:10:23 +0100
diff --git a/src/go.c b/src/go.c
index 5998fcb..6237cfc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.9, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:10:30 +0100
diff --git a/src/go.c b/src/go.c
index 6237cfc..e276996 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 2000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:10:40 +0100
diff --git a/src/go.c b/src/go.c
index e276996..f76cc2c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:10:47 +0100
diff --git a/src/go.c b/src/go.c
index f76cc2c..e7fb96d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 2000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 3000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:10:54 +0100
diff --git a/src/go.c b/src/go.c
index e7fb96d..f8a9f40 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.1, down);
     feedback[c] = feedback[c] + down + up;
   }
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 3000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:10:58 +0100
diff --git a/src/go.c b/src/go.c
index f8a9f40..a3a4866 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:11:22 +0100
diff --git a/src/go.c b/src/go.c
index a3a4866..0bbf9c7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 4000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 40, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:11:32 +0100
diff --git a/src/go.c b/src/go.c
index 0bbf9c7..b394fba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -34,8 +34,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.001);
-  double modulation = 100 * cos(twopi * p);
+  double p = phasor(&s->phase, 0.01);
+  double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation)
diff @ 2016-05-14 22:11:51 +0100
diff --git a/src/go.c b/src/go.c
index b394fba..9896193 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 40, 4000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 80, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-05-14 22:11:56 +0100
diff --git a/src/go.c b/src/go.c
index 9896193..4c0e27d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:12:00 +0100
diff --git a/src/go.c b/src/go.c
index 4c0e27d..1e3600d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.6, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:12:20 +0100
diff --git a/src/go.c b/src/go.c
index 1e3600d..873aa10 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,6 +60,9 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 80, 4000, tanh(compressed[c] + impulse[c]));
   }
 
+  double b = wrap(100 * p * 60);
+  double bass = sin(twopi * b);
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-05-14 22:12:27 +0100
diff --git a/src/go.c b/src/go.c
index 873aa10..f6c1c5d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.6, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:12:36 +0100
diff --git a/src/go.c b/src/go.c
index f6c1c5d..62762fb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,7 +43,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.6, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-05-14 22:12:55 +0100
diff --git a/src/go.c b/src/go.c
index 62762fb..004a478 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 80, 4000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   double b = wrap(100 * p * 60);
diff @ 2016-05-14 22:13:20 +0100
diff --git a/src/go.c b/src/go.c
index 004a478..726d6fc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,6 +62,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double b = wrap(100 * p * 60);
   double bass = sin(twopi * b);
+  compressed[0] += bass;
+  compressed[1] += bass;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:13:40 +0100
diff --git a/src/go.c b/src/go.c
index 726d6fc..3b0874f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(100 * p * 60);
+  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p));
   double bass = sin(twopi * b);
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-05-14 22:13:43 +0100
diff --git a/src/go.c b/src/go.c
index 3b0874f..672c09b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p));
+  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
   double bass = sin(twopi * b);
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-05-14 22:14:06 +0100
diff --git a/src/go.c b/src/go.c
index 672c09b..5233969 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = sin(twopi * b);
+  double bass = tanh(sin(twopi * b));
   compressed[0] += bass;
   compressed[1] += bass;
 
diff @ 2016-05-14 22:14:12 +0100
diff --git a/src/go.c b/src/go.c
index 5233969..46204bc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(sin(twopi * b));
+  double bass = tanh(1.1 * sin(twopi * b));
   compressed[0] += bass;
   compressed[1] += bass;
 
diff @ 2016-05-14 22:14:22 +0100
diff --git a/src/go.c b/src/go.c
index 46204bc..c68c9fd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.1 * sin(twopi * b));
+  double bass = tanh(1.5 * sin(twopi * b));
   compressed[0] += bass;
   compressed[1] += bass;
 
diff @ 2016-05-14 22:15:01 +0100
diff --git a/src/go.c b/src/go.c
index c68c9fd..bcef77a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b));
+  double bass = tanh(1.5 * sin(twopi * b + sin(twopi * 128 * p) * sin(twopi * 2 * b)));
   compressed[0] += bass;
   compressed[1] += bass;
 
diff @ 2016-05-14 22:16:00 +0100
diff --git a/src/go.c b/src/go.c
index bcef77a..9d1ff3d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -22,6 +22,7 @@ typedef struct {
   PITCHSHIFT shift[4];
   COMPRESS compress[2];
   SO2ECHO echo[2];
+  SAMPHOLD bass[2];
 } S;
 
 // per sample DSP callback
@@ -62,8 +63,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
   double bass = tanh(1.5 * sin(twopi * b + sin(twopi * 128 * p) * sin(twopi * 2 * b)));
-  compressed[0] += bass;
-  compressed[1] += bass;
+  compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
+  compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:17:27 +0100
diff --git a/src/go.c b/src/go.c
index 9d1ff3d..a91799c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -23,6 +23,8 @@ typedef struct {
   COMPRESS compress[2];
   SO2ECHO echo[2];
   SAMPHOLD bass[2];
+  SAMPHOLD crunchsh;
+  PHASOR crunchph;
 } S;
 
 // per sample DSP callback
@@ -66,6 +68,12 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
+  double crunch = wrap(64 * p) < 0.125;
+  crunch *= noise();
+  crunch = samphold(&s->crunchsh, crunch, phasor(&s->crunchph, 1000));
+  compressed[0] += crunch;
+  compressed[1] += crunch;
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-05-14 22:17:52 +0100
diff --git a/src/go.c b/src/go.c
index a91799c..a4a7696 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double crunch = wrap(64 * p) < 0.125;
   crunch *= noise();
-  crunch = samphold(&s->crunchsh, crunch, phasor(&s->crunchph, 1000));
+  crunch = samphold(&s->crunchsh, crunch, phasor(&s->crunchph, 1500 + 500 * sin(twopi * 16 * p)));
   compressed[0] += crunch;
   compressed[1] += crunch;
 
diff @ 2016-05-14 22:18:24 +0100
diff --git a/src/go.c b/src/go.c
index a4a7696..17a6a55 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + sin(twopi * 128 * p) * sin(twopi * 2 * b)));
+  double bass = tanh(1.5 * sin(twopi * b + sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * 2 * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
@@ -74,6 +74,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
+
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-05-14 22:18:48 +0100
diff --git a/src/go.c b/src/go.c
index 17a6a55..b66837b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * 2 * b)));
+  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * 2 * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:19:13 +0100
diff --git a/src/go.c b/src/go.c
index b66837b..140b834 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * 2 * b)));
+  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:20:13 +0100
diff --git a/src/go.c b/src/go.c
index 140b834..8b0f58e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -25,6 +25,7 @@ typedef struct {
   SAMPHOLD bass[2];
   SAMPHOLD crunchsh;
   PHASOR crunchph;
+  BIQUAD hiss;
 } S;
 
 // per sample DSP callback
@@ -74,6 +75,13 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
+  double hiss = wrap(64 * p + 0.333) < 0.125;
+  hiss *= noise();
+  hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
+  compressed[0] += hiss;
+  compressed[1] += hiss;
+
+
 
 
   // compress mix down
diff @ 2016-05-14 22:20:19 +0100
diff --git a/src/go.c b/src/go.c
index 8b0f58e..066344f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,7 +75,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
-  double hiss = wrap(64 * p + 0.333) < 0.125;
+  double hiss = wrap(128 * p + 0.333) < 0.125;
   hiss *= noise();
   hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
   compressed[0] += hiss;
diff @ 2016-05-14 22:20:27 +0100
diff --git a/src/go.c b/src/go.c
index 066344f..29e0ada 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,7 +75,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
-  double hiss = wrap(128 * p + 0.333) < 0.125;
+  double hiss = wrap(32 * p + 0.333) < 0.125;
   hiss *= noise();
   hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
   compressed[0] += hiss;
diff @ 2016-05-14 22:20:31 +0100
diff --git a/src/go.c b/src/go.c
index 29e0ada..02c98ee 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,7 +75,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
-  double hiss = wrap(32 * p + 0.333) < 0.125;
+  double hiss = wrap(32 * p + 0.333) < 0.06225;
   hiss *= noise();
   hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
   compressed[0] += hiss;
diff @ 2016-05-14 22:21:20 +0100
diff --git a/src/go.c b/src/go.c
index 02c98ee..40e5eb3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,12 +75,22 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += crunch;
   compressed[1] += crunch;
 
-  double hiss = wrap(32 * p + 0.333) < 0.06225;
+  double hiss = wrap(32 * p + 0.333) < 0.0625;
   hiss *= noise();
   hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
   compressed[0] += hiss;
   compressed[1] += hiss;
 
+  double snare = 1 - wrap(64 * p + 0.5);
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= noise();
+  snare = tanh(5 * snare);
+  compressed[0] += snare;
+  compressed[1] += snare;
 
 
 
diff @ 2016-05-14 22:21:37 +0100
diff --git a/src/go.c b/src/go.c
index 40e5eb3..771cbff 100644
--- a/src/go.c
+++ b/src/go.c
@@ -55,7 +55,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1;
+  double gain = 1.5;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-05-14 22:21:47 +0100
diff --git a/src/go.c b/src/go.c
index 771cbff..a4ed3b7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:23:26 +0100
diff --git a/src/go.c b/src/go.c
index a4ed3b7..fe5942a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -26,6 +26,8 @@ typedef struct {
   SAMPHOLD crunchsh;
   PHASOR crunchph;
   BIQUAD hiss;
+  DELAY echo1;
+  float echo1buf[SR];
 } S;
 
 // per sample DSP callback
@@ -34,6 +36,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // trigger impulse on reload
   if (s->reloaded) {
     s->reloaded = 0;
+    s->echo1.length = SR;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
@@ -65,7 +68,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 3) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
@@ -92,6 +95,9 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
+  double echo1 = delread4(&s->echo1, 1000 / 60.0);
+  
+  delwrite(&s->echo1, sin(echo1 + snare));
 
 
   // compress mix down
diff @ 2016-05-14 22:23:39 +0100
diff --git a/src/go.c b/src/go.c
index fe5942a..2097405 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 256 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:23:43 +0100
diff --git a/src/go.c b/src/go.c
index 2097405..fe5942a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 256 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:24:01 +0100
diff --git a/src/go.c b/src/go.c
index fe5942a..59f493e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,7 +98,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / 60.0);
   
   delwrite(&s->echo1, sin(echo1 + snare));
-
+  compressed[0] += echo1;
+  compressed[1] += echo1;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:24:18 +0100
diff --git a/src/go.c b/src/go.c
index 59f493e..af1c244 100644
--- a/src/go.c
+++ b/src/go.c
@@ -95,7 +95,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / 60.0);
+  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p));
   
   delwrite(&s->echo1, sin(echo1 + snare));
   compressed[0] += echo1;
diff @ 2016-05-14 22:24:21 +0100
diff --git a/src/go.c b/src/go.c
index af1c244..1db8c73 100644
--- a/src/go.c
+++ b/src/go.c
@@ -95,7 +95,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p));
+  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   
   delwrite(&s->echo1, sin(echo1 + snare));
   compressed[0] += echo1;
diff @ 2016-05-14 22:25:04 +0100
diff --git a/src/go.c b/src/go.c
index 1db8c73..12bdf5a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -28,6 +28,8 @@ typedef struct {
   BIQUAD hiss;
   DELAY echo1;
   float echo1buf[SR];
+  DELAY echo2;
+  float echo2buf[SR];
 } S;
 
 // per sample DSP callback
@@ -37,6 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
   if (s->reloaded) {
     s->reloaded = 0;
     s->echo1.length = SR;
+    s->echo2.length = SR;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
@@ -96,10 +99,12 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += snare;
 
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, sin(echo1 + snare));
+  delwrite(&s->echo2, sin(echo2 + snare));
   compressed[0] += echo1;
-  compressed[1] += echo1;
+  compressed[1] += echo2;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:25:21 +0100
diff --git a/src/go.c b/src/go.c
index 12bdf5a..b40dde0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,8 +101,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(echo1 + snare));
-  delwrite(&s->echo2, sin(echo2 + snare));
+  delwrite(&s->echo1, sin(echo1 + snare - 0.1 * echo2));
+  delwrite(&s->echo2, sin(echo2 + snare - 0.1 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:25:26 +0100
diff --git a/src/go.c b/src/go.c
index b40dde0..8efe97c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,8 +101,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(echo1 + snare - 0.1 * echo2));
-  delwrite(&s->echo2, sin(echo2 + snare - 0.1 * echo1));
+  delwrite(&s->echo1, sin(echo1 + snare - 0.5 * echo2));
+  delwrite(&s->echo2, sin(echo2 + snare - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:25:33 +0100
diff --git a/src/go.c b/src/go.c
index 8efe97c..187ff75 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,8 +101,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(echo1 + snare - 0.5 * echo2));
-  delwrite(&s->echo2, sin(echo2 + snare - 0.5 * echo1));
+  delwrite(&s->echo1, sin(echo1 + snare + 0.5 * echo2));
+  delwrite(&s->echo2, sin(echo2 + snare + 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:25:46 +0100
diff --git a/src/go.c b/src/go.c
index 187ff75..b6a2d94 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,8 +101,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(echo1 + snare + 0.5 * echo2));
-  delwrite(&s->echo2, sin(echo2 + snare + 0.5 * echo1));
+  delwrite(&s->echo1, 0.9 * sin(echo1 + snare + 0.5 * echo2));
+  delwrite(&s->echo2, 0.9 * sin(echo2 + snare + 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:25:50 +0100
diff --git a/src/go.c b/src/go.c
index b6a2d94..39ca3da 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,7 +101,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, 0.9 * sin(echo1 + snare + 0.5 * echo2));
+  delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 + snare + 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
diff @ 2016-05-14 22:25:53 +0100
diff --git a/src/go.c b/src/go.c
index 39ca3da..88d728d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -102,7 +102,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
-  delwrite(&s->echo2, 0.9 * sin(echo2 + snare + 0.5 * echo1));
+  delwrite(&s->echo2, 0.9 * sin(echo2 - snare + 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:25:56 +0100
diff --git a/src/go.c b/src/go.c
index 88d728d..8a0612d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -102,7 +102,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
-  delwrite(&s->echo2, 0.9 * sin(echo2 - snare + 0.5 * echo1));
+  delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:26:12 +0100
diff --git a/src/go.c b/src/go.c
index 8a0612d..0780f16 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,8 +98,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (0.25 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (0.25 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
diff @ 2016-05-14 22:26:26 +0100
diff --git a/src/go.c b/src/go.c
index 0780f16..d3275f1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,8 +53,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 7.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -14.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-05-14 22:26:46 +0100
diff --git a/src/go.c b/src/go.c
index d3275f1..5b7c617 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,7 +71,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = tanh(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = sin(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:26:53 +0100
diff --git a/src/go.c b/src/go.c
index 5b7c617..6d389e9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,7 +71,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = sin(1.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = sin(2.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:26:59 +0100
diff --git a/src/go.c b/src/go.c
index 6d389e9..16af9dd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,7 +71,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
-  double bass = sin(2.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:27:18 +0100
diff --git a/src/go.c b/src/go.c
index 16af9dd..a52965a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,8 +98,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / (0.25 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (0.25 * 60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (0.01 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (0.01 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
diff @ 2016-05-14 22:27:25 +0100
diff --git a/src/go.c b/src/go.c
index a52965a..cace026 100644
--- a/src/go.c
+++ b/src/go.c
@@ -99,7 +99,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += snare;
 
   double echo1 = delread4(&s->echo1, 1000 / (0.01 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (0.01 * 60.0 + 5 * cos(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (0.1 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
diff @ 2016-05-14 22:27:31 +0100
diff --git a/src/go.c b/src/go.c
index cace026..d3c9f99 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,8 +98,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / (0.01 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (0.1 * 60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (1 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (1 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
diff @ 2016-05-14 22:28:27 +0100
diff --git a/src/go.c b/src/go.c
index d3c9f99..7d8070f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,6 +106,17 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += echo1;
   compressed[1] += echo2;
 
+  double kick = 1 - wrap(256 * p);
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= 12;
+  kick = sin(twopi * kick);
+  kick = 3 * tanh(3 * kick);
+  compressed[0] += kick;
+  compressed[1] += kicl;
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-05-14 22:28:28 +0100
diff --git a/src/go.c b/src/go.c
index 7d8070f..ce31405 100644
--- a/src/go.c
+++ b/src/go.c
@@ -115,7 +115,7 @@ int go(S *s, int channels, const float *in, float *out) {
   kick = sin(twopi * kick);
   kick = 3 * tanh(3 * kick);
   compressed[0] += kick;
-  compressed[1] += kicl;
+  compressed[1] += kick;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:29:00 +0100
diff --git a/src/go.c b/src/go.c
index ce31405..44b9377 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)));
+  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(64 * p) > 0.875 ? 2 : 1));
   double bass = sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:29:08 +0100
diff --git a/src/go.c b/src/go.c
index 44b9377..70d1051 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(64 * p) > 0.875 ? 2 : 1));
+  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.875 ? 2 : 1));
   double bass = sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:29:12 +0100
diff --git a/src/go.c b/src/go.c
index 70d1051..6de3104 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.875 ? 2 : 1));
+  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.75 ? 2 : 1));
   double bass = sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:29:26 +0100
diff --git a/src/go.c b/src/go.c
index 6de3104..1843659 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1.5;
+  double gain = 0;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-05-14 22:30:16 +0100
diff --git a/src/go.c b/src/go.c
index 1843659..c1106a9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -117,6 +117,11 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
+  int t = 100 * p * 60 * 256;
+  double bb = 0.5 * bytebeat( t );
+  compressed[0] += bb;
+  compressed[1] += bb;
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-05-14 22:30:42 +0100
diff --git a/src/go.c b/src/go.c
index c1106a9..b5efe10 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( t );
+  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 19) * t );
   compressed[0] += bb;
   compressed[1] += bb;
 
diff @ 2016-05-14 22:30:50 +0100
diff --git a/src/go.c b/src/go.c
index b5efe10..ec5f34f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 19) * t );
+  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 16) * t );
   compressed[0] += bb;
   compressed[1] += bb;
 
diff @ 2016-05-14 22:31:10 +0100
diff --git a/src/go.c b/src/go.c
index ec5f34f..c30ed22 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 16) * t );
+  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 16) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
 
diff @ 2016-05-14 22:31:31 +0100
diff --git a/src/go.c b/src/go.c
index c30ed22..5b9db26 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((13 * (t >> 10)) % 16) * t ) * (wrap(256 * p) > 0.5);
+  double bb = 0.5 * bytebeat( ((11 * (t >> 10)) % 16) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
 
diff @ 2016-05-14 22:31:47 +0100
diff --git a/src/go.c b/src/go.c
index 5b9db26..92b3603 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,8 +84,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double hiss = wrap(32 * p + 0.333) < 0.0625;
   hiss *= noise();
   hiss = biquad(highpass(&s->hiss, 2000, 3), hiss);
-  compressed[0] += hiss;
-  compressed[1] += hiss;
+  compressed[0] += 0*hiss;
+  compressed[1] += 0*hiss;
 
   double snare = 1 - wrap(64 * p + 0.5);
   snare *= snare;
diff @ 2016-05-14 22:32:00 +0100
diff --git a/src/go.c b/src/go.c
index 92b3603..f9fe250 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,15 +71,15 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.75 ? 2 : 1));
-  double bass = sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = 0*sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
   double crunch = wrap(64 * p) < 0.125;
   crunch *= noise();
   crunch = samphold(&s->crunchsh, crunch, phasor(&s->crunchph, 1500 + 500 * sin(twopi * 16 * p)));
-  compressed[0] += crunch;
-  compressed[1] += crunch;
+  compressed[0] += 0*crunch;
+  compressed[1] += 0*crunch;
 
   double hiss = wrap(32 * p + 0.333) < 0.0625;
   hiss *= noise();
diff @ 2016-05-14 22:32:27 +0100
diff --git a/src/go.c b/src/go.c
index f9fe250..69e00d6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,13 +98,6 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  double echo1 = delread4(&s->echo1, 1000 / (1 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (1 * 60.0 + 5 * cos(twopi * 16 * p)));
-  
-  delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
-  delwrite(&s->echo2, 0.9 * sin(echo2 - snare - 0.5 * echo1));
-  compressed[0] += echo1;
-  compressed[1] += echo2;
 
   double kick = 1 - wrap(256 * p);
   kick *= kick;
@@ -121,6 +114,13 @@ int go(S *s, int channels, const float *in, float *out) {
   double bb = 0.5 * bytebeat( ((11 * (t >> 10)) % 16) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
+  double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (2 * 60.0 + 5 * cos(twopi * 16 * p)));
+  
+  delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
+  delwrite(&s->echo2, 0.9 * sin(echo2 - bb - 0.5 * echo1));
+  compressed[0] += echo1;
+  compressed[1] += echo2;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-05-14 22:32:34 +0100
diff --git a/src/go.c b/src/go.c
index 69e00d6..303312c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -117,7 +117,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (2 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, 0.9 * sin(echo1 + 0.5 * echo2));
+  delwrite(&s->echo1, 0.9 * sin(echo1 + bb + 0.5 * echo2));
   delwrite(&s->echo2, 0.9 * sin(echo2 - bb - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
diff @ 2016-05-14 22:32:55 +0100
diff --git a/src/go.c b/src/go.c
index 303312c..bc6e846 100644
--- a/src/go.c
+++ b/src/go.c
@@ -117,8 +117,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (2 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, 0.9 * sin(echo1 + bb + 0.5 * echo2));
-  delwrite(&s->echo2, 0.9 * sin(echo2 - bb - 0.5 * echo1));
+  delwrite(&s->echo1, sin(1.2 * echo1 + bb + 0.5 * echo2));
+  delwrite(&s->echo2, sin(1.2 * echo2 - bb - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:33:10 +0100
diff --git a/src/go.c b/src/go.c
index bc6e846..edd87cf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -117,8 +117,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (2 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.2 * echo1 + bb + 0.5 * echo2));
-  delwrite(&s->echo2, sin(1.2 * echo2 - bb - 0.5 * echo1));
+  delwrite(&s->echo1, sin(1.25 * echo1 + bb + 0.75 * echo2));
+  delwrite(&s->echo2, sin(1.25 * echo2 - bb - 0.75 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:33:26 +0100
diff --git a/src/go.c b/src/go.c
index edd87cf..9caf893 100644
--- a/src/go.c
+++ b/src/go.c
@@ -87,8 +87,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += 0*hiss;
   compressed[1] += 0*hiss;
 
-  double snare = 1 - wrap(64 * p + 0.5);
-  snare *= snare;
+  double snare = 1 - wrap(128 * p + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-05-14 22:33:29 +0100
diff --git a/src/go.c b/src/go.c
index 9caf893..7f09211 100644
--- a/src/go.c
+++ b/src/go.c
@@ -93,7 +93,7 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= snare;
   snare *= snare;
   snare *= noise();
-  snare = tanh(5 * snare);
+  snare = 4 * tanh(5 * snare);
   compressed[0] += snare;
   compressed[1] += snare;
 
diff @ 2016-05-14 22:33:52 +0100
diff --git a/src/go.c b/src/go.c
index 7f09211..3754a77 100644
--- a/src/go.c
+++ b/src/go.c
@@ -30,6 +30,7 @@ typedef struct {
   float echo1buf[SR];
   DELAY echo2;
   float echo2buf[SR];
+  double tempo;
 } S;
 
 // per sample DSP callback
@@ -40,11 +41,12 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     s->echo1.length = SR;
     s->echo2.length = SR;
+    s->tempo = 0.01;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.01);
+  double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
diff @ 2016-05-14 22:34:05 +0100
diff --git a/src/go.c b/src/go.c
index 3754a77..da10c4a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -112,7 +112,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((11 * (t >> 10)) % 16) * t ) * (wrap(256 * p) > 0.5);
+  double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 16) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
   double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
diff @ 2016-05-14 22:34:12 +0100
diff --git a/src/go.c b/src/go.c
index da10c4a..27dc076 100644
--- a/src/go.c
+++ b/src/go.c
@@ -112,7 +112,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 16) * t ) * (wrap(256 * p) > 0.5);
+  double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
   double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
diff @ 2016-05-14 22:34:27 +0100
diff --git a/src/go.c b/src/go.c
index 27dc076..676469d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,7 +73,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.75 ? 2 : 1));
-  double bass = 0*sin(3.5 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = sin(3 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:34:40 +0100
diff --git a/src/go.c b/src/go.c
index 676469d..09ac27d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * wrap(32 * p)) * (wrap(128 * p) > 0.75 ? 2 : 1));
+  double b = wrap(wrap(100 * p) * (60 - 10 * (wrap(32 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
   double bass = sin(3 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:34:58 +0100
diff --git a/src/go.c b/src/go.c
index 09ac27d..5654c99 100644
--- a/src/go.c
+++ b/src/go.c
@@ -115,8 +115,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
-  double echo1 = delread4(&s->echo1, 1000 / (2 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (2 * 60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, sin(1.25 * echo1 + bb + 0.75 * echo2));
   delwrite(&s->echo2, sin(1.25 * echo2 - bb - 0.75 * echo1));
diff @ 2016-05-14 22:35:06 +0100
diff --git a/src/go.c b/src/go.c
index 5654c99..f1a791e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -115,8 +115,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
-  double echo1 = delread4(&s->echo1, 1000 / (60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (0.25 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (0.25 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, sin(1.25 * echo1 + bb + 0.75 * echo2));
   delwrite(&s->echo2, sin(1.25 * echo2 - bb - 0.75 * echo1));
diff @ 2016-05-14 22:35:18 +0100
diff --git a/src/go.c b/src/go.c
index f1a791e..f5c806f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -41,11 +41,12 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     s->echo1.length = SR;
     s->echo2.length = SR;
-    s->tempo = 0.01;
+    //s->tempo = 0.01;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
+  s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2016-05-14 22:35:24 +0100
diff --git a/src/go.c b/src/go.c
index f5c806f..bc38d5b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -46,7 +46,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  s->tempo *= 0.999999;
+  //s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2016-05-14 22:35:36 +0100
diff --git a/src/go.c b/src/go.c
index bc38d5b..6a33838 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,7 +73,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 - 10 * (wrap(32 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
+  double b = wrap(wrap(100 * p) * (60 + 60 * (wrap(32 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
   double bass = sin(3 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:35:46 +0100
diff --git a/src/go.c b/src/go.c
index 6a33838..0cf856c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,7 +73,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 160, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double b = wrap(wrap(100 * p) * (60 + 60 * (wrap(32 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
+  double b = wrap(wrap(100 * p) * (60 + 60 * (wrap(128 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
   double bass = sin(3 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
diff @ 2016-05-14 22:36:02 +0100
diff --git a/src/go.c b/src/go.c
index 0cf856c..0220877 100644
--- a/src/go.c
+++ b/src/go.c
@@ -116,8 +116,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
-  double echo1 = delread4(&s->echo1, 1000 / (0.25 * 60.0 + 5 * sin(twopi * 16 * p)));
-  double echo2 = delread4(&s->echo2, 1000 / (0.25 * 60.0 + 5 * cos(twopi * 16 * p)));
+  double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
+  double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
   delwrite(&s->echo1, sin(1.25 * echo1 + bb + 0.75 * echo2));
   delwrite(&s->echo2, sin(1.25 * echo2 - bb - 0.75 * echo1));
diff @ 2016-05-14 22:36:20 +0100
diff --git a/src/go.c b/src/go.c
index 0220877..0252148 100644
--- a/src/go.c
+++ b/src/go.c
@@ -74,7 +74,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 + 60 * (wrap(128 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
-  double bass = sin(3 * sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = sin(sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:36:36 +0100
diff --git a/src/go.c b/src/go.c
index 0252148..5b46cd4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -46,7 +46,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  //s->tempo *= 0.999999;
+  s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2016-05-14 22:36:45 +0100
diff --git a/src/go.c b/src/go.c
index 5b46cd4..0b549fb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,7 +101,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += snare;
 
 
-  double kick = 1 - wrap(256 * p);
+  double kick = 1 - wrap(512 * p);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-05-14 22:36:52 +0100
diff --git a/src/go.c b/src/go.c
index 0b549fb..dfa4aad 100644
--- a/src/go.c
+++ b/src/go.c
@@ -46,7 +46,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  s->tempo *= 0.999999;
+  //s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2016-05-14 22:37:09 +0100
diff --git a/src/go.c b/src/go.c
index dfa4aad..aa2dc00 100644
--- a/src/go.c
+++ b/src/go.c
@@ -95,8 +95,9 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= snare;
   snare *= snare;
   snare *= snare;
+  snare *= snare;
   snare *= noise();
-  snare = 4 * tanh(5 * snare);
+  snare = tanh(5 * snare);
   compressed[0] += snare;
   compressed[1] += snare;
 
diff @ 2016-05-14 22:37:24 +0100
diff --git a/src/go.c b/src/go.c
index aa2dc00..7d2e6f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -114,7 +114,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
-  double bb = 0.5 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
+  double bb = 0 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
   compressed[0] += bb;
   compressed[1] += bb;
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
diff @ 2016-05-14 22:37:31 +0100
diff --git a/src/go.c b/src/go.c
index 7d2e6f0..c81c6b3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -74,7 +74,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double b = wrap(wrap(100 * p) * (60 + 60 * (wrap(128 * p) < 0.5)) * (wrap(128 * p) > 0.75 ? 2 : 1));
-  double bass = sin(sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
+  double bass = 0*sin(sin(twopi * b + (wrap(32 * p) < 0.75 ? 2 : 4) * sin(twopi * (wrap(32 * p) < 0.75 ? 128 : 64 * 5) * p) * sin(twopi * (wrap(16 * p) < 0.75 ? 2 : 4) * b)));
   compressed[0] += samphold(&s->bass[0], bass, wrap(30 * b));
   compressed[1] += samphold(&s->bass[1], bass, wrap(30 * b + 0.5));
 
diff @ 2016-05-14 22:38:03 +0100
diff --git a/src/go.c b/src/go.c
index c81c6b3..b8f6329 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,8 +110,8 @@ int go(S *s, int channels, const float *in, float *out) {
   kick *= 12;
   kick = sin(twopi * kick);
   kick = 3 * tanh(3 * kick);
-  compressed[0] += kick;
-  compressed[1] += kick;
+  //compressed[0] += kick;
+  //compressed[1] += kick;
 
   int t = 100 * p * 60 * 256;
   double bb = 0 * bytebeat( ((11 * (t >> 9)) % 19) * t ) * (wrap(256 * p) > 0.5);
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.25 * echo1 + bb + 0.75 * echo2));
-  delwrite(&s->echo2, sin(1.25 * echo2 - bb - 0.75 * echo1));
+  delwrite(&s->echo1, sin(1.25 * echo1 + 0.75 * echo2));
+  delwrite(&s->echo2, sin(1.25 * echo2 - 0.75 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:09 +0100
diff --git a/src/go.c b/src/go.c
index b8f6329..6812cb0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.25 * echo1 + 0.75 * echo2));
-  delwrite(&s->echo2, sin(1.25 * echo2 - 0.75 * echo1));
+  delwrite(&s->echo1, sin(1.2 * echo1 + 0.75 * echo2));
+  delwrite(&s->echo2, sin(1.2 * echo2 - 0.75 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:14 +0100
diff --git a/src/go.c b/src/go.c
index 6812cb0..c14f8a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.2 * echo1 + 0.75 * echo2));
-  delwrite(&s->echo2, sin(1.2 * echo2 - 0.75 * echo1));
+  delwrite(&s->echo1, sin(1.1 * echo1 + 0.75 * echo2));
+  delwrite(&s->echo2, sin(1.1 * echo2 - 0.75 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:22 +0100
diff --git a/src/go.c b/src/go.c
index c14f8a6..f8428b5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.1 * echo1 + 0.75 * echo2));
-  delwrite(&s->echo2, sin(1.1 * echo2 - 0.75 * echo1));
+  delwrite(&s->echo1, sin(1.1 * echo1 + 0.7 * echo2));
+  delwrite(&s->echo2, sin(1.1 * echo2 - 0.7 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:29 +0100
diff --git a/src/go.c b/src/go.c
index f8428b5..83a5e27 100644
--- a/src/go.c
+++ b/src/go.c
@@ -97,7 +97,7 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= snare;
   snare *= snare;
   snare *= noise();
-  snare = tanh(5 * snare);
+  snare = 0*tanh(5 * snare);
   compressed[0] += snare;
   compressed[1] += snare;
 
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.1 * echo1 + 0.7 * echo2));
-  delwrite(&s->echo2, sin(1.1 * echo2 - 0.7 * echo1));
+  delwrite(&s->echo1, sin(1.1 * echo1 + 0.5 * echo2));
+  delwrite(&s->echo2, sin(1.1 * echo2 - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:33 +0100
diff --git a/src/go.c b/src/go.c
index 83a5e27..a71ee65 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1.1 * echo1 + 0.5 * echo2));
-  delwrite(&s->echo2, sin(1.1 * echo2 - 0.5 * echo1));
+  delwrite(&s->echo1, sin(1 * echo1 + 0.5 * echo2));
+  delwrite(&s->echo2, sin(1 * echo2 - 0.5 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:40 +0100
diff --git a/src/go.c b/src/go.c
index a71ee65..27d1de4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1 * echo1 + 0.5 * echo2));
-  delwrite(&s->echo2, sin(1 * echo2 - 0.5 * echo1));
+  delwrite(&s->echo1, sin(1 * echo1 + 0.45 * echo2));
+  delwrite(&s->echo2, sin(1 * echo2 - 0.45 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:38:46 +0100
diff --git a/src/go.c b/src/go.c
index 27d1de4..70fa155 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1 * echo1 + 0.45 * echo2));
-  delwrite(&s->echo2, sin(1 * echo2 - 0.45 * echo1));
+  delwrite(&s->echo1, sin(1 * echo1 + 0.3 * echo2));
+  delwrite(&s->echo2, sin(1 * echo2 - 0.3 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 
diff @ 2016-05-14 22:39:00 +0100
diff --git a/src/go.c b/src/go.c
index 70fa155..4f2b99b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,8 +120,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double echo1 = delread4(&s->echo1, 1000 / (0.125 * 60.0 + 5 * sin(twopi * 16 * p)));
   double echo2 = delread4(&s->echo2, 1000 / (0.125 * 60.0 + 5 * cos(twopi * 16 * p)));
   
-  delwrite(&s->echo1, sin(1 * echo1 + 0.3 * echo2));
-  delwrite(&s->echo2, sin(1 * echo2 - 0.3 * echo1));
+  delwrite(&s->echo1, sin(0.75 * echo1 + 0.3 * echo2));
+  delwrite(&s->echo2, sin(0.75 * echo2 - 0.3 * echo1));
   compressed[0] += echo1;
   compressed[1] += echo2;
 

the end