session-2016-04-23-204515

clive

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

diff @ 2016-04-23 21:45:42 +0100
diff --git a/src/go.c b/src/go.c
index f33b706..1d80bfa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0/*-12*/, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, 0/* 19*/, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:45:52 +0100
diff --git a/src/go.c b/src/go.c
index 1d80bfa..92f0a52 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.2, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.4, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:45:57 +0100
diff --git a/src/go.c b/src/go.c
index 92f0a52..99c1576 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.4, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.6, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:46:04 +0100
diff --git a/src/go.c b/src/go.c
index 99c1576..f34ff76 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 500, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 750, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:46:17 +0100
diff --git a/src/go.c b/src/go.c
index f34ff76..baff200 100644
--- a/src/go.c
+++ b/src/go.c
@@ -28,10 +28,10 @@ typedef struct {
 int go(S *s, int channels, const float *in, float *out) {
 
   // trigger impulse on reload
-  double impulse[2] = { s->reloaded, s->reloaded };
   if (s->reloaded) {
     s->reloaded = 0;
   }
+  double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
   double p = phasor(&s->phase, 0.001);
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.6, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:46:24 +0100
diff --git a/src/go.c b/src/go.c
index baff200..dc0a66c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:46:30 +0100
diff --git a/src/go.c b/src/go.c
index dc0a66c..ddba2a2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 750, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 1500, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:46:37 +0100
diff --git a/src/go.c b/src/go.c
index ddba2a2..896c56c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -2, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:46:48 +0100
diff --git a/src/go.c b/src/go.c
index 896c56c..6c09f25 100644
--- a/src/go.c
+++ b/src/go.c
@@ -34,8 +34,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.001);
-  double modulation = 100 * cos(twopi * p);
+  double p = phasor(&s->phase, 0.01);
+  double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation)
diff @ 2016-04-23 21:46:56 +0100
diff --git a/src/go.c b/src/go.c
index 6c09f25..80241c0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -5, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:47:01 +0100
diff --git a/src/go.c b/src/go.c
index 80241c0..0154eec 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -5, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:47:06 +0100
diff --git a/src/go.c b/src/go.c
index 0154eec..af4cb29 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6, down);
     feedback[c] = feedback[c] + down + up;
   }
-
+  
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
diff @ 2016-04-23 21:47:11 +0100
diff --git a/src/go.c b/src/go.c
index af4cb29..77f98b4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6, down);
     feedback[c] = feedback[c] + down + up;
   }
-  
+
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 1500, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 30, 1500, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:47:24 +0100
diff --git a/src/go.c b/src/go.c
index 77f98b4..c04883c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 30, 1500, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 30, 2000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:47:37 +0100
diff --git a/src/go.c b/src/go.c
index c04883c..3ac8b18 100644
--- a/src/go.c
+++ b/src/go.c
@@ -34,8 +34,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.01);
-  double modulation = 10 * cos(twopi * p);
+  double p = phasor(&s->phase, 0.1);
+  double modulation = 1 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation)
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.2, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:47:56 +0100
diff --git a/src/go.c b/src/go.c
index 3ac8b18..4c87f1b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -43,8 +43,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.2, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.5, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 30, 2000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 40, 2000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:48:12 +0100
diff --git a/src/go.c b/src/go.c
index 4c87f1b..a334b88 100644
--- a/src/go.c
+++ b/src/go.c
@@ -36,9 +36,10 @@ int go(S *s, int channels, const float *in, float *out) {
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
   double modulation = 1 * cos(twopi * p);
+  double modulation2 = 1 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
-    , delread4(&s->echo[0].del, 200 + modulation)
+    , delread4(&s->echo[0].del, 200 + modulation2)
     };
 
   // pitchshift feedback
diff @ 2016-04-23 21:48:19 +0100
diff --git a/src/go.c b/src/go.c
index a334b88..11c3d5d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -6.5, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:48:26 +0100
diff --git a/src/go.c b/src/go.c
index 11c3d5d..e4fa721 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 1 * cos(twopi * p);
-  double modulation2 = 1 * sin(twopi * p);
+  double modulation = 2 * cos(twopi * p);
+  double modulation2 = 2 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:48:30 +0100
diff --git a/src/go.c b/src/go.c
index e4fa721..cf28015 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.5, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.51, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:48:35 +0100
diff --git a/src/go.c b/src/go.c
index cf28015..9f4713d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 2 * cos(twopi * p);
-  double modulation2 = 2 * sin(twopi * p);
+  double modulation = 3 * cos(twopi * p);
+  double modulation2 = 3 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:48:40 +0100
diff --git a/src/go.c b/src/go.c
index 9f4713d..e3483d4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.51, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:48:46 +0100
diff --git a/src/go.c b/src/go.c
index e3483d4..70e2c05 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.51, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.7, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:48:51 +0100
diff --git a/src/go.c b/src/go.c
index 70e2c05..61eed6b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.7, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.4, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:48:55 +0100
diff --git a/src/go.c b/src/go.c
index 61eed6b..66be335 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.7, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.4, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.5, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:49:07 +0100
diff --git a/src/go.c b/src/go.c
index 66be335..5fbe32e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.7, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.5, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.6, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -58,7 +58,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 40, 2000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 50, 3000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:49:13 +0100
diff --git a/src/go.c b/src/go.c
index 5fbe32e..6921fe5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 3 * cos(twopi * p);
-  double modulation2 = 3 * sin(twopi * p);
+  double modulation = 5 * cos(twopi * p);
+  double modulation2 = 5 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:49:21 +0100
diff --git a/src/go.c b/src/go.c
index 6921fe5..2c3b9ab 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.7, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.8, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.6, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:49:25 +0100
diff --git a/src/go.c b/src/go.c
index 2c3b9ab..1a2439d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.8, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.6, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.9, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:49:30 +0100
diff --git a/src/go.c b/src/go.c
index 1a2439d..626bc8c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.8, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.9, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:49:39 +0100
diff --git a/src/go.c b/src/go.c
index 626bc8c..4216b19 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 5 * cos(twopi * p);
-  double modulation2 = 5 * sin(twopi * p);
+  double modulation = 7 * cos(twopi * p);
+  double modulation2 = 7 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:49:46 +0100
diff --git a/src/go.c b/src/go.c
index 4216b19..fcf8279 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.9, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:49:51 +0100
diff --git a/src/go.c b/src/go.c
index fcf8279..a87c78e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:49:59 +0100
diff --git a/src/go.c b/src/go.c
index a87c78e..3b9a08a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -58,7 +58,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 50, 3000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 50, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:50:06 +0100
diff --git a/src/go.c b/src/go.c
index 3b9a08a..ac68b30 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:50:18 +0100
diff --git a/src/go.c b/src/go.c
index ac68b30..6744ec2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,8 +44,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -8.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -9, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:50:23 +0100
diff --git a/src/go.c b/src/go.c
index 6744ec2..f9c60da 100644
--- a/src/go.c
+++ b/src/go.c
@@ -52,7 +52,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1;
+  double gain = 1.1;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-04-23 21:50:29 +0100
diff --git a/src/go.c b/src/go.c
index f9c60da..aa480bc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -58,7 +58,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 50, 4000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 50, 5000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:50:35 +0100
diff --git a/src/go.c b/src/go.c
index aa480bc..58bba53 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 7 * cos(twopi * p);
-  double modulation2 = 7 * sin(twopi * p);
+  double modulation = 10 * cos(twopi * p);
+  double modulation2 = 10 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:50:43 +0100
diff --git a/src/go.c b/src/go.c
index 58bba53..11c1b66 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,8 +44,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -9, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:50:48 +0100
diff --git a/src/go.c b/src/go.c
index 11c1b66..fbef47d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -52,7 +52,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1.1;
+  double gain = 1.2;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-04-23 21:50:54 +0100
diff --git a/src/go.c b/src/go.c
index fbef47d..3588c9f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:50:57 +0100
diff --git a/src/go.c b/src/go.c
index 3588c9f..4a3188e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:51:01 +0100
diff --git a/src/go.c b/src/go.c
index 4a3188e..9285deb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.2, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.3, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:51:06 +0100
diff --git a/src/go.c b/src/go.c
index 9285deb..9de264b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:51:12 +0100
diff --git a/src/go.c b/src/go.c
index 9de264b..827e7dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -58,7 +58,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 50, 5000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 40, 5000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:51:39 +0100
diff --git a/src/go.c b/src/go.c
index 827e7dc..8bf9282 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.2, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.3, down);
     feedback[c] = feedback[c] + down + up;
   }
@@ -56,6 +56,13 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
+  double k = 1 - wrap(16 * p);
+  k *= k;
+  k *= k;
+  k *= k;
+  k *= k;
+
+
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
     so2echo(&s->echo[c], 40, 5000, tanh(compressed[c] + impulse[c]));
diff @ 2016-04-23 21:52:03 +0100
diff --git a/src/go.c b/src/go.c
index 8bf9282..a9d9498 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,8 +44,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.3, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.5, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -61,7 +61,8 @@ int go(S *s, int channels, const float *in, float *out) {
   k *= k;
   k *= k;
   k *= k;
-
+  k *= 8;
+  k = 4 * sin(twopi * k);
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
diff @ 2016-04-23 21:52:11 +0100
diff --git a/src/go.c b/src/go.c
index a9d9498..00910e4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.5, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.7, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:52:20 +0100
diff --git a/src/go.c b/src/go.c
index 00910e4..12eb4c7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,8 +35,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 10 * cos(twopi * p);
-  double modulation2 = 10 * sin(twopi * p);
+  double modulation = 1 * cos(twopi * p);
+  double modulation2 = 1 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 21:52:25 +0100
diff --git a/src/go.c b/src/go.c
index 12eb4c7..f6dbbc0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -10.7, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -11, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:52:33 +0100
diff --git a/src/go.c b/src/go.c
index f6dbbc0..1464caf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 40, 5000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 80, 5000, tanh(compressed[c] + impulse[c]));
   }
 
   // compress mix down
diff @ 2016-04-23 21:53:02 +0100
diff --git a/src/go.c b/src/go.c
index 1464caf..4275d66 100644
--- a/src/go.c
+++ b/src/go.c
@@ -69,6 +69,9 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 80, 5000, tanh(compressed[c] + impulse[c]));
   }
 
+  compressed[0] += k;
+  compressed[1] += k;
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-04-23 21:53:38 +0100
diff --git a/src/go.c b/src/go.c
index 4275d66..4d5a714 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,9 +64,18 @@ int go(S *s, int channels, const float *in, float *out) {
   k *= 8;
   k = 4 * sin(twopi * k);
 
+  double s = 1 - wrap(8 * p + 0.5);
+  s *= s;
+  s *= s;
+  s *= s;
+  s *= s;
+  s *= s;
+  s *= noise();
+  s = tanh(5 * s);
+
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 80, 5000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 80, 5000, tanh(compressed[c] + s));
   }
 
   compressed[0] += k;
diff @ 2016-04-23 21:53:48 +0100
diff --git a/src/go.c b/src/go.c
index 4d5a714..ff10b6e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,8 +44,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -11, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 6, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:53:57 +0100
diff --git a/src/go.c b/src/go.c
index ff10b6e..7fb78a8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,7 +75,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 80, 5000, tanh(compressed[c] + s));
+    so2echo(&s->echo[c], 150, 5000, tanh(compressed[c] + s));
   }
 
   compressed[0] += k;
diff @ 2016-04-23 21:54:03 +0100
diff --git a/src/go.c b/src/go.c
index 7fb78a8..581a157 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,7 +71,7 @@ int go(S *s, int channels, const float *in, float *out) {
   s *= s;
   s *= s;
   s *= noise();
-  s = tanh(5 * s);
+  s = 4 * tanh(5 * s);
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
diff @ 2016-04-23 21:54:40 +0100
diff --git a/src/go.c b/src/go.c
index 581a157..580c3da 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,18 +64,18 @@ int go(S *s, int channels, const float *in, float *out) {
   k *= 8;
   k = 4 * sin(twopi * k);
 
-  double s = 1 - wrap(8 * p + 0.5);
-  s *= s;
-  s *= s;
-  s *= s;
-  s *= s;
-  s *= s;
-  s *= noise();
-  s = 4 * tanh(5 * s);
+  double sn = 1 - wrap(8 * p + 0.5);
+  sn *= sn;
+  sn *= sn;
+  sn *= sn;
+  sn *= sn;
+  sn *= sn;
+  sn *= noise();
+  sn = 4 * tanh(5 * sn);
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 150, 5000, tanh(compressed[c] + s));
+    so2echo(&s->echo[c], 150, 5000, tanh(compressed[c] + sn));
   }
 
   compressed[0] += k;
diff @ 2016-04-23 21:54:50 +0100
diff --git a/src/go.c b/src/go.c
index 580c3da..25eaeb0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -64,7 +64,10 @@ int go(S *s, int channels, const float *in, float *out) {
   k *= 8;
   k = 4 * sin(twopi * k);
 
-  double sn = 1 - wrap(8 * p + 0.5);
+  double sn = 1 - wrap(4 * p + 0.5);
+  sn *= sn;
+  sn *= sn;
+  sn *= sn;
   sn *= sn;
   sn *= sn;
   sn *= sn;
diff @ 2016-04-23 21:55:02 +0100
diff --git a/src/go.c b/src/go.c
index 25eaeb0..6923fee 100644
--- a/src/go.c
+++ b/src/go.c
@@ -78,7 +78,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 150, 5000, tanh(compressed[c] + sn));
+    so2echo(&s->echo[c], 250, 5000, tanh(compressed[c] + sn));
   }
 
   compressed[0] += k;
diff @ 2016-04-23 21:55:13 +0100
diff --git a/src/go.c b/src/go.c
index 6923fee..ad9565f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,7 +44,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 6, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 7, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:56:00 +0100
diff --git a/src/go.c b/src/go.c
index ad9565f..e8f3f07 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,9 +80,15 @@ int go(S *s, int channels, const float *in, float *out) {
   for (int c = 0; c < 2; ++c) {
     so2echo(&s->echo[c], 250, 5000, tanh(compressed[c] + sn));
   }
-
+/*
   compressed[0] += k;
   compressed[1] += k;
+*/
+  double b = wrap(500 * p);
+  double bs = 0.5 * sin(twopi * b);
+  compressed[0] += bs;
+  compressed[1] += bs;
+  
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-04-23 21:56:24 +0100
diff --git a/src/go.c b/src/go.c
index e8f3f07..7408711 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 */
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b);
+  double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b)));
   compressed[0] += bs;
   compressed[1] += bs;
   
diff @ 2016-04-23 21:56:25 +0100
diff --git a/src/go.c b/src/go.c
index 7408711..a083744 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 */
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b)));
+  double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b));
   compressed[0] += bs;
   compressed[1] += bs;
   
diff @ 2016-04-23 21:56:35 +0100
diff --git a/src/go.c b/src/go.c
index a083744..8547e9a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -78,7 +78,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 250, 5000, tanh(compressed[c] + sn));
+    so2echo(&s->echo[c], 500, 5000, tanh(compressed[c] + sn));
   }
 /*
   compressed[0] += k;
diff @ 2016-04-23 21:57:30 +0100
diff --git a/src/go.c b/src/go.c
index 8547e9a..7afec0e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -22,6 +22,7 @@ typedef struct {
   PITCHSHIFT shift[4];
   COMPRESS compress[2];
   SO2ECHO echo[2];
+  SAMPHOLD sh[2];
 } S;
 
 // per sample DSP callback
@@ -45,7 +46,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 7, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -14, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -86,8 +87,8 @@ int go(S *s, int channels, const float *in, float *out) {
 */
   double b = wrap(500 * p);
   double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b));
-  compressed[0] += bs;
-  compressed[1] += bs;
+  compressed[0] += samphold(&s->sh[0], bs, wrap(30 * p));
+  compressed[1] += samphold(&s->sh[1], bs, wrap(30 * p + 0.5));
   
 
   // compress mix down
diff @ 2016-04-23 21:57:36 +0100
diff --git a/src/go.c b/src/go.c
index 7afec0e..1de07b7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -87,8 +87,8 @@ int go(S *s, int channels, const float *in, float *out) {
 */
   double b = wrap(500 * p);
   double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b));
-  compressed[0] += samphold(&s->sh[0], bs, wrap(30 * p));
-  compressed[1] += samphold(&s->sh[1], bs, wrap(30 * p + 0.5));
+  compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
+  compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
   
 
   // compress mix down
diff @ 2016-04-23 21:57:58 +0100
diff --git a/src/go.c b/src/go.c
index 1de07b7..9d949d0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,7 +86,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 */
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b + sin(12 * twopi * p) * sin(3 * twopi * b));
+  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) * sin(3 * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
   
diff @ 2016-04-23 21:58:46 +0100
diff --git a/src/go.c b/src/go.c
index 9d949d0..02bfb3e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
-  double k = 1 - wrap(16 * p);
+  double k = 1 - wrap(32 * p);
+  k *= k;
   k *= k;
   k *= k;
   k *= k;
@@ -86,7 +87,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 */
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) * sin(3 * twopi * b));
+  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+    sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
   
diff @ 2016-04-23 21:58:55 +0100
diff --git a/src/go.c b/src/go.c
index 02bfb3e..7611ad0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,8 +61,6 @@ int go(S *s, int channels, const float *in, float *out) {
   k *= k;
   k *= k;
   k *= k;
-  k *= k;
-  k *= k;
   k *= 8;
   k = 4 * sin(twopi * k);
 
@@ -82,10 +80,9 @@ int go(S *s, int channels, const float *in, float *out) {
   for (int c = 0; c < 2; ++c) {
     so2echo(&s->echo[c], 500, 5000, tanh(compressed[c] + sn));
   }
-/*
   compressed[0] += k;
   compressed[1] += k;
-*/
+
   double b = wrap(500 * p);
   double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
diff @ 2016-04-23 21:59:10 +0100
diff --git a/src/go.c b/src/go.c
index 7611ad0..c531d1a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + sin((12 + 30 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 21:59:12 +0100
diff --git a/src/go.c b/src/go.c
index c531d1a..7611ad0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap(500 * p);
-  double bs = 0.5 * sin(twopi * b + sin((12 + 30 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 21:59:21 +0100
diff --git a/src/go.c b/src/go.c
index 7611ad0..f93b0bc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,7 +83,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += k;
   compressed[1] += k;
 
-  double b = wrap(500 * p);
+  double b = wrap(500 * p - 100 * p);
   double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
diff @ 2016-04-23 21:59:29 +0100
diff --git a/src/go.c b/src/go.c
index f93b0bc..d78674f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -46,7 +46,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 7, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -14, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-04-23 21:59:35 +0100
diff --git a/src/go.c b/src/go.c
index d78674f..5c4b1e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,7 +45,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 7, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 12, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -24, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-04-23 21:59:56 +0100
diff --git a/src/go.c b/src/go.c
index 5c4b1e7..5cdb31c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
-  double k = 1 - wrap(32 * p);
+  double k = 1 - 2 * wrap(16 * p);
   k *= k;
   k *= k;
   k *= k;
diff @ 2016-04-23 22:00:05 +0100
diff --git a/src/go.c b/src/go.c
index 5cdb31c..8548460 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
-  double k = 1 - 2 * wrap(16 * p);
+  double k = 1 - 3 * wrap(16 * p);
   k *= k;
   k *= k;
   k *= k;
diff @ 2016-04-23 22:00:08 +0100
diff --git a/src/go.c b/src/go.c
index 8548460..5cdb31c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
-  double k = 1 - 3 * wrap(16 * p);
+  double k = 1 - 2 * wrap(16 * p);
   k *= k;
   k *= k;
   k *= k;
diff @ 2016-04-23 22:00:11 +0100
diff --git a/src/go.c b/src/go.c
index 5cdb31c..650d3f2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,7 +53,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1.2;
+  double gain = 1.3;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-04-23 22:00:18 +0100
diff --git a/src/go.c b/src/go.c
index 650d3f2..1d8e086 100644
--- a/src/go.c
+++ b/src/go.c
@@ -36,8 +36,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // modulate delay times
   double p = phasor(&s->phase, 0.1);
-  double modulation = 1 * cos(twopi * p);
-  double modulation2 = 1 * sin(twopi * p);
+  double modulation = 10 * cos(twopi * p);
+  double modulation2 = 10 * sin(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation2)
diff @ 2016-04-23 22:00:40 +0100
diff --git a/src/go.c b/src/go.c
index 1d8e086..b71d32f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,7 +83,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += k;
   compressed[1] += k;
 
-  double b = wrap(500 * p - 100 * p);
+  double b = wrap(500 * p + 100 * p);
   double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
diff @ 2016-04-23 22:00:54 +0100
diff --git a/src/go.c b/src/go.c
index b71d32f..2a6aab7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,9 +83,9 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += k;
   compressed[1] += k;
 
-  double b = wrap(500 * p + 100 * p);
+  double b = wrap((500 + 100 * p) * p);
   double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
-    sin((3 + 2 * wrap(4 * p) > 0.5) * twopi * b));
+    sin((3 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
   
diff @ 2016-04-23 22:01:03 +0100
diff --git a/src/go.c b/src/go.c
index 2a6aab7..1ec282b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,7 +53,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1.3;
+  double gain = 0.1;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-04-23 22:01:17 +0100
diff --git a/src/go.c b/src/go.c
index 1ec282b..bd862ac 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double b = wrap((500 + 100 * p) * p);
   double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
-    sin((3 + 2 * wrap(8 * p) > 0.5) * twopi * b));
+    sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
   
diff @ 2016-04-23 22:01:30 +0100
diff --git a/src/go.c b/src/go.c
index bd862ac..00bd3b7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 2 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:01:36 +0100
diff --git a/src/go.c b/src/go.c
index 00bd3b7..835d131 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 2 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 3 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:01:41 +0100
diff --git a/src/go.c b/src/go.c
index 835d131..432a312 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 3 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 4 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:01:51 +0100
diff --git a/src/go.c b/src/go.c
index 432a312..6573f75 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 4 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 67 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:01:53 +0100
diff --git a/src/go.c b/src/go.c
index 6573f75..18fc0a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 67 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 6 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:02:03 +0100
diff --git a/src/go.c b/src/go.c
index 18fc0a6..3ee3f9a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 6 * sin((12 + 20 * (wrap(2 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 6 * sin((12 + 20 * (wrap(4 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:03:21 +0100
diff --git a/src/go.c b/src/go.c
index 3ee3f9a..dec3bfc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,7 +53,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 0.1;
+  double gain = 0.2;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
@@ -88,7 +88,12 @@ int go(S *s, int channels, const float *in, float *out) {
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
-  
+
+  int t = 65536 * p;
+  double a = bytebeat(8 * ("1234123412122424"[t%16]-'0') * t)
+
+  compressed[0] += a;
+  compressed[1] += a;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-04-23 22:03:31 +0100
diff --git a/src/go.c b/src/go.c
index dec3bfc..6b52307 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(8 * ("1234123412122424"[t%16]-'0') * t)
+  double a = bytebeat(8 * ("1234123412122424"[t%16]-'0') * t);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:03:47 +0100
diff --git a/src/go.c b/src/go.c
index 6b52307..70fc51f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(8 * ("1234123412122424"[t%16]-'0') * t);
+  double a = bytebeat(1 * ("1234123412122424"[t%16]-'0') * t);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:03:56 +0100
diff --git a/src/go.c b/src/go.c
index 70fc51f..2c1e9b2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[t%16]-'0') * t);
+  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:04:16 +0100
diff --git a/src/go.c b/src/go.c
index 2c1e9b2..9aa2a08 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t);
+  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> t));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:04:28 +0100
diff --git a/src/go.c b/src/go.c
index 9aa2a08..28e5205 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> t));
+  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> t) * 2);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:04:36 +0100
diff --git a/src/go.c b/src/go.c
index 28e5205..382ec98 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> t) * 2);
+  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 4)) * 2);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:04:40 +0100
diff --git a/src/go.c b/src/go.c
index 382ec98..160a38e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 4)) * 2);
+  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 2)) * 2);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:04:51 +0100
diff --git a/src/go.c b/src/go.c
index 160a38e..7ccba04 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("1234123412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 2)) * 2);
+  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 2)) * 2);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:05:08 +0100
diff --git a/src/go.c b/src/go.c
index 7ccba04..1e97053 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - (t >> (t >> 2)) * 2);
+  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - (t & 0xFF < 0x60);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:05:14 +0100
diff --git a/src/go.c b/src/go.c
index 1e97053..e75767f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - (t & 0xFF < 0x60);
+  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - ((t & 0xFF) < 0x60);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:05:20 +0100
diff --git a/src/go.c b/src/go.c
index e75767f..89d1802 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - ((t & 0xFF) < 0x60);
+  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - 8 * ((t & 0xFF) < 0x60);
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:05:33 +0100
diff --git a/src/go.c b/src/go.c
index 89d1802..cd4de97 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - 8 * ((t & 0xFF) < 0x60);
+  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - 8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:05:51 +0100
diff --git a/src/go.c b/src/go.c
index cd4de97..5810de0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,8 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(1 * ("8234823412122424"[(t>>10)%16]-'0') * t - 8 * (0x80 * ((t & 0xFF) < 0x60));
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t -
+            8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:06:11 +0100
diff --git a/src/go.c b/src/go.c
index 5810de0..3e57ea2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t -
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (*t >> 8 & 0xFF) < 0x80) - 
             8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
diff @ 2016-04-23 22:06:16 +0100
diff --git a/src/go.c b/src/go.c
index 3e57ea2..34d87ce 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (*t >> 8 & 0xFF) < 0x80) - 
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * ((t >> 8 & 0xFF) < 0x80) - 
             8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
diff @ 2016-04-23 22:06:21 +0100
diff --git a/src/go.c b/src/go.c
index 34d87ce..d988bdb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * ((t >> 8 & 0xFF) < 0x80) - 
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * ((t >> 8) & 0xFF) < 0x80) - 
             8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
diff @ 2016-04-23 22:06:33 +0100
diff --git a/src/go.c b/src/go.c
index d988bdb..b5b2f1e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * ((t >> 8) & 0xFF) < 0x80) - 
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x80) - 
             8 * (0x80 * ((t & 0xFF) < 0x60));
 
   compressed[0] += a;
diff @ 2016-04-23 22:06:42 +0100
diff --git a/src/go.c b/src/go.c
index b5b2f1e..1911540 100644
--- a/src/go.c
+++ b/src/go.c
@@ -91,7 +91,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = 65536 * p;
   double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x80) - 
-            8 * (0x80 * ((t & 0xFF) < 0x60));
+            8 * (0x80 * ((t & 0xFF) < 0x60)));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:07:04 +0100
diff --git a/src/go.c b/src/go.c
index 1911540..034837d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x80) - 
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 9) & 0xFF) < 0x80) - 
             8 * (0x80 * ((t & 0xFF) < 0x60)));
 
   compressed[0] += a;
@@ -109,3 +109,4 @@ int go(S *s, int channels, const float *in, float *out) {
   }
   return 0;
 }
+
diff @ 2016-04-23 22:07:12 +0100
diff --git a/src/go.c b/src/go.c
index 034837d..189857f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,8 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 9) & 0xFF) < 0x80) - 
-            8 * (0x80 * ((t & 0xFF) < 0x60)));
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 9) & 0xFF) < 0x80));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:07:28 +0100
diff --git a/src/go.c b/src/go.c
index 189857f..4086b92 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 9) & 0xFF) < 0x80));
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x80));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:07:35 +0100
diff --git a/src/go.c b/src/go.c
index 4086b92..9a05561 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x80));
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:07:40 +0100
diff --git a/src/go.c b/src/go.c
index 9a05561..03397ec 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%8]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:07:47 +0100
diff --git a/src/go.c b/src/go.c
index 03397ec..68b6b86 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] *= gain;
   compressed[1] *= gain;
 
-  double k = 1 - 2 * wrap(16 * p);
+  double k = 1 - 1 * wrap(16 * p);
   k *= k;
   k *= k;
   k *= k;
diff @ 2016-04-23 22:08:02 +0100
diff --git a/src/go.c b/src/go.c
index 68b6b86..f3e13e5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8234823412122424"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:10 +0100
diff --git a/src/go.c b/src/go.c
index f3e13e5..1eeacb3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>9)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:11 +0100
diff --git a/src/go.c b/src/go.c
index 1eeacb3..f3e13e5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>9)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:20 +0100
diff --git a/src/go.c b/src/go.c
index f3e13e5..1eeacb3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>10)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>9)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:23 +0100
diff --git a/src/go.c b/src/go.c
index 1eeacb3..71fd545 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>9)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>8)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:37 +0100
diff --git a/src/go.c b/src/go.c
index 71fd545..268b5ef 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>8)%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>(9 + (t < 0xC0))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:41 +0100
diff --git a/src/go.c b/src/go.c
index 268b5ef..bc86d51 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>(9 + (t < 0xC0))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>(9 + (t < 0xC000))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:08:53 +0100
diff --git a/src/go.c b/src/go.c
index bc86d51..e569c2b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>(9 + (t < 0xC000))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>(10 + (t < 0xC000))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:09:02 +0100
diff --git a/src/go.c b/src/go.c
index e569c2b..92c807b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>(10 + (t < 0xC000))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803010102020"[(t>>(10 + (t < 0xC000)))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:09:17 +0100
diff --git a/src/go.c b/src/go.c
index 92c807b..4782fa2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -84,7 +84,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += k;
 
   double b = wrap((500 + 100 * p) * p);
-  double bs = 0.5 * sin(twopi * b + 6 * sin((12 + 20 * (wrap(4 * p) > 0.5)) * twopi * p) *
+  double bs = 0.5 * sin(twopi * b + 10 * sin((12 + 20 * (wrap(4 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
diff @ 2016-04-23 22:09:25 +0100
diff --git a/src/go.c b/src/go.c
index 4782fa2..429ac1f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803010102020"[(t>>(10 + (t < 0xC000)))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
   compressed[0] += a;
   compressed[1] += a;
diff @ 2016-04-23 22:09:40 +0100
diff --git a/src/go.c b/src/go.c
index 429ac1f..4c01ea0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -92,8 +92,8 @@ int go(S *s, int channels, const float *in, float *out) {
   int t = 65536 * p;
   double a = bytebeat(2 * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
 
-  compressed[0] += a;
-  compressed[1] += a;
+  compressed[0] += a*0.5;
+  compressed[1] += a*0.5;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-04-23 22:10:13 +0100
diff --git a/src/go.c b/src/go.c
index 4c01ea0..e27c2c7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,7 +53,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 0.2;
+  double gain = 0.5;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t * (((t >> 12) & 0xFF) < 0x40));
+  double a = bytebeat(2 * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t));
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:10:29 +0100
diff --git a/src/go.c b/src/go.c
index e27c2c7..d0a4c85 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat(2 * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t));
+  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t));
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:10:35 +0100
diff --git a/src/go.c b/src/go.c
index d0a4c85..bc92cdf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -35,7 +35,7 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.1);
+  double p = phasor(&s->phase, 0.101);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
   double feedback[2] =
diff @ 2016-04-23 22:10:50 +0100
diff --git a/src/go.c b/src/go.c
index bc92cdf..7fd0cf8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t));
+  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t);
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:11:37 +0100
diff --git a/src/go.c b/src/go.c
index 7fd0cf8..0cfd1e9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -23,6 +23,7 @@ typedef struct {
   COMPRESS compress[2];
   SO2ECHO echo[2];
   SAMPHOLD sh[2];
+  double tempo;
 } S;
 
 // per sample DSP callback
@@ -31,11 +32,15 @@ int go(S *s, int channels, const float *in, float *out) {
   // trigger impulse on reload
   if (s->reloaded) {
     s->reloaded = 0;
+    s->tempo = 0.1;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
+
+
   // modulate delay times
-  double p = phasor(&s->phase, 0.101);
+  s->tempo *= 1.0001;
+  double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
   double feedback[2] =
diff @ 2016-04-23 22:11:41 +0100
diff --git a/src/go.c b/src/go.c
index 0cfd1e9..86c4ecd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 1.0001;
+  s->tempo *= 1;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:11:56 +0100
diff --git a/src/go.c b/src/go.c
index 86c4ecd..ae21df3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -37,9 +37,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
 
-
   // modulate delay times
-  s->tempo *= 1;
+  s->tempo *= 1.00000000001;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:12:13 +0100
diff --git a/src/go.c b/src/go.c
index ae21df3..a29e0ba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -94,7 +94,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(10 + (t < 0xC000)))%16]-'0') * t);
+  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%16]-'0') * t);
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:12:34 +0100
diff --git a/src/go.c b/src/go.c
index a29e0ba..f33518f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -94,7 +94,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%16]-'0') * t);
+  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%(p < 0.5 ? 8 : 16)]-'0') * t);
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:12:50 +0100
diff --git a/src/go.c b/src/go.c
index f33518f..d4ec35b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -38,7 +38,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 1.00000000001;
+  s->tempo *= 1.000000001;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:01 +0100
diff --git a/src/go.c b/src/go.c
index d4ec35b..2df95b9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -38,7 +38,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 1.000000001;
+  s->tempo *= 0.9999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:07 +0100
diff --git a/src/go.c b/src/go.c
index 2df95b9..9e62419 100644
--- a/src/go.c
+++ b/src/go.c
@@ -38,7 +38,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 0.9999999;
+  s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:15 +0100
diff --git a/src/go.c b/src/go.c
index 9e62419..a3af8be 100644
--- a/src/go.c
+++ b/src/go.c
@@ -38,7 +38,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 0.999999;
+  s->tempo *= 1;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:29 +0100
diff --git a/src/go.c b/src/go.c
index a3af8be..e74d086 100644
--- a/src/go.c
+++ b/src/go.c
@@ -32,13 +32,12 @@ int go(S *s, int channels, const float *in, float *out) {
   // trigger impulse on reload
   if (s->reloaded) {
     s->reloaded = 0;
-    s->tempo = 0.1;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
 
   // modulate delay times
-  s->tempo *= 1;
+  s->tempo *= 0.999999;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:39 +0100
diff --git a/src/go.c b/src/go.c
index e74d086..649ec3b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -37,7 +37,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
 
   // modulate delay times
-  s->tempo *= 0.999999;
+  s->tempo *= 1.000001;
   double p = phasor(&s->phase, s->tempo);
   double modulation = 10 * cos(twopi * p);
   double modulation2 = 10 * sin(twopi * p);
diff @ 2016-04-23 22:13:51 +0100
diff --git a/src/go.c b/src/go.c
index 649ec3b..f8cb611 100644
--- a/src/go.c
+++ b/src/go.c
@@ -93,7 +93,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[1] += samphold(&s->sh[1], bs, wrap(30 * b + 0.5));
 
   int t = 65536 * p;
-  double a = bytebeat((2 + 2 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%(p < 0.5 ? 8 : 16)]-'0') * t);
+  double a = bytebeat((2 + 3 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%(p < 0.5 ? 8 : 16)]-'0') * t);
 
   compressed[0] += a*0.5;
   compressed[1] += a*0.5;
diff @ 2016-04-23 22:14:00 +0100
diff --git a/src/go.c b/src/go.c
index f8cb611..18fd42b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,7 +86,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += k;
   compressed[1] += k;
 
-  double b = wrap((500 + 100 * p) * p);
+  double b = wrap((1500 + 200 * p) * p);
   double bs = 0.5 * sin(twopi * b + 10 * sin((12 + 20 * (wrap(4 * p) > 0.5)) * twopi * p) *
     sin((1 + 2 * wrap(8 * p) > 0.5) * twopi * b));
   compressed[0] += samphold(&s->sh[0], bs, wrap(30 * b));
diff @ 2016-04-23 22:14:10 +0100
diff --git a/src/go.c b/src/go.c
index 18fd42b..e95bcf0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -95,8 +95,8 @@ int go(S *s, int channels, const float *in, float *out) {
   int t = 65536 * p;
   double a = bytebeat((2 + 3 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%(p < 0.5 ? 8 : 16)]-'0') * t);
 
-  compressed[0] += a*0.5;
-  compressed[1] += a*0.5;
+  compressed[0] += a*0.25;
+  compressed[1] += a*0.25;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-04-23 22:15:40 +0100
diff --git a/src/go.c b/src/go.c
index e95bcf0..bb42398 100644
--- a/src/go.c
+++ b/src/go.c
@@ -95,8 +95,8 @@ int go(S *s, int channels, const float *in, float *out) {
   int t = 65536 * p;
   double a = bytebeat((2 + 3 * (p > 0.75)) * ("8030803101020205"[(t>>(9 + (t < 0xC000)))%(p < 0.5 ? 8 : 16)]-'0') * t);
 
-  compressed[0] += a*0.25;
-  compressed[1] += a*0.25;
+  compressed[0] = 0;
+  compressed[1] = 0;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-04-23 22:15:58 +0100
diff --git a/src/go.c b/src/go.c
index bb42398..60eacb6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,7 +101,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
-  double volume = 1;
+  double volume = 0
   mixdown[0] *= volume;
   mixdown[1] *= volume;
 
diff @ 2016-04-23 22:15:59 +0100
diff --git a/src/go.c b/src/go.c
index 60eacb6..3b4f821 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,7 +101,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
-  double volume = 0
+  double volume = 0;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
 

the end