session-2017-02-25-180054

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 @ 2017-02-25 18:01:24 +0000
diff --git a/src/go.c b/src/go.c
index 2ea76dd6..15659852 100644
--- a/src/go.c
+++ b/src/go.c
@@ -143,7 +143,7 @@ int go(S *s, int channels, const float *in, float *out) {
   int trigger = 0;
   if (s->reloaded) {
     s->reloaded = 0;
-    trigger = 1;
+    //trigger = 1;
   }
   double mixdown[2] = { 0, 0 };
 
diff @ 2017-02-25 18:01:50 +0000
diff --git a/src/go.c b/src/go.c
index 15659852..085bd0a0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.1, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, 0, down);
     feedback[c] = feedback[c] + down + up;
   }
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1;
+  double volume = 1.1;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:01:55 +0000
diff --git a/src/go.c b/src/go.c
index 085bd0a0..5abc73de 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.1;
+  double volume = 1.2;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:02:01 +0000
diff --git a/src/go.c b/src/go.c
index 5abc73de..c54d221e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.2;
+  double volume = 1.4;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:02:08 +0000
diff --git a/src/go.c b/src/go.c
index c54d221e..16adc15d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.4;
+  double volume = 1.5;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:02:25 +0000
diff --git a/src/go.c b/src/go.c
index 16adc15d..41a18684 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.5;
+  double volume = 1.6;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:02:35 +0000
diff --git a/src/go.c b/src/go.c
index 41a18684..8750034c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.1, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, 0, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:02:42 +0000
diff --git a/src/go.c b/src/go.c
index 8750034c..71560371 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, 0, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:03:01 +0000
diff --git a/src/go.c b/src/go.c
index 71560371..498f5a91 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, 0, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:03:27 +0000
diff --git a/src/go.c b/src/go.c
index 498f5a91..61d0cda6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.4, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:03:47 +0000
diff --git a/src/go.c b/src/go.c
index 61d0cda6..185da53f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.6;
+  double volume = 1.2;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:03:51 +0000
diff --git a/src/go.c b/src/go.c
index 185da53f..bdbddb22 100644
--- a/src/go.c
+++ b/src/go.c
@@ -152,7 +152,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.2;
+  double volume = 1;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:04:08 +0000
diff --git a/src/go.c b/src/go.c
index bdbddb22..47b57172 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.4, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:04:12 +0000
diff --git a/src/go.c b/src/go.c
index 47b57172..6570556b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.4, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:04:22 +0000
diff --git a/src/go.c b/src/go.c
index 6570556b..47b57172 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.4, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:04:26 +0000
diff --git a/src/go.c b/src/go.c
index 47b57172..cb91a4d1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.3, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.2, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:04:40 +0000
diff --git a/src/go.c b/src/go.c
index cb91a4d1..b0714b56 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 500, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 750, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:04:50 +0000
diff --git a/src/go.c b/src/go.c
index b0714b56..fb61dfb2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 750, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:05:04 +0000
diff --git a/src/go.c b/src/go.c
index fb61dfb2..be3bfb46 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.2, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.4, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:05:15 +0000
diff --git a/src/go.c b/src/go.c
index be3bfb46..5630b9b6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.4, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.5, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:05:58 +0000
diff --git a/src/go.c b/src/go.c
index 5630b9b6..09893058 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.7, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.5, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:06:06 +0000
diff --git a/src/go.c b/src/go.c
index 09893058..449720d1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,8 +53,8 @@ static inline void so2echo(SO2ECHO *s, double hiphz, double lophz, double x) {
 static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
-  double p = phasor(&so2->phase, 0.001);
-  double modulation = 100 * cos(twopi * p);
+  double p = phasor(&so2->phase, 0.01);
+  double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
     , delread4(&so2->echo[0].del, 200 + modulation)
diff @ 2017-02-25 18:06:15 +0000
diff --git a/src/go.c b/src/go.c
index 449720d1..d3eaf590 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.7, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.8, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.5, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:06:32 +0000
diff --git a/src/go.c b/src/go.c
index d3eaf590..ea5ebe99 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.8, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.5, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:06:41 +0000
diff --git a/src/go.c b/src/go.c
index ea5ebe99..1efc4960 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -0.5, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.0, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:07:01 +0000
diff --git a/src/go.c b/src/go.c
index 1efc4960..f76fc14e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.1, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.0, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:07:09 +0000
diff --git a/src/go.c b/src/go.c
index f76fc14e..9e6fc32f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.1, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.0, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.2, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:07:23 +0000
diff --git a/src/go.c b/src/go.c
index 9e6fc32f..96820171 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.1, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.2, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2017-02-25 18:07:30 +0000
diff --git a/src/go.c b/src/go.c
index 96820171..762ac6f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.2, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.5, down);
     feedback[c] = feedback[c] + down + up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:07:55 +0000
diff --git a/src/go.c b/src/go.c
index 762ac6f0..8071150e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.5, down);
-    feedback[c] = feedback[c] + down + up;
+    feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:08:07 +0000
diff --git a/src/go.c b/src/go.c
index 8071150e..01b3d974 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.7, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.5, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:08:14 +0000
diff --git a/src/go.c b/src/go.c
index 01b3d974..a490f879 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.7, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.5, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.7, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:08:32 +0000
diff --git a/src/go.c b/src/go.c
index a490f879..0425256e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.7, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.8, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:08:47 +0000
diff --git a/src/go.c b/src/go.c
index 0425256e..3c042712 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.8, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.9, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:08:58 +0000
diff --git a/src/go.c b/src/go.c
index 3c042712..b58bc5c3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 1.9, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:09:10 +0000
diff --git a/src/go.c b/src/go.c
index b58bc5c3..1a6a3cea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 1500, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:09:22 +0000
diff --git a/src/go.c b/src/go.c
index 1a6a3cea..efa7ade5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -1.7, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:09:42 +0000
diff --git a/src/go.c b/src/go.c
index efa7ade5..2af511ac 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 1500, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 2000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:10:04 +0000
diff --git a/src/go.c b/src/go.c
index 2af511ac..ecf35641 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.1, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:10:29 +0000
diff --git a/src/go.c b/src/go.c
index ecf35641..5ed17741 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.1, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:10:36 +0000
diff --git a/src/go.c b/src/go.c
index 5ed17741..052e07b4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.1, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.2, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:10:51 +0000
diff --git a/src/go.c b/src/go.c
index 052e07b4..015146ca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.2, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.2, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:11:00 +0000
diff --git a/src/go.c b/src/go.c
index 015146ca..d41de3ed 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.2, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.2, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:11:20 +0000
diff --git a/src/go.c b/src/go.c
index d41de3ed..caa2eca0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.2, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.4, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:11:28 +0000
diff --git a/src/go.c b/src/go.c
index caa2eca0..dad4182a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.4, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.5, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:11:43 +0000
diff --git a/src/go.c b/src/go.c
index dad4182a..cf7ad06a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.5, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.6, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:11:57 +0000
diff --git a/src/go.c b/src/go.c
index cf7ad06a..6bdcfb71 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.6, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.7, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:12:14 +0000
diff --git a/src/go.c b/src/go.c
index 6bdcfb71..733ca943 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.7, feedback[c]);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.4, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:12:25 +0000
diff --git a/src/go.c b/src/go.c
index 733ca943..fd053a7f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.7, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
   }
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 2000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 3000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:12:38 +0000
diff --git a/src/go.c b/src/go.c
index fd053a7f..8539de69 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, feedback[c]);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.9, feedback[c]);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:13:17 +0000
diff --git a/src/go.c b/src/go.c
index 8539de69..442b8586 100644
--- a/src/go.c
+++ b/src/go.c
@@ -42,6 +42,7 @@ typedef struct {
   PNK part2;
   FLY part3;
   // add data here
+  BIQUAD lop[2];
 
 } S;
 
@@ -60,7 +61,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.9, feedback[c]);
+    double in = feedback[c];
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:13:54 +0000
diff --git a/src/go.c b/src/go.c
index 442b8586..ca31e5ce 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = feedback[c];
+    double in = biquad(lowpass(&s->lop[c], 200, flatq), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
diff @ 2017-02-25 18:14:00 +0000
diff --git a/src/go.c b/src/go.c
index ca31e5ce..28cd031b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 1), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
diff @ 2017-02-25 18:14:06 +0000
diff --git a/src/go.c b/src/go.c
index 28cd031b..e99c807d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 1), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 2.8, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
     feedback[c] = feedback[c] + down - up;
   }
diff @ 2017-02-25 18:14:12 +0000
diff --git a/src/go.c b/src/go.c
index e99c807d..02e6b4fc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 1), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.7, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.9, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:14:17 +0000
diff --git a/src/go.c b/src/go.c
index 02e6b4fc..41c8b308 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 1), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 2), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.9, down);
     feedback[c] = feedback[c] + down - up;
diff @ 2017-02-25 18:14:26 +0000
diff --git a/src/go.c b/src/go.c
index 41c8b308..a7ab9ea4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 2), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 3), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.9, down);
     feedback[c] = feedback[c] + down - up;
diff @ 2017-02-25 18:14:30 +0000
diff --git a/src/go.c b/src/go.c
index a7ab9ea4..b862e13c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 3), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 4), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.9, down);
     feedback[c] = feedback[c] + down - up;
diff @ 2017-02-25 18:14:36 +0000
diff --git a/src/go.c b/src/go.c
index b862e13c..f0d5f8de 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 4), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -2.9, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = feedback[c] + down - up;
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:14:51 +0000
diff --git a/src/go.c b/src/go.c
index f0d5f8de..50cb733c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,10 +61,10 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 4), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 5), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = feedback[c] + down - up;
+    feedback[c] = sin(feedback[c] + down - up);
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:15:02 +0000
diff --git a/src/go.c b/src/go.c
index 50cb733c..49d8308f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 5), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 6), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(feedback[c] + down - up);
diff @ 2017-02-25 18:15:07 +0000
diff --git a/src/go.c b/src/go.c
index 49d8308f..0e8afb7d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 6), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 8), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(feedback[c] + down - up);
diff @ 2017-02-25 18:15:10 +0000
diff --git a/src/go.c b/src/go.c
index 0e8afb7d..96aa5a69 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 8), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 9), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(feedback[c] + down - up);
diff @ 2017-02-25 18:15:12 +0000
diff --git a/src/go.c b/src/go.c
index 96aa5a69..d478661f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 9), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(feedback[c] + down - up);
diff @ 2017-02-25 18:15:37 +0000
diff --git a/src/go.c b/src/go.c
index d478661f..52924382 100644
--- a/src/go.c
+++ b/src/go.c
@@ -154,7 +154,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1;
+  double volume = 1.1;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:15:44 +0000
diff --git a/src/go.c b/src/go.c
index 52924382..cd8c1fe4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -154,7 +154,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.1;
+  double volume = 1.2;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:15:46 +0000
diff --git a/src/go.c b/src/go.c
index cd8c1fe4..78f049e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -154,7 +154,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.2;
+  double volume = 1.3;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:15:49 +0000
diff --git a/src/go.c b/src/go.c
index 78f049e7..86ecc414 100644
--- a/src/go.c
+++ b/src/go.c
@@ -154,7 +154,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.3;
+  double volume = 1.4;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:15:56 +0000
diff --git a/src/go.c b/src/go.c
index 86ecc414..299add54 100644
--- a/src/go.c
+++ b/src/go.c
@@ -154,7 +154,7 @@ int go(S *s, int channels, const float *in, float *out) {
   part3(s, mixdown);
 
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1.4;
+  double volume = 1.5;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c) {
diff @ 2017-02-25 18:16:11 +0000
diff --git a/src/go.c b/src/go.c
index 299add54..4dd0ca10 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.1, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(feedback[c] + down - up);
   }
diff @ 2017-02-25 18:16:24 +0000
diff --git a/src/go.c b/src/go.c
index 4dd0ca10..ad40d4c0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.1, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(feedback[c] + down - up);
+    feedback[c] = sin(1.1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:16:31 +0000
diff --git a/src/go.c b/src/go.c
index ad40d4c0..4850a575 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.1, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.2, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.1 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:16:41 +0000
diff --git a/src/go.c b/src/go.c
index 4850a575..7b2d1e94 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.2, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.3, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.1 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:16:48 +0000
diff --git a/src/go.c b/src/go.c
index 7b2d1e94..2f12bb11 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.3, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.1 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:16:54 +0000
diff --git a/src/go.c b/src/go.c
index 2f12bb11..38913517 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.1 * (feedback[c] + down - up));
+    feedback[c] = sin(1.2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:16:58 +0000
diff --git a/src/go.c b/src/go.c
index 38913517..f4975c8e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.2 * (feedback[c] + down - up));
+    feedback[c] = sin(1.3 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:02 +0000
diff --git a/src/go.c b/src/go.c
index f4975c8e..814db021 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.3 * (feedback[c] + down - up));
+    feedback[c] = sin(1.4 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:07 +0000
diff --git a/src/go.c b/src/go.c
index 814db021..eafbe88b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.4 * (feedback[c] + down - up));
+    feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:13 +0000
diff --git a/src/go.c b/src/go.c
index eafbe88b..2e76729f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.4, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.5, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:17:20 +0000
diff --git a/src/go.c b/src/go.c
index 2e76729f..26f7acc0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.5, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.6, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:17:25 +0000
diff --git a/src/go.c b/src/go.c
index 26f7acc0..dc8a8591 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.6, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.7, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:17:31 +0000
diff --git a/src/go.c b/src/go.c
index dc8a8591..f5ec27b2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.7, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.9, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:17:36 +0000
diff --git a/src/go.c b/src/go.c
index f5ec27b2..ec0ff200 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 3.9, in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
     feedback[c] = sin(1.5 * (feedback[c] + down - up));
   }
diff @ 2017-02-25 18:17:44 +0000
diff --git a/src/go.c b/src/go.c
index ec0ff200..9d094e2b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.5 * (feedback[c] + down - up));
+    feedback[c] = sin(1.6 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:49 +0000
diff --git a/src/go.c b/src/go.c
index 9d094e2b..37bfb126 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.6 * (feedback[c] + down - up));
+    feedback[c] = sin(1.7 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:54 +0000
diff --git a/src/go.c b/src/go.c
index 37bfb126..1af10f5b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.7 * (feedback[c] + down - up));
+    feedback[c] = sin(1.8 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:17:58 +0000
diff --git a/src/go.c b/src/go.c
index 1af10f5b..6346ab01 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.8 * (feedback[c] + down - up));
+    feedback[c] = sin(1.9 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:18:04 +0000
diff --git a/src/go.c b/src/go.c
index 6346ab01..220703df 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
-    feedback[c] = sin(1.9 * (feedback[c] + down - up));
+    feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:18:13 +0000
diff --git a/src/go.c b/src/go.c
index 220703df..9e41c4c5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -3, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:18:32 +0000
diff --git a/src/go.c b/src/go.c
index 9e41c4c5..e1db64ca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 10), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 5), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:18:37 +0000
diff --git a/src/go.c b/src/go.c
index e1db64ca..05f02c0e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 5), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 15), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:18:41 +0000
diff --git a/src/go.c b/src/go.c
index 05f02c0e..f67ea2e2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 15), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:19:21 +0000
diff --git a/src/go.c b/src/go.c
index f67ea2e2..8387ca32 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,6 +43,7 @@ typedef struct {
   FLY part3;
   // add data here
   BIQUAD lop[2];
+  BIQUAD hip[2];
 
 } S;
 
@@ -62,6 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100, flatq + 12), feedback[c]);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:19:42 +0000
diff --git a/src/go.c b/src/go.c
index 8387ca32..af7e00f4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100, flatq + 12), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:19:58 +0000
diff --git a/src/go.c b/src/go.c
index af7e00f4..04397f34 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,8 +64,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 4, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -4, down);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 5, in);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -5, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:20:04 +0000
diff --git a/src/go.c b/src/go.c
index 04397f34..b159861f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,8 +64,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 5, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -5, down);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 6, in);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -6, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:20:19 +0000
diff --git a/src/go.c b/src/go.c
index b159861f..1da8cc07 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,8 +64,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 6, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -6, down);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:20:35 +0000
diff --git a/src/go.c b/src/go.c
index 1da8cc07..bd2eda0b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,7 +65,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -19, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:20:49 +0000
diff --git a/src/go.c b/src/go.c
index bd2eda0b..74446cbd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,7 +65,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -19, down);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:20:56 +0000
diff --git a/src/go.c b/src/go.c
index 74446cbd..b231bad3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100, flatq + 12), in);
+          in = biquad(highpass(&s->hip[c], 50, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = sin(2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:21:15 +0000
diff --git a/src/go.c b/src/go.c
index b231bad3..2b6cdd79 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 12), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 200, flatq + 20), feedback[c]);
           in = biquad(highpass(&s->hip[c], 50, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
diff @ 2017-02-25 18:21:31 +0000
diff --git a/src/go.c b/src/go.c
index 2b6cdd79..24780c94 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 50, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
-    feedback[c] = sin(2 * (feedback[c] + down - up));
+    feedback[c] = sin(2.1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:21:39 +0000
diff --git a/src/go.c b/src/go.c
index 24780c94..ac663aa0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 50, flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
-    feedback[c] = sin(2.1 * (feedback[c] + down - up));
+    feedback[c] = sin(2.2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:22:26 +0000
diff --git a/src/go.c b/src/go.c
index ac663aa0..135c9277 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,8 +62,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200, flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 50, flatq + 12), in);
+    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, sin(4 * twopi * p)), flatq + 20), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 50  * pow(2, sin(4 * twopi * p)), flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = sin(2.2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:22:39 +0000
diff --git a/src/go.c b/src/go.c
index 135c9277..912487f5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,8 +62,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, sin(4 * twopi * p)), flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 50  * pow(2, sin(4 * twopi * p)), flatq + 12), in);
+    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, sin(twopi * p)), flatq + 20), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 50  * pow(2, sin(twopi * p)), flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = sin(2.2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:23:04 +0000
diff --git a/src/go.c b/src/go.c
index 912487f5..23db104f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,8 +62,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, sin(twopi * p)), flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 50  * pow(2, sin(twopi * p)), flatq + 12), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, sin(twopi * p)), flatq + 20), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100  * pow(2, sin(twopi * p)), flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = sin(2.2 * (feedback[c] + down - up));
diff @ 2017-02-25 18:24:02 +0000
diff --git a/src/go.c b/src/go.c
index 23db104f..7ea59380 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,6 +56,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
+  double t = 12 * (wrap(4 * p) > 0.5);
+  
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
@@ -63,9 +65,9 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 400 * pow(2, sin(twopi * p)), flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100  * pow(2, sin(twopi * p)), flatq + 12), in);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -24, down);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, sin(twopi * p)), flatq + 12), in);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12 + t, in);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12 - t, down);
     feedback[c] = sin(2.2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:24:22 +0000
diff --git a/src/go.c b/src/go.c
index 7ea59380..199185ba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
-  double t = 12 * (wrap(4 * p) > 0.5);
+  double t = 12 * (wrap(2 * p) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:24:35 +0000
diff --git a/src/go.c b/src/go.c
index 199185ba..978bc9c0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
-  double t = 12 * (wrap(2 * p) > 0.5);
+  double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:25:04 +0000
diff --git a/src/go.c b/src/go.c
index 978bc9c0..d99e8a67 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
-  double t = 12 * (wrap(2 * p - 0.5) > 0.5);
+  double t = 12 * (wrap(p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:25:25 +0000
diff --git a/src/go.c b/src/go.c
index d99e8a67..978bc9c0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
-  double t = 12 * (wrap(p - 0.5) > 0.5);
+  double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:25:49 +0000
diff --git a/src/go.c b/src/go.c
index 978bc9c0..f157e86c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,6 +57,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
+  t -= 7 * (wrap(4 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:26:08 +0000
diff --git a/src/go.c b/src/go.c
index f157e86c..240fba6d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -58,6 +58,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double p = phasor(&so2->phase, 0.01);
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   t -= 7 * (wrap(4 * p - 0.5) > 0.5);
+  t += 3 * (wrap(8 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:26:39 +0000
diff --git a/src/go.c b/src/go.c
index 240fba6d..4dcc2ef2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, sin(twopi * p)), flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12 + t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12 - t, down);
-    feedback[c] = sin(2.2 * (feedback[c] + down - up));
+    feedback[c] = sin(1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:26:58 +0000
diff --git a/src/go.c b/src/go.c
index 4dcc2ef2..bc5975da 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, sin(twopi * p)), flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, sin(twopi * p)), flatq + 12), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 20), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 12), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12 + t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12 - t, down);
     feedback[c] = sin(1 * (feedback[c] + down - up));
diff @ 2017-02-25 18:27:22 +0000
diff --git a/src/go.c b/src/go.c
index bc5975da..aa68eeee 100644
--- a/src/go.c
+++ b/src/go.c
@@ -59,6 +59,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   t -= 7 * (wrap(4 * p - 0.5) > 0.5);
   t += 3 * (wrap(8 * p - 0.5) > 0.5);
+  t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:27:42 +0000
diff --git a/src/go.c b/src/go.c
index aa68eeee..d0e1fe21 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,6 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 7 * (wrap(4 * p - 0.5) > 0.5);
   t += 3 * (wrap(8 * p - 0.5) > 0.5);
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
+  t += 1 * (wrap(32 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:27:59 +0000
diff --git a/src/go.c b/src/go.c
index d0e1fe21..b3717641 100644
--- a/src/go.c
+++ b/src/go.c
@@ -60,7 +60,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 7 * (wrap(4 * p - 0.5) > 0.5);
   t += 3 * (wrap(8 * p - 0.5) > 0.5);
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
-  t += 1 * (wrap(32 * p - 0.5) > 0.5);
+  t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
diff @ 2017-02-25 18:28:32 +0000
diff --git a/src/go.c b/src/go.c
index b3717641..8389efc5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,8 +70,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 20), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 12), in);
-    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, 12 + t, in);
-    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -12 - t, down);
+    double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
+    double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = sin(1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
diff @ 2017-02-25 18:28:44 +0000
diff --git a/src/go.c b/src/go.c
index 8389efc5..3a3d27d5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -69,7 +69,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 20), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 12), in);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = sin(1 * (feedback[c] + down - up));
diff @ 2017-02-25 18:28:48 +0000
diff --git a/src/go.c b/src/go.c
index 3a3d27d5..8f4ffc26 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 20), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 1), feedback[c]);
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:28:58 +0000
diff --git a/src/go.c b/src/go.c
index 8f4ffc26..8bdc370e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = sin(1 * (feedback[c] + down - up));
+    feedback[c] = tanh(1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:29:06 +0000
diff --git a/src/go.c b/src/go.c
index 8bdc370e..12ee380d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = tanh(1 * (feedback[c] + down - up));
+    feedback[c] = tanh(1.1 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:29:07 +0000
diff --git a/src/go.c b/src/go.c
index 12ee380d..50515744 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = tanh(1.1 * (feedback[c] + down - up));
+    feedback[c] = tanh(1.2 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:29:09 +0000
diff --git a/src/go.c b/src/go.c
index 50515744..ea88e75c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = tanh(1.2 * (feedback[c] + down - up));
+    feedback[c] = tanh(1.3 * (feedback[c] + down - up));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:29:31 +0000
diff --git a/src/go.c b/src/go.c
index ea88e75c..a081bc50 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,7 +80,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 3000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 4000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:29:35 +0000
diff --git a/src/go.c b/src/go.c
index a081bc50..b626df64 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,7 +80,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 4000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 5000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:29:40 +0000
diff --git a/src/go.c b/src/go.c
index b626df64..76d3ab2c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,7 +80,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 5000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 6000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:29:48 +0000
diff --git a/src/go.c b/src/go.c
index 76d3ab2c..4030a15f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,7 +80,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 6000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 7000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:29:52 +0000
diff --git a/src/go.c b/src/go.c
index 4030a15f..8268ef5a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,7 +80,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   compressed[0] *= gain;
   compressed[1] *= gain;
   for (int c = 0; c < 2; ++c) {
-    so2echo(&so2->echo[c], 20, 7000, tanh(compressed[c] + impulse[c]));
+    so2echo(&so2->echo[c], 20, 8000, tanh(compressed[c] + impulse[c]));
   }
   mixdown[0] += compressed[0];
   mixdown[1] += compressed[1];
diff @ 2017-02-25 18:31:06 +0000
diff --git a/src/go.c b/src/go.c
index 8268ef5a..c5f60911 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ typedef struct {
   // add data here
   BIQUAD lop[2];
   BIQUAD hip[2];
-
+  SAMPHOLD sh[2];
 } S;
 
 // part 1
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = tanh(1.3 * (feedback[c] + down - up));
+    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(16000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:31:20 +0000
diff --git a/src/go.c b/src/go.c
index c5f60911..913b6faa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(16000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(8000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:31:40 +0000
diff --git a/src/go.c b/src/go.c
index 913b6faa..a80ce50b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(8000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:32:04 +0000
diff --git a/src/go.c b/src/go.c
index a80ce50b..79e61549 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 1), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 1), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 2), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 2), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:32:13 +0000
diff --git a/src/go.c b/src/go.c
index 79e61549..81d88570 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 2), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 2), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 5), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 5), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:32:19 +0000
diff --git a/src/go.c b/src/go.c
index 81d88570..dba80b8c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 5), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 5), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 8), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 8), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:32:28 +0000
diff --git a/src/go.c b/src/go.c
index dba80b8c..fe1cbef5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 8), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 8), in);
+    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
+          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:32:37 +0000
diff --git a/src/go.c b/src/go.c
index fe1cbef5..14b3bf89 100644
--- a/src/go.c
+++ b/src/go.c
@@ -69,7 +69,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 100 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
+          in = biquad(highpass(&s->hip[c], 50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:32:45 +0000
diff --git a/src/go.c b/src/go.c
index 14b3bf89..15d9d0e9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
-          in = biquad(highpass(&s->hip[c], 50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
+    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
+          in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:33:00 +0000
diff --git a/src/go.c b/src/go.c
index 15d9d0e9..f2f9d51c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 200 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
+    double in = biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:33:21 +0000
diff --git a/src/go.c b/src/go.c
index f2f9d51c..1eb70e85 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 10 * cos(twopi * p);
+  double modulation = 20 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
     , delread4(&so2->echo[0].del, 200 + modulation)
diff @ 2017-02-25 18:33:29 +0000
diff --git a/src/go.c b/src/go.c
index 1eb70e85..dfaaaf86 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 20 * cos(twopi * p);
+  double modulation = 40 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
     , delread4(&so2->echo[0].del, 200 + modulation)
diff @ 2017-02-25 18:33:36 +0000
diff --git a/src/go.c b/src/go.c
index dfaaaf86..eb1ed980 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 40 * cos(twopi * p);
+  double modulation = 80 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
     , delread4(&so2->echo[0].del, 200 + modulation)
diff @ 2017-02-25 18:33:42 +0000
diff --git a/src/go.c b/src/go.c
index eb1ed980..8ab8de3a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 80 * cos(twopi * p);
+  double modulation = 160 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 200 - modulation)
     , delread4(&so2->echo[0].del, 200 + modulation)
diff @ 2017-02-25 18:33:53 +0000
diff --git a/src/go.c b/src/go.c
index 8ab8de3a..eef53a21 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:33:58 +0000
diff --git a/src/go.c b/src/go.c
index eef53a21..19719326 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.5 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:03 +0000
diff --git a/src/go.c b/src/go.c
index 19719326..20e8c999 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.5 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.6 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:06 +0000
diff --git a/src/go.c b/src/go.c
index 20e8c999..4d6c4149 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.6 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.7 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:07 +0000
diff --git a/src/go.c b/src/go.c
index 4d6c4149..14226f8b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.7 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.8 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:09 +0000
diff --git a/src/go.c b/src/go.c
index 14226f8b..4a5ad244 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.8 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1.9 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:11 +0000
diff --git a/src/go.c b/src/go.c
index 4a5ad244..1bdb6930 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1.9 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:14 +0000
diff --git a/src/go.c b/src/go.c
index 1bdb6930..204cb698 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2.1 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:17 +0000
diff --git a/src/go.c b/src/go.c
index 204cb698..b8f9aebe 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2.1 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2.2 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:20 +0000
diff --git a/src/go.c b/src/go.c
index b8f9aebe..fc123acd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2.2 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:23 +0000
diff --git a/src/go.c b/src/go.c
index fc123acd..e8b3aaa7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2.3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2.4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:27 +0000
diff --git a/src/go.c b/src/go.c
index e8b3aaa7..0014fdf8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2.4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(2.5 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:34 +0000
diff --git a/src/go.c b/src/go.c
index 0014fdf8..3fc95b49 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(2.5 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:34:44 +0000
diff --git a/src/go.c b/src/go.c
index 3fc95b49..d2adac27 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(3 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:35:09 +0000
diff --git a/src/go.c b/src/go.c
index d2adac27..f467d217 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,8 +57,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
-  t -= 7 * (wrap(4 * p - 0.5) > 0.5);
-  t += 3 * (wrap(8 * p - 0.5) > 0.5);
+  t -= 7 * (wrap(9 * p - 0.5) > 0.5);
+  t += 3 * (wrap(12 * p - 0.5) > 0.5);
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
diff @ 2017-02-25 18:35:19 +0000
diff --git a/src/go.c b/src/go.c
index f467d217..48153b7a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
-  t -= 7 * (wrap(9 * p - 0.5) > 0.5);
+  t -= 7 * (wrap(24 * p - 0.5) > 0.5);
   t += 3 * (wrap(12 * p - 0.5) > 0.5);
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
diff @ 2017-02-25 18:35:33 +0000
diff --git a/src/go.c b/src/go.c
index 48153b7a..852d89d9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(4 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(6 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:35:38 +0000
diff --git a/src/go.c b/src/go.c
index 852d89d9..ee22ad00 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(6 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:35:50 +0000
diff --git a/src/go.c b/src/go.c
index ee22ad00..4e2400a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -58,7 +58,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double p = phasor(&so2->phase, 0.01);
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
-  t += 3 * (wrap(12 * p - 0.5) > 0.5);
+  t += 3 * (wrap(20 * p - 0.5) > 0.5);
   t -= 2 * (wrap(16 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
diff @ 2017-02-25 18:35:59 +0000
diff --git a/src/go.c b/src/go.c
index 4e2400a6..1af88435 100644
--- a/src/go.c
+++ b/src/go.c
@@ -59,7 +59,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   double t = 12 * (wrap(2 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
   t += 3 * (wrap(20 * p - 0.5) > 0.5);
-  t -= 2 * (wrap(16 * p - 0.5) > 0.5);
+  t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
   double modulation = 160 * cos(twopi * p);
diff @ 2017-02-25 18:36:09 +0000
diff --git a/src/go.c b/src/go.c
index 1af88435..9bccb8f6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
   double p = phasor(&so2->phase, 0.01);
-  double t = 12 * (wrap(2 * p - 0.5) > 0.5);
+  double t = 12 * (wrap(8 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
   t += 3 * (wrap(20 * p - 0.5) > 0.5);
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
diff @ 2017-02-25 18:36:36 +0000
diff --git a/src/go.c b/src/go.c
index 9bccb8f6..7176d886 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq + 10), feedback[c]);
-          in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq + 10), in);
+    double in = biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
+          in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:36:51 +0000
diff --git a/src/go.c b/src/go.c
index 7176d886..4a25382f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] + down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(4000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:37:01 +0000
diff --git a/src/go.c b/src/go.c
index 4a25382f..b87c61f7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(4000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(8000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:37:07 +0000
diff --git a/src/go.c b/src/go.c
index b87c61f7..8676db32 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(8000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(16000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:37:38 +0000
diff --git a/src/go.c b/src/go.c
index 8676db32..0863d45c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(8 * (feedback[c] - down - up)), wrap(16000 * 100 * p + c / 2.0));
+    feedback[c] = samphold(&s->sh[c], tanh(1 * (feedback[c] - down - up)), wrap(20000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:38:09 +0000
diff --git a/src/go.c b/src/go.c
index 0863d45c..71f2eeea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = samphold(&s->sh[c], tanh(1 * (feedback[c] - down - up)), wrap(20000 * 100 * p + c / 2.0));
+    feedback[c] = tanh(1 * (feedback[c] - down - up));//, wrap(20000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:38:35 +0000
diff --git a/src/go.c b/src/go.c
index 71f2eeea..f7d3e89b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
+    double in = sin(biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:44 +0000
diff --git a/src/go.c b/src/go.c
index f7d3e89b..617ca9cc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(1.5 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:50 +0000
diff --git a/src/go.c b/src/go.c
index 617ca9cc..0b1bed08 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(1.5 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(1.6 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:51 +0000
diff --git a/src/go.c b/src/go.c
index 0b1bed08..06a01b39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(1.6 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(1.7 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:53 +0000
diff --git a/src/go.c b/src/go.c
index 06a01b39..6fd20533 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(1.7 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(1.8 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:54 +0000
diff --git a/src/go.c b/src/go.c
index 6fd20533..5e7007c4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(1.8 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(1.9 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:38:56 +0000
diff --git a/src/go.c b/src/go.c
index 5e7007c4..d6d826e2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(1.9 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(2 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:39:03 +0000
diff --git a/src/go.c b/src/go.c
index d6d826e2..50b43645 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(2 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(3 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:39:14 +0000
diff --git a/src/go.c b/src/go.c
index 50b43645..d4d5e0ca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(3 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(4 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:39:28 +0000
diff --git a/src/go.c b/src/go.c
index d4d5e0ca..f969b637 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(4 * biquad(lowpass(&s->lop[c], 300 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = sin(4 * biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
           in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:39:38 +0000
diff --git a/src/go.c b/src/go.c
index f969b637..9a20fa25 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,8 +68,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(4 * biquad(lowpass(&s->lop[c], 400 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
-          in = biquad(highpass(&s->hip[c],  50 * pow(2, 0.1* sin(twopi * p)), flatq), in);
+    double in = sin(4 * biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+          in = biquad(highpass(&s->hip[c],  100 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
     feedback[c] = tanh(1 * (feedback[c] - down - up));//, wrap(20000 * 100 * p + c / 2.0));
diff @ 2017-02-25 18:39:57 +0000
diff --git a/src/go.c b/src/go.c
index 9a20fa25..82b061d0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  100 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = tanh(1 * (feedback[c] - down - up));//, wrap(20000 * 100 * p + c / 2.0));
+    feedback[c] = feedback[c] - down - up;//, wrap(20000 * 100 * p + c / 2.0));
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:39:59 +0000
diff --git a/src/go.c b/src/go.c
index 82b061d0..063e5a82 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
           in = biquad(highpass(&s->hip[c],  100 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
-    feedback[c] = feedback[c] - down - up;//, wrap(20000 * 100 * p + c / 2.0));
+    feedback[c] = feedback[c] - down - up;
   }
   double compressed[2] = { 0, 0 };
   compress(compressed, &so2->compress[0], 5, 10, 25, 48, feedback);
diff @ 2017-02-25 18:40:04 +0000
diff --git a/src/go.c b/src/go.c
index 063e5a82..ed0abb1d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
     , delread4(&so2->echo[0].del, 200 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
-    double in = sin(4 * biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]));
+    double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
           in = biquad(highpass(&s->hip[c],  100 * pow(2, 0.1* sin(twopi * p)), flatq), in);
     double down = pitchshift(&so2->shift[2 * c + 0], 2, 100, t, in);
     double up   = pitchshift(&so2->shift[2 * c + 1], 2, 100, -t, down);
diff @ 2017-02-25 18:40:17 +0000
diff --git a/src/go.c b/src/go.c
index ed0abb1d..3c42efae 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,8 +64,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 160 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 200 - modulation)
-    , delread4(&so2->echo[0].del, 200 + modulation)
+    { delread4(&so2->echo[1].del, 500 - modulation)
+    , delread4(&so2->echo[0].del, 500 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:40:28 +0000
diff --git a/src/go.c b/src/go.c
index 3c42efae..77f0494d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 160 * cos(twopi * p);
+  double modulation = 80 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 500 - modulation)
     , delread4(&so2->echo[0].del, 500 + modulation)
diff @ 2017-02-25 18:40:33 +0000
diff --git a/src/go.c b/src/go.c
index 77f0494d..ba6d2b68 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,8 +64,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 80 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 500 - modulation)
-    , delread4(&so2->echo[0].del, 500 + modulation)
+    { delread4(&so2->echo[1].del, 900 - modulation)
+    , delread4(&so2->echo[0].del, 900 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:40:44 +0000
diff --git a/src/go.c b/src/go.c
index ba6d2b68..3461d3a7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 80 * cos(twopi * p);
+  double modulation = 40 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:40:49 +0000
diff --git a/src/go.c b/src/go.c
index 3461d3a7..309eb7df 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 40 * cos(twopi * p);
+  double modulation = 20 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:40:56 +0000
diff --git a/src/go.c b/src/go.c
index 309eb7df..db5c5697 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 20 * cos(twopi * p);
+  double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:03 +0000
diff --git a/src/go.c b/src/go.c
index db5c5697..46981af7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 10 * cos(twopi * p);
+  double modulation = 5 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:05 +0000
diff --git a/src/go.c b/src/go.c
index 46981af7..8dff3a72 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 5 * cos(twopi * p);
+  double modulation = 4 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:07 +0000
diff --git a/src/go.c b/src/go.c
index 8dff3a72..ca10219f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 4 * cos(twopi * p);
+  double modulation = 3 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:08 +0000
diff --git a/src/go.c b/src/go.c
index ca10219f..110aa5e2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 3 * cos(twopi * p);
+  double modulation = 2 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:11 +0000
diff --git a/src/go.c b/src/go.c
index 110aa5e2..1edcfd73 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 2 * cos(twopi * p);
+  double modulation = 1 * cos(twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 900 - modulation)
     , delread4(&so2->echo[0].del, 900 + modulation)
diff @ 2017-02-25 18:41:37 +0000
diff --git a/src/go.c b/src/go.c
index 1edcfd73..4509cc25 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,6 +45,7 @@ typedef struct {
   BIQUAD lop[2];
   BIQUAD hip[2];
   SAMPHOLD sh[2];
+  double tempo;
 } S;
 
 // part 1
@@ -55,7 +56,8 @@ static inline void so2echo(SO2ECHO *s, double hiphz, double lophz, double x) {
 static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
-  double p = phasor(&so2->phase, 0.01);
+  s->tempo = 0.01;
+  double p = phasor(&so2->phase, s->tempo);
   double t = 12 * (wrap(8 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
   t += 3 * (wrap(20 * p - 0.5) > 0.5);
diff @ 2017-02-25 18:42:13 +0000
diff --git a/src/go.c b/src/go.c
index 4509cc25..8b6c1c3c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void so2echo(SO2ECHO *s, double hiphz, double lophz, double x) {
 static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
-  s->tempo = 0.01;
+  s->tempo = fmin(0.02, s->tempo * 1.000001);
   double p = phasor(&so2->phase, s->tempo);
   double t = 12 * (wrap(8 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
diff @ 2017-02-25 18:42:40 +0000
diff --git a/src/go.c b/src/go.c
index 8b6c1c3c..00ce8b55 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 900 - modulation)
-    , delread4(&so2->echo[0].del, 900 + modulation)
+    { delread4(&so2->echo[1].del, 450 - modulation)
+    , delread4(&so2->echo[0].del, 450 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:42:51 +0000
diff --git a/src/go.c b/src/go.c
index 00ce8b55..d53c416d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 450 - modulation)
-    , delread4(&so2->echo[0].del, 450 + modulation)
+    { delread4(&so2->echo[1].del, 250 - modulation)
+    , delread4(&so2->echo[0].del, 250 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:42:57 +0000
diff --git a/src/go.c b/src/go.c
index d53c416d..32f3b05c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 250 - modulation)
-    , delread4(&so2->echo[0].del, 250 + modulation)
+    { delread4(&so2->echo[1].del, 125 - modulation)
+    , delread4(&so2->echo[0].del, 125 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:43:11 +0000
diff --git a/src/go.c b/src/go.c
index 32f3b05c..cbad08e6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 125 - modulation)
-    , delread4(&so2->echo[0].del, 125 + modulation)
+    { delread4(&so2->echo[1].del, 60 - modulation)
+    , delread4(&so2->echo[0].del, 60 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:43:29 +0000
diff --git a/src/go.c b/src/go.c
index cbad08e6..0543d2f2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 60 - modulation)
-    , delread4(&so2->echo[0].del, 60 + modulation)
+    { delread4(&so2->echo[1].del, 30 - modulation)
+    , delread4(&so2->echo[0].del, 30 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:43:36 +0000
diff --git a/src/go.c b/src/go.c
index 0543d2f2..2a92077e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 30 - modulation)
-    , delread4(&so2->echo[0].del, 30 + modulation)
+    { delread4(&so2->echo[1].del, 20 - modulation)
+    , delread4(&so2->echo[0].del, 20 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:43:42 +0000
diff --git a/src/go.c b/src/go.c
index 2a92077e..eeb09339 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 20 - modulation)
-    , delread4(&so2->echo[0].del, 20 + modulation)
+    { delread4(&so2->echo[1].del, 15 - modulation)
+    , delread4(&so2->echo[0].del, 15 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:44:00 +0000
diff --git a/src/go.c b/src/go.c
index eeb09339..b57f34c7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 15 - modulation)
-    , delread4(&so2->echo[0].del, 15 + modulation)
+    { delread4(&so2->echo[1].del, 10 - modulation)
+    , delread4(&so2->echo[0].del, 10 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:44:05 +0000
diff --git a/src/go.c b/src/go.c
index b57f34c7..01806975 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 10 - modulation)
-    , delread4(&so2->echo[0].del, 10 + modulation)
+    { delread4(&so2->echo[1].del, 8 - modulation)
+    , delread4(&so2->echo[0].del, 8 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:44:14 +0000
diff --git a/src/go.c b/src/go.c
index 01806975..ca5cf8eb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ static inline void so2echo(SO2ECHO *s, double hiphz, double lophz, double x) {
 static inline void part1(S *s, double *mixdown, double trigger) {
   SO2 *so2 = &s->part1;
   double impulse[2] = { trigger, trigger };
-  s->tempo = fmin(0.02, s->tempo * 1.000001);
+  s->tempo = fmin(0.04, s->tempo * 1.000001);
   double p = phasor(&so2->phase, s->tempo);
   double t = 12 * (wrap(8 * p - 0.5) > 0.5);
   t -= 7 * (wrap(24 * p - 0.5) > 0.5);
diff @ 2017-02-25 18:44:43 +0000
diff --git a/src/go.c b/src/go.c
index ca5cf8eb..7df8d7bb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 8 - modulation)
-    , delread4(&so2->echo[0].del, 8 + modulation)
+    { delread4(&so2->echo[1].del, 6 - modulation)
+    , delread4(&so2->echo[0].del, 6 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:44:56 +0000
diff --git a/src/go.c b/src/go.c
index 7df8d7bb..e845ba97 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 6 - modulation)
-    , delread4(&so2->echo[0].del, 6 + modulation)
+    { delread4(&so2->echo[1].del, 5 - modulation)
+    , delread4(&so2->echo[0].del, 5 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:45:03 +0000
diff --git a/src/go.c b/src/go.c
index e845ba97..27bdb0ea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 5 - modulation)
-    , delread4(&so2->echo[0].del, 5 + modulation)
+    { delread4(&so2->echo[1].del, 4 - modulation)
+    , delread4(&so2->echo[0].del, 4 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:45:19 +0000
diff --git a/src/go.c b/src/go.c
index 27bdb0ea..da73ff0d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 4 - modulation)
-    , delread4(&so2->echo[0].del, 4 + modulation)
+    { delread4(&so2->echo[1].del, 3 - modulation)
+    , delread4(&so2->echo[0].del, 3 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:45:25 +0000
diff --git a/src/go.c b/src/go.c
index da73ff0d..27bdb0ea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&so2->echo[1].del, 3 - modulation)
-    , delread4(&so2->echo[0].del, 3 + modulation)
+    { delread4(&so2->echo[1].del, 4 - modulation)
+    , delread4(&so2->echo[0].del, 4 + modulation)
     };
   for (int c = 0; c < 2; ++c) {
     double in = biquad(lowpass(&s->lop[c], 600 * pow(2, 0.1* sin(twopi * p)), flatq), feedback[c]);
diff @ 2017-02-25 18:45:39 +0000
diff --git a/src/go.c b/src/go.c
index 27bdb0ea..5609065b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline void part1(S *s, double *mixdown, double trigger) {
   t -= 2 * (wrap(25 * p - 0.5) > 0.5);
   t += 12 * (wrap(32 * p - 0.5) > 0.5);
   
-  double modulation = 1 * cos(twopi * p);
+  double modulation = 1 * cos(2 * twopi * p);
   double feedback[2] =
     { delread4(&so2->echo[1].del, 4 - modulation)
     , delread4(&so2->echo[0].del, 4 + modulation)
diff @ 2017-02-25 18:45:45 +0000
diff --git a/src/go.c b/src/go.c
index 5609065b..3f13cf39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,7 @@ static inline