session-2016-08-06-171916

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-08-06 18:20:22 +0100
diff --git a/src/go.c b/src/go.c
index 06cb1b1..510c558 100644
--- a/src/go.c
+++ b/src/go.c
@@ -44,6 +44,7 @@ typedef struct {
   int reloaded;
   COMPRESS compress;
   FLY fly[16];
+  PHASOR time;
 } S;
 
 int go
@@ -51,6 +52,7 @@ int go
   if (s->reloaded) {
     s->reloaded = 0;
   }
+  double t = phasor(&s->time, 133 / 60.0 / 64);
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], 220);
diff @ 2016-08-06 18:20:41 +0100
diff --git a/src/go.c b/src/go.c
index 510c558..56d0d23 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,13 +53,14 @@ int go
     s->reloaded = 0;
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
+  double e = 1 - wrap(32 * t);
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], 220);
   }
   double mixdown[2] =
-    { flies[0] / 8
-    , flies[1] / 8
+    { flies[0] / 8 * e
+    , flies[1] / 8 * e
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:20:54 +0100
diff --git a/src/go.c b/src/go.c
index 56d0d23..cdde66d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,7 +53,7 @@ int go
     s->reloaded = 0;
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
-  double e = 1 - wrap(32 * t);
+  double e = 1 - wrap(2.6666 * wrap(16 * t));
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], 220);
diff @ 2016-08-06 18:21:18 +0100
diff --git a/src/go.c b/src/go.c
index cdde66d..d8af2f1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -54,13 +54,14 @@ int go
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
+  double e2 = wrap(e + 0.5)
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], 220);
   }
   double mixdown[2] =
     { flies[0] / 8 * e
-    , flies[1] / 8 * e
+    , flies[1] / 8 * e2
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:21:20 +0100
diff --git a/src/go.c b/src/go.c
index d8af2f1..bb45b79 100644
--- a/src/go.c
+++ b/src/go.c
@@ -54,7 +54,7 @@ int go
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
-  double e2 = wrap(e + 0.5)
+  double e2 = wrap(e + 0.5);
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], 220);
diff @ 2016-08-06 18:21:52 +0100
diff --git a/src/go.c b/src/go.c
index bb45b79..46b056b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -55,9 +55,10 @@ int go
   double t = phasor(&s->time, 133 / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
   double e2 = wrap(e + 0.5);
+  double pitch = 220 - 20 * wrap(8 * t);
   double flies[2] = { 0, 0 };
   for (int i = 0; i < 16; ++i) {
-    flies[i & 1] += fly(&s->fly[i], 220);
+    flies[i & 1] += fly(&s->fly[i], pitch);
   }
   double mixdown[2] =
     { flies[0] / 8 * e
diff @ 2016-08-06 18:22:51 +0100
diff --git a/src/go.c b/src/go.c
index 46b056b..7fdf5d5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -45,6 +45,7 @@ typedef struct {
   COMPRESS compress;
   FLY fly[16];
   PHASOR time;
+  PHASOR bass;
 } S;
 
 int go
@@ -60,9 +61,13 @@ int go
   for (int i = 0; i < 16; ++i) {
     flies[i & 1] += fly(&s->fly[i], pitch);
   }
+  
+  double b = phasor(&s->bass, 55);
+  double bass = sin(twopi * b);
+  
   double mixdown[2] =
-    { flies[0] / 8 * e
-    , flies[1] / 8 * e2
+    { flies[0] / 8 * e   + bass
+    , flies[1] / 8 * e2  + bass
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:22:58 +0100
diff --git a/src/go.c b/src/go.c
index 7fdf5d5..9d580d0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ int go
   double bass = sin(twopi * b);
   
   double mixdown[2] =
-    { flies[0] / 8 * e   + bass
-    , flies[1] / 8 * e2  + bass
+    { flies[0] / 3 * e   + bass
+    , flies[1] / 3 * e2  + bass
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:23:02 +0100
diff --git a/src/go.c b/src/go.c
index 9d580d0..ed4c8b9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,8 +66,8 @@ int go
   double bass = sin(twopi * b);
   
   double mixdown[2] =
-    { flies[0] / 3 * e   + bass
-    , flies[1] / 3 * e2  + bass
+    { flies[0] * e   + bass
+    , flies[1] * e2  + bass
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:23:41 +0100
diff --git a/src/go.c b/src/go.c
index ed4c8b9..0dd604b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ int go
   }
   
   double b = phasor(&s->bass, 55);
-  double bass = sin(twopi * b);
+  double bass = sin(twopi * b + sin(twopi * 48 * t) * sin(twopi * 3 * b));
   
   double mixdown[2] =
     { flies[0] * e   + bass
diff @ 2016-08-06 18:24:17 +0100
diff --git a/src/go.c b/src/go.c
index 0dd604b..f28e137 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,9 @@ int go
   }
   
   double b = phasor(&s->bass, 55);
-  double bass = sin(twopi * b + sin(twopi * 48 * t) * sin(twopi * 3 * b));
+  double bass = sin(twopi * b +
+    2 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
+      sin(twopi * 3 * b));
   
   double mixdown[2] =
     { flies[0] * e   + bass
diff @ 2016-08-06 18:24:59 +0100
diff --git a/src/go.c b/src/go.c
index f28e137..f9fc4bd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,7 +65,10 @@ int go
   double b = phasor(&s->bass, 55);
   double bass = sin(twopi * b +
     2 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
-      sin(twopi * 3 * b));
+      sin(twopi * 3 * b) +
+    2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
+      sin(twopi * 5 * b)
+    );
   
   double mixdown[2] =
     { flies[0] * e   + bass
diff @ 2016-08-06 18:26:18 +0100
diff --git a/src/go.c b/src/go.c
index f9fc4bd..4ea9881 100644
--- a/src/go.c
+++ b/src/go.c
@@ -46,6 +46,7 @@ typedef struct {
   FLY fly[16];
   PHASOR time;
   PHASOR bass;
+  SAMPHOLD crush[2];
 } S;
 
 int go
@@ -71,8 +72,8 @@ int go
     );
   
   double mixdown[2] =
-    { flies[0] * e   + bass
-    , flies[1] * e2  + bass
+    { flies[0] * e   + samphold(&s->crush[0], bass, wrap(36 * b + 0.25))
+    , flies[1] * e2  + samphold(&s->crush[1], bass, wrap(36 * b + 0.75))
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:26:41 +0100
diff --git a/src/go.c b/src/go.c
index 4ea9881..9ddac73 100644
--- a/src/go.c
+++ b/src/go.c
@@ -63,7 +63,7 @@ int go
     flies[i & 1] += fly(&s->fly[i], pitch);
   }
   
-  double b = phasor(&s->bass, 55);
+  double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
     2 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
       sin(twopi * 3 * b) +
diff @ 2016-08-06 18:27:49 +0100
diff --git a/src/go.c b/src/go.c
index 9ddac73..da08187 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,10 +70,20 @@ int go
     2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
       sin(twopi * 5 * b)
     );
+
+  double kick = 1 - wrap(64 * t);
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= 16;
+  kick = sin(twopi * kick);
+  kick *= 3;
+  kick = tanh(kick);
   
   double mixdown[2] =
-    { flies[0] * e   + samphold(&s->crush[0], bass, wrap(36 * b + 0.25))
-    , flies[1] * e2  + samphold(&s->crush[1], bass, wrap(36 * b + 0.75))
+    { flies[0] * e   + samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) + kick
+    , flies[1] * e2  + samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) + kick
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:27:57 +0100
diff --git a/src/go.c b/src/go.c
index da08187..7b1141f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -79,7 +79,7 @@ int go
   kick *= 16;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = tanh(kick);
+  kick = 2 * tanh(kick);
   
   double mixdown[2] =
     { flies[0] * e   + samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) + kick
diff @ 2016-08-06 18:28:03 +0100
diff --git a/src/go.c b/src/go.c
index 7b1141f..a05a9e1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -76,7 +76,7 @@ int go
   kick *= kick;
   kick *= kick;
   kick *= kick;
-  kick *= 16;
+  kick *= 12;
   kick = sin(twopi * kick);
   kick *= 3;
   kick = 2 * tanh(kick);
diff @ 2016-08-06 18:29:17 +0100
diff --git a/src/go.c b/src/go.c
index a05a9e1..45b6138 100644
--- a/src/go.c
+++ b/src/go.c
@@ -80,10 +80,25 @@ int go
   kick = sin(twopi * kick);
   kick *= 3;
   kick = 2 * tanh(kick);
-  
+
+  double snare = 1 - wrap(32 * t + 0.5)
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= noise();
+  snare *= 4;
+  snare = tanh(snare);
+  snare *= 1.5;
+
   double mixdown[2] =
-    { flies[0] * e   + samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) + kick
-    , flies[1] * e2  + samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) + kick
+    { flies[0] * e   +
+	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
+	  kick + snare
+    , flies[1] * e2  +
+      samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
+      kick + snare
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:29:23 +0100
diff --git a/src/go.c b/src/go.c
index 45b6138..b3099ed 100644
--- a/src/go.c
+++ b/src/go.c
@@ -81,7 +81,7 @@ int go
   kick *= 3;
   kick = 2 * tanh(kick);
 
-  double snare = 1 - wrap(32 * t + 0.5)
+  double snare = 1 - wrap(32 * t + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-06 18:30:01 +0100
diff --git a/src/go.c b/src/go.c
index b3099ed..eb7361a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,6 +47,7 @@ typedef struct {
   PHASOR time;
   PHASOR bass;
   SAMPHOLD crush[2];
+  VCF snare;
 } S;
 
 int go
@@ -89,6 +90,7 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
+  snare += 16 * vcf(&s->snare, snare, 330, 10);
   snare = tanh(snare);
   snare *= 1.5;
 
diff @ 2016-08-06 18:30:09 +0100
diff --git a/src/go.c b/src/go.c
index eb7361a..679f212 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
-  snare += 16 * vcf(&s->snare, snare, 330, 10);
+  snare += 32 * vcf(&s->snare, snare, 330, 10);
   snare = tanh(snare);
   snare *= 1.5;
 
diff @ 2016-08-06 18:30:13 +0100
diff --git a/src/go.c b/src/go.c
index 679f212..2a6ea68 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
-  snare += 32 * vcf(&s->snare, snare, 330, 10);
+  snare += 64 * vcf(&s->snare, snare, 330, 10);
   snare = tanh(snare);
   snare *= 1.5;
 
diff @ 2016-08-06 18:30:25 +0100
diff --git a/src/go.c b/src/go.c
index 2a6ea68..28b90b8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,7 +90,7 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
-  snare += 64 * vcf(&s->snare, snare, 330, 10);
+  snare += 64 * vcf(&s->snare, snare, 550, 10);
   snare = tanh(snare);
   snare *= 1.5;
 
diff @ 2016-08-06 18:32:14 +0100
diff --git a/src/go.c b/src/go.c
index 28b90b8..86ed650 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,12 +48,18 @@ typedef struct {
   PHASOR bass;
   SAMPHOLD crush[2];
   VCF snare;
+  DELAY del1;
+  float del1buf[SR];
+  DELAY del2;
+  float del2buf[SR];
 } S;
 
 int go
 (S *s, int channels, const float *in, float *out) {
   if (s->reloaded) {
     s->reloaded = 0;
+    s->del1.length = SR;
+    s->del2.length = SR;
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
@@ -94,10 +100,15 @@ int go
   snare = tanh(snare);
   snare *= 1.5;
 
+  double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
+
+
+  delwrite(&s->del1, sin(snare + echo1);
+
   double mixdown[2] =
     { flies[0] * e   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  kick + snare
+	  kick + snare + echo1
     , flies[1] * e2  +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
       kick + snare
diff @ 2016-08-06 18:32:33 +0100
diff --git a/src/go.c b/src/go.c
index 86ed650..f0c59de 100644
--- a/src/go.c
+++ b/src/go.c
@@ -103,7 +103,7 @@ int go
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
 
 
-  delwrite(&s->del1, sin(snare + echo1);
+  delwrite(&s->del1, sin(snare + echo1));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:33:08 +0100
diff --git a/src/go.c b/src/go.c
index f0c59de..9ae2257 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,9 +101,10 @@ int go
   snare *= 1.5;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
+  double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
 
-
-  delwrite(&s->del1, sin(snare + echo1));
+  delwrite(&s->del2, sin(snare - echo1));
+  delwrite(&s->del1, sin(snare + echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
@@ -111,7 +112,7 @@ int go
 	  kick + snare + echo1
     , flies[1] * e2  +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      kick + snare
+      kick + snare + echo2
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:33:58 +0100
diff --git a/src/go.c b/src/go.c
index 9ae2257..6969ff4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,8 +100,10 @@ int go
   snare = tanh(snare);
   snare *= 1.5;
 
-  double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
-  double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0);
+  double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
+    (1 + 0.1 * sin(twopi * 4 * t)));
+  double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
+    (1 + 0.1 * sin(twopi * 4 * t)));
 
   delwrite(&s->del2, sin(snare - echo1));
   delwrite(&s->del1, sin(snare + echo2));
diff @ 2016-08-06 18:34:03 +0100
diff --git a/src/go.c b/src/go.c
index 6969ff4..87aa22f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -103,7 +103,7 @@ int go
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.1 * sin(twopi * 4 * t)));
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * sin(twopi * 4 * t)));
+    (1 + 0.1 * cos(twopi * 4 * t)));
 
   delwrite(&s->del2, sin(snare - echo1));
   delwrite(&s->del1, sin(snare + echo2));
diff @ 2016-08-06 18:34:13 +0100
diff --git a/src/go.c b/src/go.c
index 87aa22f..b3618f5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,7 +86,7 @@ int go
   kick *= 12;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 2 * tanh(kick);
+  kick = 0 * tanh(kick);
 
   double snare = 1 - wrap(32 * t + 0.5);
   snare *= snare;
diff @ 2016-08-06 18:34:25 +0100
diff --git a/src/go.c b/src/go.c
index b3618f5..85b35d0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ int go
   
   double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
-    2 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
+    3 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
       sin(twopi * 3 * b) +
     2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
       sin(twopi * 5 * b)
diff @ 2016-08-06 18:34:30 +0100
diff --git a/src/go.c b/src/go.c
index 85b35d0..eb58711 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,7 +73,7 @@ int go
   double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
     3 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
-      sin(twopi * 3 * b) +
+      sin(twopi * 7 * b) +
     2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
       sin(twopi * 5 * b)
     );
diff @ 2016-08-06 18:34:36 +0100
diff --git a/src/go.c b/src/go.c
index eb58711..c9f57cb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ int go
   
   double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
-    3 * sin(twopi * 4 * t) * sin(twopi * 48 * t) *
+    3 * sin(twopi * 8 * t) * sin(twopi * 48 * t) *
       sin(twopi * 7 * b) +
     2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
       sin(twopi * 5 * b)
diff @ 2016-08-06 18:34:57 +0100
diff --git a/src/go.c b/src/go.c
index c9f57cb..23effd8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,9 +73,9 @@ int go
   double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
     3 * sin(twopi * 8 * t) * sin(twopi * 48 * t) *
-      sin(twopi * 7 * b) +
-    2 * cos(twopi * 4 * t) * sin(twopi * 96 * t) *
-      sin(twopi * 5 * b)
+      sin(twopi * 4 * b) +
+    4 * cos(twopi * 8 * t) * sin(twopi * 96 * t) *
+      sin(twopi * 2 * b)
     );
 
   double kick = 1 - wrap(64 * t);
diff @ 2016-08-06 18:35:27 +0100
diff --git a/src/go.c b/src/go.c
index 23effd8..8c5598a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,9 +101,9 @@ int go
   snare *= 1.5;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * sin(twopi * 4 * t)));
+    (1 + 0.1 * sin(twopi * 4 * t)) / 16);
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * cos(twopi * 4 * t)));
+    (1 + 0.1 * cos(twopi * 4 * t)) / 16);
 
   delwrite(&s->del2, sin(snare - echo1));
   delwrite(&s->del1, sin(snare + echo2));
diff @ 2016-08-06 18:35:35 +0100
diff --git a/src/go.c b/src/go.c
index 8c5598a..e8601c8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,9 +101,9 @@ int go
   snare *= 1.5;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * sin(twopi * 4 * t)) / 16);
+    (1 + 0.1 * sin(twopi * 4 * t)) / 64);
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * cos(twopi * 4 * t)) / 16);
+    (1 + 0.1 * cos(twopi * 4 * t)) / 64);
 
   delwrite(&s->del2, sin(snare - echo1));
   delwrite(&s->del1, sin(snare + echo2));
diff @ 2016-08-06 18:35:50 +0100
diff --git a/src/go.c b/src/go.c
index e8601c8..766153d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -74,7 +74,7 @@ int go
   double bass = sin(twopi * b +
     3 * sin(twopi * 8 * t) * sin(twopi * 48 * t) *
       sin(twopi * 4 * b) +
-    4 * cos(twopi * 8 * t) * sin(twopi * 96 * t) *
+    4 * cos(twopi * 8 * t) * sin(twopi * 24 * t) *
       sin(twopi * 2 * b)
     );
 
diff @ 2016-08-06 18:35:55 +0100
diff --git a/src/go.c b/src/go.c
index 766153d..6815bc5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -72,7 +72,7 @@ int go
   
   double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
   double bass = sin(twopi * b +
-    3 * sin(twopi * 8 * t) * sin(twopi * 48 * t) *
+    3 * sin(twopi * 8 * t) * sin(twopi * 12 * t) *
       sin(twopi * 4 * b) +
     4 * cos(twopi * 8 * t) * sin(twopi * 24 * t) *
       sin(twopi * 2 * b)
diff @ 2016-08-06 18:36:09 +0100
diff --git a/src/go.c b/src/go.c
index 6815bc5..eb80256 100644
--- a/src/go.c
+++ b/src/go.c
@@ -88,7 +88,7 @@ int go
   kick *= 3;
   kick = 0 * tanh(kick);
 
-  double snare = 1 - wrap(32 * t + 0.5);
+  double snare = 1 - wrap(16 * t + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-06 18:36:23 +0100
diff --git a/src/go.c b/src/go.c
index eb80256..5b3f07c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -105,8 +105,8 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.1 * cos(twopi * 4 * t)) / 64);
 
-  delwrite(&s->del2, sin(snare - echo1));
-  delwrite(&s->del1, sin(snare + echo2));
+  delwrite(&s->del2, sin( - echo1));
+  delwrite(&s->del1, sin( + echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:36:39 +0100
diff --git a/src/go.c b/src/go.c
index 5b3f07c..27044ec 100644
--- a/src/go.c
+++ b/src/go.c
@@ -105,8 +105,8 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.1 * cos(twopi * 4 * t)) / 64);
 
-  delwrite(&s->del2, sin( - echo1));
-  delwrite(&s->del1, sin( + echo2));
+  delwrite(&s->del2, sin(snare - 1.5 * echo1));
+  delwrite(&s->del1, sin(snare + 1.5 * echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:36:50 +0100
diff --git a/src/go.c b/src/go.c
index 27044ec..b40f81e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,9 +101,9 @@ int go
   snare *= 1.5;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * sin(twopi * 4 * t)) / 64);
+    (1 + 0.1 * sin(twopi * 8 * t)) / 64);
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * cos(twopi * 4 * t)) / 64);
+    (1 + 0.1 * cos(twopi * 8 * t)) / 64);
 
   delwrite(&s->del2, sin(snare - 1.5 * echo1));
   delwrite(&s->del1, sin(snare + 1.5 * echo2));
diff @ 2016-08-06 18:36:54 +0100
diff --git a/src/go.c b/src/go.c
index b40f81e..7c5ebde 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,9 +101,9 @@ int go
   snare *= 1.5;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * sin(twopi * 8 * t)) / 64);
+    (1 + 0.25 * sin(twopi * 8 * t)) / 64);
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.1 * cos(twopi * 8 * t)) / 64);
+    (1 + 0.25 * cos(twopi * 8 * t)) / 64);
 
   delwrite(&s->del2, sin(snare - 1.5 * echo1));
   delwrite(&s->del1, sin(snare + 1.5 * echo2));
diff @ 2016-08-06 18:37:04 +0100
diff --git a/src/go.c b/src/go.c
index 7c5ebde..dd82739 100644
--- a/src/go.c
+++ b/src/go.c
@@ -105,8 +105,8 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.25 * cos(twopi * 8 * t)) / 64);
 
-  delwrite(&s->del2, sin(snare - 1.5 * echo1));
-  delwrite(&s->del1, sin(snare + 1.5 * echo2));
+  delwrite(&s->del2, sin(- 1.5 * echo1));
+  delwrite(&s->del1, sin(+ 1.5 * echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:37:20 +0100
diff --git a/src/go.c b/src/go.c
index dd82739..e476e5b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,7 +98,7 @@ int go
   snare *= 4;
   snare += 64 * vcf(&s->snare, snare, 550, 10);
   snare = tanh(snare);
-  snare *= 1.5;
+  snare *= 0;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.25 * sin(twopi * 8 * t)) / 64);
diff @ 2016-08-06 18:37:47 +0100
diff --git a/src/go.c b/src/go.c
index e476e5b..12722c1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go
     flies[i & 1] += fly(&s->fly[i], pitch);
   }
   
-  double b = phasor(&s->bass, 55 - 5 * wrap(2 * t));
+  double b = phasor(&s->bass, 55 - 10 * (wrap(32 * t) > 0.5));
   double bass = sin(twopi * b +
     3 * sin(twopi * 8 * t) * sin(twopi * 12 * t) *
       sin(twopi * 4 * b) +
diff @ 2016-08-06 18:38:15 +0100
diff --git a/src/go.c b/src/go.c
index 12722c1..4d3b998 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go
     flies[i & 1] += fly(&s->fly[i], pitch);
   }
   
-  double b = phasor(&s->bass, 55 - 10 * (wrap(32 * t) > 0.5));
+  double b = phasor(&s->bass, 55 - 10 * (wrap(32 * t) > 0.5) + 5 * (wrap(16 * t) > 0.5));
   double bass = sin(twopi * b +
     3 * sin(twopi * 8 * t) * sin(twopi * 12 * t) *
       sin(twopi * 4 * b) +
diff @ 2016-08-06 18:38:31 +0100
diff --git a/src/go.c b/src/go.c
index 4d3b998..1781fed 100644
--- a/src/go.c
+++ b/src/go.c
@@ -111,10 +111,10 @@ int go
   double mixdown[2] =
     { flies[0] * e   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  kick + snare + echo1
+	  kick + snare + echo1 * e
     , flies[1] * e2  +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      kick + snare + echo2
+      kick + snare + echo2 * e2
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:38:57 +0100
diff --git a/src/go.c b/src/go.c
index 1781fed..b387714 100644
--- a/src/go.c
+++ b/src/go.c
@@ -78,7 +78,7 @@ int go
       sin(twopi * 2 * b)
     );
 
-  double kick = 1 - wrap(64 * t);
+  double kick = 1 - wrap(2.666 * wrap(32 * t));
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:39:06 +0100
diff --git a/src/go.c b/src/go.c
index b387714..755f32f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,7 +86,7 @@ int go
   kick *= 12;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 0 * tanh(kick);
+  kick = 3 * tanh(kick);
 
   double snare = 1 - wrap(16 * t + 0.5);
   snare *= snare;
diff @ 2016-08-06 18:39:32 +0100
diff --git a/src/go.c b/src/go.c
index 755f32f..f44180d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -88,7 +88,7 @@ int go
   kick *= 3;
   kick = 3 * tanh(kick);
 
-  double snare = 1 - wrap(16 * t + 0.5);
+  double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
   snare *= snare;
   snare *= snare;
@@ -98,7 +98,7 @@ int go
   snare *= 4;
   snare += 64 * vcf(&s->snare, snare, 550, 10);
   snare = tanh(snare);
-  snare *= 0;
+  snare *= 2;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.25 * sin(twopi * 8 * t)) / 64);
diff @ 2016-08-06 18:39:54 +0100
diff --git a/src/go.c b/src/go.c
index f44180d..0aaf8c1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -96,7 +96,7 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
-  snare += 64 * vcf(&s->snare, snare, 550, 10);
+  snare += 64 * vcf(&s->snare, snare, 550 + 110 * (wrap(16 * t) > 0.5), 10);
   snare = tanh(snare);
   snare *= 2;
 
diff @ 2016-08-06 18:40:06 +0100
diff --git a/src/go.c b/src/go.c
index 0aaf8c1..09f81a9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -96,7 +96,8 @@ int go
   snare *= snare;
   snare *= noise();
   snare *= 4;
-  snare += 64 * vcf(&s->snare, snare, 550 + 110 * (wrap(16 * t) > 0.5), 10);
+  snare += 64 * vcf(&s->snare, snare, 550 + 330 * (wrap(16 * t) > 0.5), 10);
+  snare += 64 * vcf(&s->snare, snare, 550 + 330 * (wrap(16 * t) > 0.5), 10);
   snare = tanh(snare);
   snare *= 2;
 
diff @ 2016-08-06 18:40:09 +0100
diff --git a/src/go.c b/src/go.c
index 09f81a9..ea0f967 100644
--- a/src/go.c
+++ b/src/go.c
@@ -97,7 +97,6 @@ int go
   snare *= noise();
   snare *= 4;
   snare += 64 * vcf(&s->snare, snare, 550 + 330 * (wrap(16 * t) > 0.5), 10);
-  snare += 64 * vcf(&s->snare, snare, 550 + 330 * (wrap(16 * t) > 0.5), 10);
   snare = tanh(snare);
   snare *= 2;
 
diff @ 2016-08-06 18:40:39 +0100
diff --git a/src/go.c b/src/go.c
index ea0f967..ab804f3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,9 +57,11 @@ typedef struct {
 int go
 (S *s, int channels, const float *in, float *out) {
   if (s->reloaded) {
+    memset(S, 0, sizeof(S));
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
+
   }
   double t = phasor(&s->time, 133 / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
diff @ 2016-08-06 18:40:40 +0100
diff --git a/src/go.c b/src/go.c
index ab804f3..945692d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ typedef struct {
 int go
 (S *s, int channels, const float *in, float *out) {
   if (s->reloaded) {
-    memset(S, 0, sizeof(S));
+    memset(s, 0, sizeof(S));
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
diff @ 2016-08-06 18:40:59 +0100
diff --git a/src/go.c b/src/go.c
index 945692d..faa4ba7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ typedef struct {
 int go
 (S *s, int channels, const float *in, float *out) {
   if (s->reloaded) {
-    memset(s, 0, sizeof(S));
+    //memset(s, 0, sizeof(S));
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
@@ -107,7 +107,7 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.25 * cos(twopi * 8 * t)) / 64);
 
-  delwrite(&s->del2, sin(- 1.5 * echo1));
+  delwrite(&s->del2, sin(kick - 1.5 * echo1));
   delwrite(&s->del1, sin(+ 1.5 * echo2));
 
   double mixdown[2] =
diff @ 2016-08-06 18:41:04 +0100
diff --git a/src/go.c b/src/go.c
index faa4ba7..b13d6ab 100644
--- a/src/go.c
+++ b/src/go.c
@@ -108,7 +108,7 @@ int go
     (1 + 0.25 * cos(twopi * 8 * t)) / 64);
 
   delwrite(&s->del2, sin(kick - 1.5 * echo1));
-  delwrite(&s->del1, sin(+ 1.5 * echo2));
+  delwrite(&s->del1, sin(kick + 1.5 * echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:41:18 +0100
diff --git a/src/go.c b/src/go.c
index b13d6ab..214912e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -103,9 +103,9 @@ int go
   snare *= 2;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.25 * sin(twopi * 8 * t)) / 64);
+    (1 + 0.25 * sin(twopi * 8 * t)));
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.25 * cos(twopi * 8 * t)) / 64);
+    (1 + 0.25 * cos(twopi * 8 * t)));
 
   delwrite(&s->del2, sin(kick - 1.5 * echo1));
   delwrite(&s->del1, sin(kick + 1.5 * echo2));
diff @ 2016-08-06 18:42:28 +0100
diff --git a/src/go.c b/src/go.c
index 214912e..8ab52cf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -52,6 +52,7 @@ typedef struct {
   float del1buf[SR];
   DELAY del2;
   float del2buf[SR];
+  PITCHSHIFT ps[4];
 } S;
 
 int go
@@ -107,6 +108,11 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
     (1 + 0.25 * cos(twopi * 8 * t)));
 
+  echo1 += pitchshift(&s->ps[0], 5, 100, 3, echo1);
+  echo1 += pitchshift(&s->ps[1], 5, 100, -6, echo1);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
+  echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
+
   delwrite(&s->del2, sin(kick - 1.5 * echo1));
   delwrite(&s->del1, sin(kick + 1.5 * echo2));
 
diff @ 2016-08-06 18:42:34 +0100
diff --git a/src/go.c b/src/go.c
index 8ab52cf..37a463e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -113,8 +113,8 @@ int go
   echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
-  delwrite(&s->del2, sin(kick - 1.5 * echo1));
-  delwrite(&s->del1, sin(kick + 1.5 * echo2));
+  delwrite(&s->del2, sin(kick - echo1));
+  delwrite(&s->del1, sin(kick + echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:42:48 +0100
diff --git a/src/go.c b/src/go.c
index 37a463e..93ff5ce 100644
--- a/src/go.c
+++ b/src/go.c
@@ -113,8 +113,8 @@ int go
   echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
-  delwrite(&s->del2, sin(kick - echo1));
-  delwrite(&s->del1, sin(kick + echo2));
+  delwrite(&s->del2, sin(-echo1));
+  delwrite(&s->del1, sin(echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:43:00 +0100
diff --git a/src/go.c b/src/go.c
index 93ff5ce..cd8172b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -104,9 +104,9 @@ int go
   snare *= 2;
 
   double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.25 * sin(twopi * 8 * t)));
+    (1 + 0. * sin(twopi * 8 * t)));
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
-    (1 + 0.25 * cos(twopi * 8 * t)));
+    (1 + 0. * cos(twopi * 8 * t)));
 
   echo1 += pitchshift(&s->ps[0], 5, 100, 3, echo1);
   echo1 += pitchshift(&s->ps[1], 5, 100, -6, echo1);
diff @ 2016-08-06 18:43:09 +0100
diff --git a/src/go.c b/src/go.c
index cd8172b..516b096 100644
--- a/src/go.c
+++ b/src/go.c
@@ -103,9 +103,9 @@ int go
   snare = tanh(snare);
   snare *= 2;
 
-  double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
+  double echo1 = delread4(&s->del1, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * sin(twopi * 8 * t)));
-  double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 / 3.0 * 1000.0 *
+  double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
   echo1 += pitchshift(&s->ps[0], 5, 100, 3, echo1);
diff @ 2016-08-06 18:43:26 +0100
diff --git a/src/go.c b/src/go.c
index 516b096..7bcaa28 100644
--- a/src/go.c
+++ b/src/go.c
@@ -79,7 +79,7 @@ int go
       sin(twopi * 4 * b) +
     4 * cos(twopi * 8 * t) * sin(twopi * 24 * t) *
       sin(twopi * 2 * b)
-    );
+    ) * 0;
 
   double kick = 1 - wrap(2.666 * wrap(32 * t));
   kick *= kick;
diff @ 2016-08-06 18:43:36 +0100
diff --git a/src/go.c b/src/go.c
index 7bcaa28..4cdeed9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -119,10 +119,10 @@ int go
   double mixdown[2] =
     { flies[0] * e   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  kick + snare + echo1 * e
+	  kick + snare + echo1
     , flies[1] * e2  +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      kick + snare + echo2 * e2
+      kick + snare + echo2
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:43:50 +0100
diff --git a/src/go.c b/src/go.c
index 4cdeed9..078855a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -113,8 +113,8 @@ int go
   echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
-  delwrite(&s->del2, sin(-echo1));
-  delwrite(&s->del1, sin(echo2));
+  delwrite(&s->del2, tanh(-echo1));
+  delwrite(&s->del1, tanh(echo2));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:44:31 +0100
diff --git a/src/go.c b/src/go.c
index 078855a..a1ef65f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -53,6 +53,7 @@ typedef struct {
   DELAY del2;
   float del2buf[SR];
   PITCHSHIFT ps[4];
+  HIP hip[2];
 } S;
 
 int go
@@ -113,8 +114,8 @@ int go
   echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
-  delwrite(&s->del2, tanh(-echo1));
-  delwrite(&s->del1, tanh(echo2));
+  delwrite(&s->del2, tanh(hip(&s->hip[0], -echo1, 10)));
+  delwrite(&s->del1, tanh(hip(&s->hip[1], echo2, 10)));
 
   double mixdown[2] =
     { flies[0] * e   +
diff @ 2016-08-06 18:44:53 +0100
diff --git a/src/go.c b/src/go.c
index a1ef65f..60913ca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,10 +118,10 @@ int go
   delwrite(&s->del1, tanh(hip(&s->hip[1], echo2, 10)));
 
   double mixdown[2] =
-    { flies[0] * e   +
+    { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
 	  kick + snare + echo1
-    , flies[1] * e2  +
+    , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
       kick + snare + echo2
     };
diff @ 2016-08-06 18:45:08 +0100
diff --git a/src/go.c b/src/go.c
index 60913ca..ef2f952 100644
--- a/src/go.c
+++ b/src/go.c
@@ -120,10 +120,10 @@ int go
   double mixdown[2] =
     { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  kick + snare + echo1
+	  echo1
     , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      kick + snare + echo2
+      echo2
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:46:08 +0100
diff --git a/src/go.c b/src/go.c
index ef2f952..8c4231a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -54,6 +54,7 @@ typedef struct {
   float del2buf[SR];
   PITCHSHIFT ps[4];
   HIP hip[2];
+  LOP lop[2];
 } S;
 
 int go
@@ -114,8 +115,10 @@ int go
   echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
-  delwrite(&s->del2, tanh(hip(&s->hip[0], -echo1, 10)));
-  delwrite(&s->del1, tanh(hip(&s->hip[1], echo2, 10)));
+  delwrite(&s->del2, tanh(
+    lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000));
+  delwrite(&s->del1, tanh(
+    lop(&s->lop[1], hip(&s->hip[1],  echo2, 10), 4000));
 
   double mixdown[2] =
     { flies[0] * e * 0   +
diff @ 2016-08-06 18:46:15 +0100
diff --git a/src/go.c b/src/go.c
index 8c4231a..a21266e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -116,9 +116,9 @@ int go
   echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
 
   delwrite(&s->del2, tanh(
-    lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000));
+    lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000)));
   delwrite(&s->del1, tanh(
-    lop(&s->lop[1], hip(&s->hip[1],  echo2, 10), 4000));
+    lop(&s->lop[1], hip(&s->hip[1],  echo2, 10), 4000)));
 
   double mixdown[2] =
     { flies[0] * e * 0   +
diff @ 2016-08-06 18:46:32 +0100
diff --git a/src/go.c b/src/go.c
index a21266e..e4b0f88 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,10 +110,10 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
-  echo1 += pitchshift(&s->ps[0], 5, 100, 3, echo1);
-  echo1 += pitchshift(&s->ps[1], 5, 100, -6, echo1);
-  echo2 += pitchshift(&s->ps[2], 5, 100, 3, echo2);
-  echo2 += pitchshift(&s->ps[3], 5, 100, -6, echo2);
+  echo1 += pitchshift(&s->ps[0], 5, 100, 4, echo1);
+  echo1 += pitchshift(&s->ps[1], 5, 100, -8, echo1);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 4, echo2);
+  echo2 += pitchshift(&s->ps[3], 5, 100, -8, echo2);
 
   delwrite(&s->del2, tanh(
     lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000)));
diff @ 2016-08-06 18:46:49 +0100
diff --git a/src/go.c b/src/go.c
index e4b0f88..a60265c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,10 +110,10 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
-  echo1 += pitchshift(&s->ps[0], 5, 100, 4, echo1);
-  echo1 += pitchshift(&s->ps[1], 5, 100, -8, echo1);
-  echo2 += pitchshift(&s->ps[2], 5, 100, 4, echo2);
-  echo2 += pitchshift(&s->ps[3], 5, 100, -8, echo2);
+  echo1 += pitchshift(&s->ps[0], 5, 100, 4.1, echo1);
+  echo1 += pitchshift(&s->ps[1], 5, 100, -8.1, echo1);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 4.1, echo2);
+  echo2 += pitchshift(&s->ps[3], 5, 100, -8.1, echo2);
 
   delwrite(&s->del2, tanh(
     lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000)));
diff @ 2016-08-06 18:47:03 +0100
diff --git a/src/go.c b/src/go.c
index a60265c..c1a2307 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,9 +110,9 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
-  echo1 += pitchshift(&s->ps[0], 5, 100, 4.1, echo1);
+  echo1 += pitchshift(&s->ps[0], 5, 100, 4.2, echo1);
   echo1 += pitchshift(&s->ps[1], 5, 100, -8.1, echo1);
-  echo2 += pitchshift(&s->ps[2], 5, 100, 4.1, echo2);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 4.2, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -8.1, echo2);
 
   delwrite(&s->del2, tanh(
diff @ 2016-08-06 18:47:57 +0100
diff --git a/src/go.c b/src/go.c
index c1a2307..0549eff 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,7 +83,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap(2.666 * wrap(32 * t));
+  double kick = 1 - wrap(128 * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
@@ -110,10 +110,10 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
-  echo1 += pitchshift(&s->ps[0], 5, 100, 4.2, echo1);
-  echo1 += pitchshift(&s->ps[1], 5, 100, -8.1, echo1);
-  echo2 += pitchshift(&s->ps[2], 5, 100, 4.2, echo2);
-  echo2 += pitchshift(&s->ps[3], 5, 100, -8.1, echo2);
+  echo1 += pitchshift(&s->ps[0], 5, 100, 6, echo1);
+  echo1 += pitchshift(&s->ps[1], 5, 100, -12, echo1);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 6, echo2);
+  echo2 += pitchshift(&s->ps[3], 5, 100, -12, echo2);
 
   delwrite(&s->del2, tanh(
     lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000)));
@@ -123,10 +123,10 @@ int go
   double mixdown[2] =
     { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  echo1
+	  echo1// + kick
     , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      echo2
+      echo2// + kick
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:48:33 +0100
diff --git a/src/go.c b/src/go.c
index 0549eff..b427b06 100644
--- a/src/go.c
+++ b/src/go.c
@@ -123,10 +123,10 @@ int go
   double mixdown[2] =
     { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  echo1// + kick
+	  echo1 + kick
     , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      echo2// + kick
+      echo2 + kick
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:48:40 +0100
diff --git a/src/go.c b/src/go.c
index b427b06..9b66924 100644
--- a/src/go.c
+++ b/src/go.c
@@ -87,7 +87,6 @@ int go
   kick *= kick;
   kick *= kick;
   kick *= kick;
-  kick *= kick;
   kick *= 12;
   kick = sin(twopi * kick);
   kick *= 3;
diff @ 2016-08-06 18:48:47 +0100
diff --git a/src/go.c b/src/go.c
index 9b66924..0e24ade 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,8 +86,7 @@ int go
   double kick = 1 - wrap(128 * t);
   kick *= kick;
   kick *= kick;
-  kick *= kick;
-  kick *= 12;
+  kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
   kick = 3 * tanh(kick);
diff @ 2016-08-06 18:48:56 +0100
diff --git a/src/go.c b/src/go.c
index 0e24ade..5250395 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go
   kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 3 * tanh(kick);
+  kick = sin(3 * tanh(kick));
 
   double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
diff @ 2016-08-06 18:49:02 +0100
diff --git a/src/go.c b/src/go.c
index 5250395..cbbfad2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go
   kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = sin(3 * tanh(kick));
+  kick = 3 * sin(3 * tanh(kick));
 
   double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
diff @ 2016-08-06 18:49:08 +0100
diff --git a/src/go.c b/src/go.c
index cbbfad2..1896f0e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go
   kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 3 * sin(3 * tanh(kick));
+  kick = 4 * sin(3 * tanh(kick));
 
   double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
diff @ 2016-08-06 18:49:13 +0100
diff --git a/src/go.c b/src/go.c
index 1896f0e..5dd7ed1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go
   kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 4 * sin(3 * tanh(kick));
+  kick = 4 * sin(3 * sin(kick));
 
   double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
diff @ 2016-08-06 18:49:26 +0100
diff --git a/src/go.c b/src/go.c
index 5dd7ed1..d8a5bdd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go
   kick *= 24;
   kick = sin(twopi * kick);
   kick *= 3;
-  kick = 4 * sin(3 * sin(kick));
+  kick = 5 * tanh(4 * sin(3 * sin(kick)));
 
   double snare = 1 - wrap(5.3333 * wrap(16 * t + 0.5));
   snare *= snare;
diff @ 2016-08-06 18:49:53 +0100
diff --git a/src/go.c b/src/go.c
index d8a5bdd..cfe85a1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,7 +83,8 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap(128 * t);
+  double kick = 1 - wrap((wrap(16 * t > 0.75 ? 256) : 128) * t);
+  kick *= kick;
   kick *= kick;
   kick *= kick;
   kick *= 24;
diff @ 2016-08-06 18:50:01 +0100
diff --git a/src/go.c b/src/go.c
index cfe85a1..670cbb6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,7 +83,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t > 0.75 ? 256) : 128) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 256 : 128) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:50:12 +0100
diff --git a/src/go.c b/src/go.c
index 670cbb6..8eb101a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -87,7 +87,7 @@ int go
   kick *= kick;
   kick *= kick;
   kick *= kick;
-  kick *= 24;
+  kick *= 6;
   kick = sin(twopi * kick);
   kick *= 3;
   kick = 5 * tanh(4 * sin(3 * sin(kick)));
diff @ 2016-08-06 18:50:46 +0100
diff --git a/src/go.c b/src/go.c
index 8eb101a..7b0fadb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -55,6 +55,7 @@ typedef struct {
   PITCHSHIFT ps[4];
   HIP hip[2];
   LOP lop[2];
+  double bpm;
 } S;
 
 int go
@@ -64,9 +65,9 @@ int go
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
-
+    s->bpm = 133;
   }
-  double t = phasor(&s->time, 133 / 60.0 / 64);
+  double t = phasor(&s->time, s->bpm / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
   double e2 = wrap(e + 0.5);
   double pitch = 220 - 20 * wrap(8 * t);
diff @ 2016-08-06 18:51:01 +0100
diff --git a/src/go.c b/src/go.c
index 7b0fadb..1928462 100644
--- a/src/go.c
+++ b/src/go.c
@@ -67,6 +67,7 @@ int go
     s->del2.length = SR;
     s->bpm = 133;
   }
+  s->bpm *= 1.0000001;
   double t = phasor(&s->time, s->bpm / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
   double e2 = wrap(e + 0.5);
diff @ 2016-08-06 18:51:56 +0100
diff --git a/src/go.c b/src/go.c
index 1928462..b36f4cc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,7 +65,7 @@ int go
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
-    s->bpm = 133;
+    //s->bpm = 133;
   }
   s->bpm *= 1.0000001;
   double t = phasor(&s->time, s->bpm / 60.0 / 64);
@@ -111,9 +111,9 @@ int go
   double echo2 = delread4(&s->del2, 133.0 / 60.0 * 1.0 * 1000.0 *
     (1 + 0. * cos(twopi * 8 * t)));
 
-  echo1 += pitchshift(&s->ps[0], 5, 100, 6, echo1);
+  echo1 += pitchshift(&s->ps[0], 5, 100, 12, echo1);
   echo1 += pitchshift(&s->ps[1], 5, 100, -12, echo1);
-  echo2 += pitchshift(&s->ps[2], 5, 100, 6, echo2);
+  echo2 += pitchshift(&s->ps[2], 5, 100, 12, echo2);
   echo2 += pitchshift(&s->ps[3], 5, 100, -12, echo2);
 
   delwrite(&s->del2, tanh(
@@ -124,10 +124,10 @@ int go
   double mixdown[2] =
     { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  echo1 + kick
+	  echo1 + kick + snare
     , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      echo2 + kick
+      echo2 + kick + snare
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:52:13 +0100
diff --git a/src/go.c b/src/go.c
index b36f4cc..fcdd906 100644
--- a/src/go.c
+++ b/src/go.c
@@ -112,9 +112,9 @@ int go
     (1 + 0. * cos(twopi * 8 * t)));
 
   echo1 += pitchshift(&s->ps[0], 5, 100, 12, echo1);
-  echo1 += pitchshift(&s->ps[1], 5, 100, -12, echo1);
+  echo1 += pitchshift(&s->ps[1], 5, 100, -24, echo1);
   echo2 += pitchshift(&s->ps[2], 5, 100, 12, echo2);
-  echo2 += pitchshift(&s->ps[3], 5, 100, -12, echo2);
+  echo2 += pitchshift(&s->ps[3], 5, 100, -24, echo2);
 
   delwrite(&s->del2, tanh(
     lop(&s->lop[0], hip(&s->hip[0], -echo1, 10), 4000)));
diff @ 2016-08-06 18:52:47 +0100
diff --git a/src/go.c b/src/go.c
index fcdd906..f8e3c96 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 256 : 128) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 256 : 512) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
@@ -124,10 +124,10 @@ int go
   double mixdown[2] =
     { flies[0] * e * 0   +
 	  samphold(&s->crush[0], bass, wrap(36 * b + 0.25)) +
-	  echo1 + kick + snare
+	  echo1 * 0 + kick + snare * 0
     , flies[1] * e2 * 0 +
       samphold(&s->crush[1], bass, wrap(36 * b + 0.75)) +
-      echo2 + kick + snare
+      echo2 * 0 + kick + snare * 0
     };
   compress(mixdown, &s->compress, 5, 15, 25, 60, mixdown);
   for (int c = 0; c < channels; ++c) {
diff @ 2016-08-06 18:52:52 +0100
diff --git a/src/go.c b/src/go.c
index f8e3c96..8708365 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 256 : 512) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 512) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:53:01 +0100
diff --git a/src/go.c b/src/go.c
index 8708365..8956d00 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 512) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 1) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:53:08 +0100
diff --git a/src/go.c b/src/go.c
index 8956d00..ffe99d7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 1) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 8) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:53:20 +0100
diff --git a/src/go.c b/src/go.c
index ffe99d7..0a2198f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -85,7 +85,7 @@ int go
       sin(twopi * 2 * b)
     ) * 0;
 
-  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 8) * t);
+  double kick = 1 - wrap((wrap(16 * t) > 0.75 ? 1024 : 0) * t);
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-06 18:53:27 +0100
diff --git a/src/go.c b/src/go.c
index 0a2198f..ba19194 100644
--- a/src/go.c
+++ b/src/go.c
@@ -67,7 +67,7 @@ int go
     s->del2.length = SR;
     //s->bpm = 133;
   }
-  s->bpm *= 1.0000001;
+  s->bpm *= 1.000001;
   double t = phasor(&s->time, s->bpm / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
   double e2 = wrap(e + 0.5);
diff @ 2016-08-06 18:53:54 +0100
diff --git a/src/go.c b/src/go.c
index ba19194..a57c373 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,9 +65,9 @@ int go
     s->reloaded = 0;
     s->del1.length = SR;
     s->del2.length = SR;
-    //s->bpm = 133;
+    s->bpm =30;
   }
-  s->bpm *= 1.000001;
+  //s->bpm *= 1.000001;
   double t = phasor(&s->time, s->bpm / 60.0 / 64);
   double e = 1 - wrap(2.6666 * wrap(16 * t));
   double e2 = wrap(e + 0.5);

the end