session-2018-09-01-204151

clive

a C audio live-coding skeleton

diff @ 2018-09-01 21:42:01 +0100
diff --git a/src/go.c b/src/go.c
index b53e5b0d..a5f3394c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -10,7 +10,7 @@
 // =====================================================================
 // =====================================================================
 
-#define RESET 1
+#define RESET 0
 #define SR 48000
 #include "dsp.h"
 
diff @ 2018-09-01 21:42:16 +0100
diff --git a/src/go.c b/src/go.c
index a5f3394c..0f3d7d19 100644
--- a/src/go.c
+++ b/src/go.c
@@ -225,9 +225,9 @@ go(S *s, int channels, const float *in, float *out)
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->so2.shift[2 * c + 0], 2, 100,
-      lop(&s->so2.lag[0], -12, 1e-3), feedback[c]);
+      lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
-      lop(&s->so2.lag[0],  19, 1e-3), down);
+      lop(&s->so2.lag[0],  19, 1e-4), down);
     feedback[c] = feedback[c] - down - up;
   }
   // compress feedback
diff @ 2018-09-01 21:42:33 +0100
diff --git a/src/go.c b/src/go.c
index 0f3d7d19..4873856b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = feedback[c] - down - up;
+    feedback[c] = sin((feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:42:38 +0100
diff --git a/src/go.c b/src/go.c
index 4873856b..b0b1fbd5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin((feedback[c] - down - up));
+    feedback[c] = sin(1.5 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:42:43 +0100
diff --git a/src/go.c b/src/go.c
index b0b1fbd5..d83434f1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin(1.5 * (feedback[c] - down - up));
+    feedback[c] = sin(2.5 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:42:49 +0100
diff --git a/src/go.c b/src/go.c
index d83434f1..1ea9eb36 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin(2.5 * (feedback[c] - down - up));
+    feedback[c] = sin(3.5 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:42:54 +0100
diff --git a/src/go.c b/src/go.c
index 1ea9eb36..1601a39d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin(3.5 * (feedback[c] - down - up));
+    feedback[c] = sin(5.5 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:43:02 +0100
diff --git a/src/go.c b/src/go.c
index 1601a39d..c8d29901 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
       lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin(5.5 * (feedback[c] - down - up));
+    feedback[c] = sin(9 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:43:07 +0100
diff --git a/src/go.c b/src/go.c
index c8d29901..1262916c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -225,9 +225,9 @@ go(S *s, int channels, const float *in, float *out)
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->so2.shift[2 * c + 0], 2, 100,
-      lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
+      -lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
-      lop(&s->so2.lag[0],  19, 1e-4), down);
+      -lop(&s->so2.lag[0],  19, 1e-4), down);
     feedback[c] = sin(9 * (feedback[c] - down - up));
   }
   // compress feedback
diff @ 2018-09-01 21:43:15 +0100
diff --git a/src/go.c b/src/go.c
index 1262916c..5e39eec4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -224,9 +224,9 @@ go(S *s, int channels, const float *in, float *out)
     };
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->so2.shift[2 * c + 0], 2, 100,
+    double down = pitchshift(&s->so2.shift[2 * c + 0], 2, 10,
       -lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
-    double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
+    double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 10,
       -lop(&s->so2.lag[0],  19, 1e-4), down);
     feedback[c] = sin(9 * (feedback[c] - down - up));
   }
diff @ 2018-09-01 21:43:22 +0100
diff --git a/src/go.c b/src/go.c
index 5e39eec4..24443ca4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -216,8 +216,8 @@ go(S *s, int channels, const float *in, float *out)
   // trigger impulse on reload
   double impulse[2] = { s->reloaded, s->reloaded };
   // modulate delay times
-  double p = phasor(&s->so2.phase, 0.01);
-  double modulation = 10 * cos(twopi * p);
+  double p = phasor(&s->so2.phase, 0.1);
+  double modulation = 1 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->so2.echo[1].del, 200 - modulation)
     , delread4(&s->so2.echo[0].del, 200 + modulation)
diff @ 2018-09-01 21:43:26 +0100
diff --git a/src/go.c b/src/go.c
index 24443ca4..f7549756 100644
--- a/src/go.c
+++ b/src/go.c
@@ -219,8 +219,8 @@ go(S *s, int channels, const float *in, float *out)
   double p = phasor(&s->so2.phase, 0.1);
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&s->so2.echo[1].del, 200 - modulation)
-    , delread4(&s->so2.echo[0].del, 200 + modulation)
+    { delread4(&s->so2.echo[1].del, 20 - modulation)
+    , delread4(&s->so2.echo[0].del, 20 + modulation)
     };
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
diff @ 2018-09-01 21:43:31 +0100
diff --git a/src/go.c b/src/go.c
index f7549756..f9c227a8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -219,8 +219,8 @@ go(S *s, int channels, const float *in, float *out)
   double p = phasor(&s->so2.phase, 0.1);
   double modulation = 1 * cos(twopi * p);
   double feedback[2] =
-    { delread4(&s->so2.echo[1].del, 20 - modulation)
-    , delread4(&s->so2.echo[0].del, 20 + modulation)
+    { delread4(&s->so2.echo[1].del, 2 - modulation)
+    , delread4(&s->so2.echo[0].del, 2 + modulation)
     };
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
diff @ 2018-09-01 21:43:43 +0100
diff --git a/src/go.c b/src/go.c
index f9c227a8..1e0cb655 100644
--- a/src/go.c
+++ b/src/go.c
@@ -228,7 +228,7 @@ go(S *s, int channels, const float *in, float *out)
       -lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
     double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 10,
       -lop(&s->so2.lag[0],  19, 1e-4), down);
-    feedback[c] = sin(9 * (feedback[c] - down - up));
+    feedback[c] = sin(5 * (feedback[c] - down - up));
   }
   // compress feedback
   double so2[2] = { 0, 0 };
diff @ 2018-09-01 21:43:49 +0100
diff --git a/src/go.c b/src/go.c
index 1e0cb655..658734a0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -224,9 +224,9 @@ go(S *s, int channels, const float *in, float *out)
     };
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->so2.shift[2 * c + 0], 2, 10,
+    double down = pitchshift(&s->so2.shift[2 * c + 0], 1, 10,
       -lop(&s->so2.lag[0], -12, 1e-4), feedback[c]);
-    double up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 10,
+    double up   = pitchshift(&s->so2.shift[2 * c + 1], 1, 10,
       -lop(&s->so2.lag[0],  19, 1e-4), down);
     feedback[c] = sin(5 * (feedback[c] - down - up));
   }
diff @ 2018-09-01 21:43:58 +0100
diff --git a/src/go.c b/src/go.c
index 658734a0..22083bae 100644
--- a/src/go.c
+++ b/src/go.c
@@ -238,7 +238,7 @@ go(S *s, int channels, const float *in, float *out)
   so2[1] *= gain;
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->so2.echo[c], 20, 500,
+    so2echo(&s->so2.echo[c], 20, 1000,
       tanh(so2[c] + RESET*impulse[c]));
   }
   mixdown[0] += so2[0];
diff @ 2018-09-01 21:44:01 +0100
diff --git a/src/go.c b/src/go.c
index 22083bae..8e83eebe 100644
--- a/src/go.c
+++ b/src/go.c
@@ -238,7 +238,7 @@ go(S *s, int channels, const float *in, float *out)
   so2[1] *= gain;
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->so2.echo[c], 20, 1000,
+    so2echo(&s->so2.echo[c], 50, 1000,
       tanh(so2[c] + RESET*impulse[c]));
   }
   mixdown[0] += so2[0];
diff @ 2018-09-01 21:44:20 +0100
diff --git a/src/go.c b/src/go.c
index 8e83eebe..5466ad5e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -317,8 +317,8 @@ go(S *s, int channels, const float *in, float *out)
       pink_init(&s->pink[0], 10, 0x1cedCafe + 0);
       pink_init(&s->pink[1], 10, 0x1cedCafe + 1);
     }
-    double na = env * pink(&s->pink[0]);
-    double nb = env * pink(&s->pink[1]);
+    double na = env * so2[0];
+    double nb = env * so2[1];
     double q = 10;
     na *= 10;
     nb *= 10;
diff @ 2018-09-01 21:44:25 +0100
diff --git a/src/go.c b/src/go.c
index 5466ad5e..e2aa40dd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -337,7 +337,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 0;
+    double gain = 0.1;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:44:28 +0100
diff --git a/src/go.c b/src/go.c
index e2aa40dd..0289a9aa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -337,7 +337,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 0.1;
+    double gain = 0.2;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:44:34 +0100
diff --git a/src/go.c b/src/go.c
index 0289a9aa..c0e56727 100644
--- a/src/go.c
+++ b/src/go.c
@@ -319,7 +319,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * so2[0];
     double nb = env * so2[1];
-    double q = 10;
+    double q = 20;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-09-01 21:44:37 +0100
diff --git a/src/go.c b/src/go.c
index c0e56727..073cb177 100644
--- a/src/go.c
+++ b/src/go.c
@@ -337,7 +337,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 0.2;
+    double gain = 0.5;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:44:42 +0100
diff --git a/src/go.c b/src/go.c
index 073cb177..39e1bac5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -319,7 +319,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * so2[0];
     double nb = env * so2[1];
-    double q = 20;
+    double q = 50;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-09-01 21:44:47 +0100
diff --git a/src/go.c b/src/go.c
index 39e1bac5..52185b32 100644
--- a/src/go.c
+++ b/src/go.c
@@ -337,7 +337,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 0.5;
+    double gain = 0.7;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:44:52 +0100
diff --git a/src/go.c b/src/go.c
index 52185b32..f6fbcbe6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -319,7 +319,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * so2[0];
     double nb = env * so2[1];
-    double q = 50;
+    double q = 70;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-09-01 21:45:03 +0100
diff --git a/src/go.c b/src/go.c
index f6fbcbe6..58dd5088 100644
--- a/src/go.c
+++ b/src/go.c
@@ -253,7 +253,7 @@ go(S *s, int channels, const float *in, float *out)
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
     double probability = pow(0.5, N - zeroes);
-    probability = (0.5 + 0 * (n >= 0xC001)) * probability - 0.5;
+    probability = (4.5 + 0 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
@@ -263,7 +263,6 @@ go(S *s, int channels, const float *in, float *out)
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
-  env = 0.5;
   freq = 50;
 
   // ===================================================================
diff @ 2018-09-01 21:45:15 +0100
diff --git a/src/go.c b/src/go.c
index 58dd5088..87fb518b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -318,7 +318,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * so2[0];
     double nb = env * so2[1];
-    double q = 70;
+    double q = 80;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-09-01 21:45:17 +0100
diff --git a/src/go.c b/src/go.c
index 87fb518b..b6e592e5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -336,7 +336,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 0.7;
+    double gain = 1;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:45:24 +0100
diff --git a/src/go.c b/src/go.c
index b6e592e5..1305194c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -336,7 +336,7 @@ go(S *s, int channels, const float *in, float *out)
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
-    double gain = 1;
+    double gain = 2;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-09-01 21:45:39 +0100
diff --git a/src/go.c b/src/go.c
index 1305194c..e243d064 100644
--- a/src/go.c
+++ b/src/go.c
@@ -253,7 +253,7 @@ go(S *s, int channels, const float *in, float *out)
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
     double probability = pow(0.5, N - zeroes);
-    probability = (4.5 + 0 * (n >= 0xC001)) * probability - 0.5;
+    probability = (8.5 + 0 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-09-01 21:45:50 +0100
diff --git a/src/go.c b/src/go.c
index e243d064..cf57b087 100644
--- a/src/go.c
+++ b/src/go.c
@@ -259,7 +259,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    double harmonic = 5 + clamp(N - zeroes, 0, 20);
+    double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
diff @ 2018-09-01 21:45:51 +0100
diff --git a/src/go.c b/src/go.c
index cf57b087..2fc40e56 100644
--- a/src/go.c
+++ b/src/go.c
@@ -263,7 +263,7 @@ go(S *s, int channels, const float *in, float *out)
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
-  freq = 50;
+//  freq = 50;
 
   // ===================================================================
   // = 3 = total intraliminal extraction
diff @ 2018-09-01 21:45:58 +0100
diff --git a/src/go.c b/src/go.c
index 2fc40e56..a46e5035 100644
--- a/src/go.c
+++ b/src/go.c
@@ -253,7 +253,7 @@ go(S *s, int channels, const float *in, float *out)
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
     double probability = pow(0.5, N - zeroes);
-    probability = (8.5 + 0 * (n >= 0xC001)) * probability - 0.5;
+    probability = (12.5 + 0 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-09-01 21:46:04 +0100
diff --git a/src/go.c b/src/go.c
index a46e5035..9b557d92 100644
--- a/src/go.c
+++ b/src/go.c
@@ -253,7 +253,7 @@ go(S *s, int channels, const float *in, float *out)
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
     double probability = pow(0.5, N - zeroes);
-    probability = (12.5 + 0 * (n >= 0xC001)) * probability - 0.5;
+    probability = (12.5 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-09-01 21:46:44 +0100
diff --git a/src/go.c b/src/go.c
index 9b557d92..e95ca941 100644
--- a/src/go.c
+++ b/src/go.c
@@ -197,6 +197,8 @@ typedef struct
   // ===================================================================
   // = append only data structure
 
+  BIQUAD bbq;
+
 } S;
 
 // =====================================================================
@@ -259,6 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
+    env = biquad(lowpass(&s->bbq, 10, flatq), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:46:51 +0100
diff --git a/src/go.c b/src/go.c
index e95ca941..7dcf1642 100644
--- a/src/go.c
+++ b/src/go.c
@@ -261,7 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    env = biquad(lowpass(&s->bbq, 10, flatq), env);
+    env = biquad(lowpass(&s->bbq, 10, 3), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:46:55 +0100
diff --git a/src/go.c b/src/go.c
index 7dcf1642..b5560392 100644
--- a/src/go.c
+++ b/src/go.c
@@ -261,7 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    env = biquad(lowpass(&s->bbq, 10, 3), env);
+    env = biquad(lowpass(&s->bbq, 10, 10), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:46:59 +0100
diff --git a/src/go.c b/src/go.c
index b5560392..7d873881 100644
--- a/src/go.c
+++ b/src/go.c
@@ -261,7 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    env = biquad(lowpass(&s->bbq, 10, 10), env);
+    env = biquad(lowpass(&s->bbq, 10, 5), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:47:09 +0100
diff --git a/src/go.c b/src/go.c
index 7d873881..709936f1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -261,7 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    env = biquad(lowpass(&s->bbq, 10, 5), env);
+    env = biquad(lowpass(&s->bbq, 4, 5), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:47:32 +0100
diff --git a/src/go.c b/src/go.c
index 709936f1..d8046c83 100644
--- a/src/go.c
+++ b/src/go.c
@@ -261,7 +261,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    env = biquad(lowpass(&s->bbq, 4, 5), env);
+    env = biquad(lowpass(&s->bbq, 4 * 60 / bpm, 5), env);
     double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-09-01 21:47:47 +0100
diff --git a/src/go.c b/src/go.c
index d8046c83..8eec2587 100644
--- a/src/go.c
+++ b/src/go.c
@@ -297,7 +297,7 @@ go(S *s, int channels, const float *in, float *out)
     double crush = phasor(&s->tcrush, 2000);
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
-    double kgain = 0;
+    double kgain = 1;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-09-01 21:47:55 +0100
diff --git a/src/go.c b/src/go.c
index 8eec2587..3dcf82dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -302,7 +302,7 @@ go(S *s, int channels, const float *in, float *out)
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
-    double gain = 1;
+    double gain = 2;
     gain = samphold(&s->tgate[1], gain, p);
     tilex[0] *= gain;
     tilex[1] *= gain;
diff @ 2018-09-01 21:48:16 +0100
diff --git a/src/go.c b/src/go.c
index 3dcf82dc..cc33bea9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -287,8 +287,8 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = wrap(16 * p + 0.5) < 0.5;
-    hat *= 0;
+    double hat = wrap(16 * p + 0.5) < 0.125;
+    hat *= 1;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 2, 5)*5);
@@ -302,7 +302,7 @@ go(S *s, int channels, const float *in, float *out)
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
-    double gain = 2;
+    double gain = 3;
     gain = samphold(&s->tgate[1], gain, p);
     tilex[0] *= gain;
     tilex[1] *= gain;
diff @ 2018-09-01 21:48:25 +0100
diff --git a/src/go.c b/src/go.c
index cc33bea9..25db61c6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -290,7 +290,7 @@ go(S *s, int channels, const float *in, float *out)
     double hat = wrap(16 * p + 0.5) < 0.125;
     hat *= 1;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 2, 5)*5);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
diff @ 2018-09-01 21:48:33 +0100
diff --git a/src/go.c b/src/go.c
index 25db61c6..9e290535 100644
--- a/src/go.c
+++ b/src/go.c
@@ -288,10 +288,10 @@ go(S *s, int channels, const float *in, float *out)
     kick *= 1 + kickenv;
     kick = tanh(kick);
     double hat = wrap(16 * p + 0.5) < 0.125;
-    hat *= 1;
+    hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 5)*5);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 5)*5);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     double crush = phasor(&s->tcrush, 2000);
diff @ 2018-09-01 21:48:39 +0100
diff --git a/src/go.c b/src/go.c
index 9e290535..6ab94ca7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -291,7 +291,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 5)*5);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 15)*15);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     double crush = phasor(&s->tcrush, 2000);
diff @ 2018-09-01 21:48:47 +0100
diff --git a/src/go.c b/src/go.c
index 6ab94ca7..65264c0b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -262,7 +262,7 @@ go(S *s, int channels, const float *in, float *out)
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
     env = biquad(lowpass(&s->bbq, 4 * 60 / bpm, 5), env);
-    double harmonic = 5 + clamp(N - zeroes - 4, 0, 20);
+    double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
diff @ 2018-09-01 21:49:01 +0100
diff --git a/src/go.c b/src/go.c
index 65264c0b..65c34d56 100644
--- a/src/go.c
+++ b/src/go.c
@@ -322,8 +322,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * so2[0];
     double nb = env * so2[1];
     double q = 80;
-    na *= 10;
-    nb *= 10;
+    na *= 5;
+    nb *= 5;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-09-01 21:49:16 +0100
diff --git a/src/go.c b/src/go.c
index 65c34d56..38bb4a03 100644
--- a/src/go.c
+++ b/src/go.c
@@ -294,7 +294,7 @@ go(S *s, int channels, const float *in, float *out)
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 15)*15);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
-    double crush = phasor(&s->tcrush, 2000);
+    double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
     double kgain = 1;
diff @ 2018-09-01 21:49:27 +0100
diff --git a/src/go.c b/src/go.c
index 38bb4a03..31299ea6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -287,7 +287,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = wrap(16 * p + 0.5) < 0.125;
+    double hat = wrap(16 * p + 0.5) < 0.125 * (1+p);
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
diff @ 2018-09-01 21:49:34 +0100
diff --git a/src/go.c b/src/go.c
index 31299ea6..abb00e5c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -287,7 +287,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = wrap(16 * p + 0.5) < 0.125 * (1+p);
+    double hat = wrap(32 * p) < 0.125 * (1+p);
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
diff @ 2018-09-01 21:49:49 +0100
diff --git a/src/go.c b/src/go.c
index abb00e5c..d9b20469 100644
--- a/src/go.c
+++ b/src/go.c
@@ -287,7 +287,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = wrap(32 * p) < 0.125 * (1+p);
+    double hat = wrap(5./3 * wrap(16 * p)) < 0.125 * (1+p);
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
diff @ 2018-09-01 21:50:11 +0100
diff --git a/src/go.c b/src/go.c
index d9b20469..f5fcfcf3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -291,7 +291,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 15)*15);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*23);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
diff @ 2018-09-01 21:50:17 +0100
diff --git a/src/go.c b/src/go.c
index f5fcfcf3..ded1d462 100644
--- a/src/go.c
+++ b/src/go.c
@@ -291,7 +291,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*23);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
diff @ 2018-09-01 21:50:24 +0100
diff --git a/src/go.c b/src/go.c
index ded1d462..d486bc49 100644
--- a/src/go.c
+++ b/src/go.c
@@ -292,8 +292,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
-    kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
-         *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
+    kick += sin(vcf(&s->tkick[2], kick, khz*7, 5)*5)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 5)*5);
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-09-01 21:50:33 +0100
diff --git a/src/go.c b/src/go.c
index d486bc49..8f6b00ee 100644
--- a/src/go.c
+++ b/src/go.c
@@ -292,8 +292,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
-    kick += sin(vcf(&s->tkick[2], kick, khz*7, 5)*5)
-         *  sin(vcf(&s->tkick[3], kick, khz*9, 5)*5);
+    kick += sin(vcf(&s->tkick[2], kick, khz*7, 150)*50)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 150)*50);
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-09-01 21:50:39 +0100
diff --git a/src/go.c b/src/go.c
index 8f6b00ee..49954429 100644
--- a/src/go.c
+++ b/src/go.c
@@ -292,8 +292,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
-    kick += sin(vcf(&s->tkick[2], kick, khz*7, 150)*50)
-         *  sin(vcf(&s->tkick[3], kick, khz*9, 150)*50);
+    kick += sin(vcf(&s->tkick[2], kick, khz*7, 100)*50)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 100)*50);
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-09-01 21:50:49 +0100
diff --git a/src/go.c b/src/go.c
index 49954429..e3eafa0b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -290,7 +290,7 @@ go(S *s, int channels, const float *in, float *out)
     double hat = wrap(5./3 * wrap(16 * p)) < 0.125 * (1+p);
     hat *= 2;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*7, 100)*50)
          *  sin(vcf(&s->tkick[3], kick, khz*9, 100)*50);
diff @ 2018-09-01 21:51:01 +0100
diff --git a/src/go.c b/src/go.c
index e3eafa0b..1c6bd0ae 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.1));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.1));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:51:04 +0100
diff --git a/src/go.c b/src/go.c
index 1c6bd0ae..ea5df431 100644
--- a/src/go.c
+++ b/src/go.c
@@ -362,7 +362,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 2);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./8);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-09-01 21:51:13 +0100
diff --git a/src/go.c b/src/go.c
index ea5df431..c2a3776a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -363,7 +363,7 @@ go(S *s, int channels, const float *in, float *out)
     double co = cos(t);
     double si = sin(t);
     double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./8);
-    double rdelms = ldelms;
+    double rdelms = 60000 / bpm * (p < 0.50 ? 1 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-09-01 21:51:20 +0100
diff --git a/src/go.c b/src/go.c
index c2a3776a..8cde2862 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.1));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.1));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.2));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.2));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:51:27 +0100
diff --git a/src/go.c b/src/go.c
index 8cde2862..852a12fe 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.2));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.2));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.3));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.3));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:51:33 +0100
diff --git a/src/go.c b/src/go.c
index 852a12fe..f509fd11 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.3));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.3));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.5));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.5));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:51:52 +0100
diff --git a/src/go.c b/src/go.c
index f509fd11..7fcb7477 100644
--- a/src/go.c
+++ b/src/go.c
@@ -334,8 +334,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na += 0*samphold(&s->psh[0], na, wrap(3 * pa[0]));
-    nb += 0*samphold(&s->psh[1], nb, wrap(3 * pb[0]));
+    na += 1*samphold(&s->psh[0], na, wrap(3 * pa[0]));
+    nb += 1*samphold(&s->psh[1], nb, wrap(3 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-09-01 21:51:56 +0100
diff --git a/src/go.c b/src/go.c
index 7fcb7477..c1ee71c1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -334,8 +334,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na += 1*samphold(&s->psh[0], na, wrap(3 * pa[0]));
-    nb += 1*samphold(&s->psh[1], nb, wrap(3 * pb[0]));
+    na = 1*samphold(&s->psh[0], na, wrap(3 * pa[0]));
+    nb = 1*samphold(&s->psh[1], nb, wrap(3 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-09-01 21:52:03 +0100
diff --git a/src/go.c b/src/go.c
index c1ee71c1..7881e0ec 100644
--- a/src/go.c
+++ b/src/go.c
@@ -322,8 +322,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * so2[0];
     double nb = env * so2[1];
     double q = 80;
-    na *= 5;
-    nb *= 5;
+    na *= 1;
+    nb *= 1;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-09-01 21:52:09 +0100
diff --git a/src/go.c b/src/go.c
index 7881e0ec..72726602 100644
--- a/src/go.c
+++ b/src/go.c
@@ -321,7 +321,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * so2[0];
     double nb = env * so2[1];
-    double q = 80;
+    double q = 800;
     na *= 1;
     nb *= 1;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-09-01 21:52:23 +0100
diff --git a/src/go.c b/src/go.c
index 72726602..70a854b7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.5));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.5));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.75));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.75));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:52:29 +0100
diff --git a/src/go.c b/src/go.c
index 70a854b7..efa273dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.75));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.75));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.875));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.875));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:52:43 +0100
diff --git a/src/go.c b/src/go.c
index efa273dc..68c67673 100644
--- a/src/go.c
+++ b/src/go.c
@@ -362,7 +362,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./8);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./32);
     double rdelms = 60000 / bpm * (p < 0.50 ? 1 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-09-01 21:52:47 +0100
diff --git a/src/go.c b/src/go.c
index 68c67673..95f63ea7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -363,7 +363,7 @@ go(S *s, int channels, const float *in, float *out)
     double co = cos(t);
     double si = sin(t);
     double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./32);
-    double rdelms = 60000 / bpm * (p < 0.50 ? 1 : 1./16);
+    double rdelms = 60000 / bpm * (p < 0.50 ? 1./2 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-09-01 21:52:50 +0100
diff --git a/src/go.c b/src/go.c
index 95f63ea7..790fbb46 100644
--- a/src/go.c
+++ b/src/go.c
@@ -362,7 +362,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./32);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./32);
     double rdelms = 60000 / bpm * (p < 0.50 ? 1./2 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-09-01 21:52:57 +0100
diff --git a/src/go.c b/src/go.c
index 790fbb46..d46b2d0a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -364,8 +364,8 @@ go(S *s, int channels, const float *in, float *out)
     double si = sin(t);
     double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./32);
     double rdelms = 60000 / bpm * (p < 0.50 ? 1./2 : 1./16);
-    ldelms = lop(&s->elop[0], ldelms, 5);
-    rdelms = lop(&s->elop[1], rdelms, 5);
+    ldelms = lop(&s->elop[0], ldelms, 7);
+    rdelms = lop(&s->elop[1], rdelms, 7);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2018-09-01 21:53:13 +0100
diff --git a/src/go.c b/src/go.c
index d46b2d0a..53499661 100644
--- a/src/go.c
+++ b/src/go.c
@@ -289,7 +289,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(5./3 * wrap(16 * p)) < 0.125 * (1+p);
     hat *= 2;
-    double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
+    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*7, 100)*50)
diff @ 2018-09-01 21:53:21 +0100
diff --git a/src/go.c b/src/go.c
index 53499661..f58173e4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -289,7 +289,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(5./3 * wrap(16 * p)) < 0.125 * (1+p);
     hat *= 2;
-    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
+    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*7, 100)*50)
diff @ 2018-09-01 21:53:26 +0100
diff --git a/src/go.c b/src/go.c
index f58173e4..2cbfb61c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -289,7 +289,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(5./3 * wrap(16 * p)) < 0.125 * (1+p);
     hat *= 2;
-    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
+    double khz = 50 - 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 60)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*7, 100)*50)
diff @ 2018-09-01 21:53:42 +0100
diff --git a/src/go.c b/src/go.c
index 2cbfb61c..9640af32 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 0.875));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 0.875));
+    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 1));
+    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 1));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:53:45 +0100
diff --git a/src/go.c b/src/go.c
index 9640af32..882e7ce0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,8 +370,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(0, pow(wrap(8 * p), 0.25), 1));
-    es[1] = mix(mixdown[1], es[1], mix(0, pow(wrap(8 * p), 0.25), 1));
+    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 1));
+    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 1));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:53:57 +0100
diff --git a/src/go.c b/src/go.c
index 882e7ce0..39a5b796 100644
--- a/src/go.c
+++ b/src/go.c
@@ -363,7 +363,7 @@ go(S *s, int channels, const float *in, float *out)
     double co = cos(t);
     double si = sin(t);
     double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./32);
-    double rdelms = 60000 / bpm * (p < 0.50 ? 1./2 : 1./16);
+    double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1./2 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 7);
     rdelms = lop(&s->elop[1], rdelms, 7);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-09-01 21:54:05 +0100
diff --git a/src/go.c b/src/go.c
index 39a5b796..f8b427c3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -363,7 +363,7 @@ go(S *s, int channels, const float *in, float *out)
     double co = cos(t);
     double si = sin(t);
     double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./32);
-    double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1./2 : 1./16);
+    double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1./2 : 1./64);
     ldelms = lop(&s->elop[0], ldelms, 7);
     rdelms = lop(&s->elop[1], rdelms, 7);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-09-01 21:54:18 +0100
diff --git a/src/go.c b/src/go.c
index f8b427c3..f7c6fada 100644
--- a/src/go.c
+++ b/src/go.c
@@ -297,7 +297,7 @@ go(S *s, int channels, const float *in, float *out)
     double crush = phasor(&s->tcrush, 2000 + pow(2, sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
-    double kgain = 1;
+    double kgain = 0;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-09-01 21:55:15 +0100
diff --git a/src/go.c b/src/go.c
index f7c6fada..2e68246d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -199,6 +199,9 @@ typedef struct
 
   BIQUAD bbq;
 
+  HIP ehip2[2];
+  LOP elop2[2];
+
 } S;
 
 // =====================================================================
@@ -368,10 +371,12 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 7);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
+    el = hip(&s->ehip2[0], el, 10);
+    er = hip(&s->ehip2[1], er, 10);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
-    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 1));
-    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 1));
+    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 0));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-09-01 21:55:42 +0100
diff --git a/src/go.c b/src/go.c
index 2e68246d..16c18dd0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -365,7 +365,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./32);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
     double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1./2 : 1./64);
     ldelms = lop(&s->elop[0], ldelms, 7);
     rdelms = lop(&s->elop[1], rdelms, 7);
@@ -373,6 +373,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     el = hip(&s->ehip2[0], el, 10);
     er = hip(&s->ehip2[1], er, 10);
+    el = lop(&s->elop2[0], el, 1000);
+    er = loo(&s->elop2[1], er, 1000);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
     es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0));
diff @ 2018-09-01 21:55:51 +0100
diff --git a/src/go.c b/src/go.c
index 16c18dd0..669a1f89 100644
--- a/src/go.c
+++ b/src/go.c
@@ -374,7 +374,7 @@ go(S *s, int channels, const float *in, float *out)
     el = hip(&s->ehip2[0], el, 10);
     er = hip(&s->ehip2[1], er, 10);
     el = lop(&s->elop2[0], el, 1000);
-    er = loo(&s->elop2[1], er, 1000);
+    er = lop(&s->elop2[1], er, 1000);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
     es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0));
diff @ 2018-09-01 21:55:58 +0100
diff --git a/src/go.c b/src/go.c
index 669a1f89..3f284156 100644
--- a/src/go.c
+++ b/src/go.c
@@ -373,8 +373,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     el = hip(&s->ehip2[0], el, 10);
     er = hip(&s->ehip2[1], er, 10);
-    el = lop(&s->elop2[0], el, 1000);
-    er = lop(&s->elop2[1], er, 1000);
+    el = lop(&s->elop2[0], el, 5000);
+    er = lop(&s->elop2[1], er, 5000);
     double es[2] = { co * el + si * er, -si * el + co * er };
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
     es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0));
diff @ 2018-09-01 21:56:07 +0100
diff --git a/src/go.c b/src/go.c
index 3f284156..179fdacc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -365,8 +365,8 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
-    double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1./2 : 1./64);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./64);
+    double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1 : 1./64);
     ldelms = lop(&s->elop[0], ldelms, 7);
     rdelms = lop(&s->elop[1], rdelms, 7);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-09-01 21:56:17 +0100
diff --git a/src/go.c b/src/go.c
index 179fdacc..f5aa3d48 100644
--- a/src/go.c
+++ b/src/go.c
@@ -365,7 +365,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./64);
+    double ldelms = 60000 / bpm * (wrap(2 * p) < 0.75 ? 1 : 1./64);
     double rdelms = 60000 / bpm * (wrap(2 * p) < 0.50 ? 1 : 1./64);
     ldelms = lop(&s->elop[0], ldelms, 7);
     rdelms = lop(&s->elop[1], rdelms, 7);
diff @ 2018-09-01 21:56:47 +0100
diff --git a/src/go.c b/src/go.c
index f5aa3d48..34b90ac7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -496,7 +496,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = phasor(&s->phase59, tempo);
     double osc = phasor(&s->osc59, hz);
     double o[2] = { 0, 0 };
-    if (0)
+    if (1)
     { // kick
       double peak = hz * 8;
       double env = 1 - wrap(2 * t);
@@ -534,7 +534,7 @@ go(S *s, int channels, const float *in, float *out)
       o[1] += 4 * tanh(env * hip(&s->hip59[4],
                              hip(&s->hip59[5], h * noise(), 3000), 1500));
     }
-    if (1)
+    if (0)
     { // bass
       double lfo = lop(&s->lop59[0], wrap(8/3. * t), 5);
       double sub = sin(twopi * osc);
diff @ 2018-09-01 21:57:00 +0100
diff --git a/src/go.c b/src/go.c
index 34b90ac7..9ed033cc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -579,8 +579,8 @@ go(S *s, int channels, const float *in, float *out)
       o[1] += r;
     }
     compress(o, &s->comp59, 5, 10, 15, 36, o);
-    mixdown[0] += o[0] * 0;
-    mixdown[1] += o[1] * 0;
+    mixdown[0] += o[0] * 1;
+    mixdown[1] += o[1] * 1;
   }
 
   // ===================================================================
diff @ 2018-09-01 21:57:35 +0100
diff --git a/src/go.c b/src/go.c
index 9ed033cc..3d6b18a2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -551,7 +551,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (0)
     { // bell
-      double env = lop(&s->lop59[4], clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+      double env = lop(&s->lop59[4], (wrap(4 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(4 * twopi * osc)
diff @ 2018-09-01 21:57:40 +0100
diff --git a/src/go.c b/src/go.c
index 3d6b18a2..e2be15a9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -549,7 +549,7 @@ go(S *s, int channels, const float *in, float *out)
       o[0] += bass;
       o[1] += bass;
     }
-    if (0)
+    if (1)
     { // bell
       double env = lop(&s->lop59[4], (wrap(4 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
diff @ 2018-09-01 21:57:51 +0100
diff --git a/src/go.c b/src/go.c
index e2be15a9..f37a5fc1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -551,7 +551,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // bell
-      double env = lop(&s->lop59[4], (wrap(4 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+      double env = lop(&s->lop59[4], (wrap(2 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(4 * twopi * osc)
diff @ 2018-09-01 21:58:07 +0100
diff --git a/src/go.c b/src/go.c
index f37a5fc1..2bf9ca47 100644
--- a/src/go.c
+++ b/src/go.c
@@ -517,7 +517,7 @@ go(S *s, int channels, const float *in, float *out)
     if (0)
     { // hihat
       double closed = 1 - wrap(8 * t - 0.58);
-      double open   = 1 - wrap(4 * t - 0.50);
+      double open   = 0;//1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
       closed *= 1.3;
diff @ 2018-09-01 21:58:14 +0100
diff --git a/src/go.c b/src/go.c
index 2bf9ca47..4b1d3482 100644
--- a/src/go.c
+++ b/src/go.c
@@ -514,12 +514,14 @@ go(S *s, int channels, const float *in, float *out)
       o[0] += kick;
       o[1] += kick;
     }
-    if (0)
+    if (1)
     { // hihat
       double closed = 1 - wrap(8 * t - 0.58);
       double open   = 0;//1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
+      closed *= closed;
+      closed *= closed;
       closed *= 1.3;
       open   *= 1.3;
       closed *= closed;
diff @ 2018-09-01 21:58:33 +0100
diff --git a/src/go.c b/src/go.c
index 4b1d3482..854aadb2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -516,7 +516,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // hihat
-      double closed = 1 - wrap(8 * t - 0.58);
+      double closed = (wrap(2 * t) > 0.75) * (1 - wrap(8 * t - 0.58));
       double open   = 0;//1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
diff @ 2018-09-01 21:58:43 +0100
diff --git a/src/go.c b/src/go.c
index 854aadb2..ff7f1b56 100644
--- a/src/go.c
+++ b/src/go.c
@@ -517,11 +517,14 @@ go(S *s, int channels, const float *in, float *out)
     if (1)
     { // hihat
       double closed = (wrap(2 * t) > 0.75) * (1 - wrap(8 * t - 0.58));
-      double open   = 0;//1 - wrap(4 * t - 0.50);
+      double open   = 1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
       closed *= closed;
       closed *= closed;
+      open   *= open;
+      open   *= open;
+      open   *= open;
       closed *= 1.3;
       open   *= 1.3;
       closed *= closed;
diff @ 2018-09-01 21:58:55 +0100
diff --git a/src/go.c b/src/go.c
index ff7f1b56..426cba25 100644
--- a/src/go.c
+++ b/src/go.c
@@ -516,7 +516,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // hihat
-      double closed = (wrap(2 * t) > 0.75) * (1 - wrap(8 * t - 0.58));
+      double closed = (wrap(2 * t) > 0.75) * (1 - wrap(16 * t - 0.25));
       double open   = 1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
diff @ 2018-09-01 21:59:01 +0100
diff --git a/src/go.c b/src/go.c
index 426cba25..d2513e75 100644
--- a/src/go.c
+++ b/src/go.c
@@ -516,7 +516,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // hihat
-      double closed = (wrap(2 * t) > 0.75) * (1 - wrap(16 * t - 0.25));
+      double closed = (wrap(4 * t) > 0.75) * (1 - wrap(16 * t - 0.25));
       double open   = 1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
diff @ 2018-09-01 21:59:11 +0100
diff --git a/src/go.c b/src/go.c
index d2513e75..873b9786 100644
--- a/src/go.c
+++ b/src/go.c
@@ -523,8 +523,6 @@ go(S *s, int channels, const float *in, float *out)
       closed *= closed;
       closed *= closed;
       open   *= open;
-      open   *= open;
-      open   *= open;
       closed *= 1.3;
       open   *= 1.3;
       closed *= closed;
diff @ 2018-09-01 21:59:33 +0100
diff --git a/src/go.c b/src/go.c
index 873b9786..8a8de986 100644
--- a/src/go.c
+++ b/src/go.c
@@ -382,8 +382,8 @@ go(S *s, int channels, const float *in, float *out)
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
-    mixdown[0] = es[0];
-    mixdown[1] = es[1];
+    mixdown[0] = es[0] * 0;
+    mixdown[1] = es[1] * 0;
   }
 
   // ===================================================================
@@ -537,7 +537,7 @@ go(S *s, int channels, const float *in, float *out)
       o[1] += 4 * tanh(env * hip(&s->hip59[4],
                              hip(&s->hip59[5], h * noise(), 3000), 1500));
     }
-    if (0)
+    if (1)
     { // bass
       double lfo = lop(&s->lop59[0], wrap(8/3. * t), 5);
       double sub = sin(twopi * osc);
diff @ 2018-09-01 21:59:45 +0100
diff --git a/src/go.c b/src/go.c
index 8a8de986..5e70ef2e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -573,7 +573,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      double lfo = 11 * sin(16 * twopi * t);
+      double lfo = 1 * sin(16 * twopi * t);
       double l = 0.3 * delread4(&s->del59l, ms4 + lfo) + bell;
       double r = 0.3 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2018-09-01 21:59:49 +0100
diff --git a/src/go.c b/src/go.c
index 5e70ef2e..80beffd2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -574,8 +574,8 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       double lfo = 1 * sin(16 * twopi * t);
-      double l = 0.3 * delread4(&s->del59l, ms4 + lfo) + bell;
-      double r = 0.3 * delread4(&s->del59r, ms4 - lfo) + bell;
+      double l = 0.9 * delread4(&s->del59l, ms4 + lfo) + bell;
+      double r = 0.9 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2018-09-01 22:00:17 +0100
diff --git a/src/go.c b/src/go.c
index 80beffd2..97d1ab8e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -574,7 +574,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       double lfo = 1 * sin(16 * twopi * t);
-      double l = 0.9 * delread4(&s->del59l, ms4 + lfo) + bell;
+      double l = (wrap(4 *p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59l, ms4 + lfo) + bell;
       double r = 0.9 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
diff @ 2018-09-01 22:00:24 +0100
diff --git a/src/go.c b/src/go.c
index 97d1ab8e..dcad29b6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
       bell *= 4;
       double lfo = 1 * sin(16 * twopi * t);
       double l = (wrap(4 *p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59l, ms4 + lfo) + bell;
-      double r = 0.9 * delread4(&s->del59r, ms4 - lfo) + bell;
+      double r = (wrap(4 *p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2018-09-01 22:00:49 +0100
diff --git a/src/go.c b/src/go.c
index dcad29b6..e130a9cc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -557,7 +557,7 @@ go(S *s, int channels, const float *in, float *out)
       double env = lop(&s->lop59[4], (wrap(2 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
-        = sin(4 * twopi * osc)
+        = sin((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
         * sin(5 * twopi * osc)
         * sin(7 * twopi * osc)
         * env
@@ -574,8 +574,8 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       double lfo = 1 * sin(16 * twopi * t);
-      double l = (wrap(4 *p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59l, ms4 + lfo) + bell;
-      double r = (wrap(4 *p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59r, ms4 - lfo) + bell;
+      double l = (wrap(4 * p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59l, ms4 + lfo) + bell;
+      double r = (wrap(4 * p) < 0.5 ? 0.9 : 0.3) * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2018-09-01 22:00:58 +0100
diff --git a/src/go.c b/src/go.c
index e130a9cc..036647a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -558,7 +558,7 @@ go(S *s, int channels, const float *in, float *out)
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
-        * sin(5 * twopi * osc)
+        * sin((wrap(2 *t) < 0.5) + 1)5 * twopi * osc)
         * sin(7 * twopi * osc)
         * env
         * 4;
diff @ 2018-09-01 22:01:08 +0100
diff --git a/src/go.c b/src/go.c
index 036647a6..cc10ba2d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -557,8 +557,8 @@ go(S *s, int channels, const float *in, float *out)
       double env = lop(&s->lop59[4], (wrap(2 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
-        = sin((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
-        * sin((wrap(2 *t) < 0.5) + 1)5 * twopi * osc)
+        = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
+        * sin(((wrap(2 *t) < 0.5) + 1)5 * twopi * osc)
         * sin(7 * twopi * osc)
         * env
         * 4;
diff @ 2018-09-01 22:01:15 +0100
diff --git a/src/go.c b/src/go.c
index cc10ba2d..93edd44c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -558,8 +558,8 @@ go(S *s, int channels, const float *in, float *out)
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
-        * sin(((wrap(2 *t) < 0.5) + 1)5 * twopi * osc)
-        * sin(7 * twopi * osc)
+        * sin(((wrap(2 *t) < 0.5) + 1) * twopi * osc)
+        * sin((7 * twopi * osc)
         * env
         * 4;
       double bell1 = pitchshift(&s->ps59[0], 2, 100, 3, bell);
diff @ 2018-09-01 22:01:19 +0100
diff --git a/src/go.c b/src/go.c
index 93edd44c..1f52f582 100644
--- a/src/go.c
+++ b/src/go.c
@@ -558,7 +558,7 @@ go(S *s, int channels, const float *in, float *out)
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
-        * sin(((wrap(2 *t) < 0.5) + 1) * twopi * osc)
+        * sin(((wrap(2 *t) < 0.5) + 1) * 5 * twopi * osc)
         * sin((7 * twopi * osc)
         * env
         * 4;
diff @ 2018-09-01 22:01:26 +0100
diff --git a/src/go.c b/src/go.c
index 1f52f582..4531496f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -559,7 +559,7 @@ go(S *s, int channels, const float *in, float *out)
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
         * sin(((wrap(2 *t) < 0.5) + 1) * 5 * twopi * osc)
-        * sin((7 * twopi * osc)
+        * sin(7 * twopi * osc)
         * env
         * 4;
       double bell1 = pitchshift(&s->ps59[0], 2, 100, 3, bell);
diff @ 2018-09-01 22:01:33 +0100
diff --git a/src/go.c b/src/go.c
index 4531496f..5b9db152 100644
--- a/src/go.c
+++ b/src/go.c
@@ -559,7 +559,7 @@ go(S *s, int channels, const float *in, float *out)
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
         * sin(((wrap(2 *t) < 0.5) + 1) * 5 * twopi * osc)
-        * sin(7 * twopi * osc)
+        * sin(((wrap(4 *t) < 0.5) + 1)7 * twopi * osc)
         * env
         * 4;
       double bell1 = pitchshift(&s->ps59[0], 2, 100, 3, bell);
diff @ 2018-09-01 22:01:39 +0100
diff --git a/src/go.c b/src/go.c
index 5b9db152..872b9203 100644
--- a/src/go.c
+++ b/src/go.c
@@ -559,7 +559,7 @@ go(S *s, int channels, const float *in, float *out)
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
         * sin(((wrap(2 *t) < 0.5) + 1) * 5 * twopi * osc)
-        * sin(((wrap(4 *t) < 0.5) + 1)7 * twopi * osc)
+        * sin(((wrap(4 *t) < 0.5) + 1) * 7 * twopi * osc)
         * env
         * 4;
       double bell1 = pitchshift(&s->ps59[0], 2, 100, 3, bell);
diff @ 2018-09-01 22:01:52 +0100
diff --git a/src/go.c b/src/go.c
index 872b9203..9d2aa1d5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -554,7 +554,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // bell
-      double env = lop(&s->lop59[4], (wrap(2 * t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+      double env = lop(&s->lop59[4], (wrap(t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
diff @ 2018-09-01 22:02:01 +0100
diff --git a/src/go.c b/src/go.c
index 9d2aa1d5..4b398268 100644
--- a/src/go.c
+++ b/src/go.c
@@ -554,7 +554,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // bell
-      double env = lop(&s->lop59[4], (wrap(t) > 0.50) * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+      double env = lop(&s->lop59[4], (clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
diff @ 2018-09-01 22:02:02 +0100
diff --git a/src/go.c b/src/go.c
index 4b398268..10b27e97 100644
--- a/src/go.c
+++ b/src/go.c
@@ -554,7 +554,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     if (1)
     { // bell
-      double env = lop(&s->lop59[4], (clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+      double env = lop(&s->lop59[4], clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
       double env2 = lop(&s->lop59[5], clamp(2 * (0.5 - wrap(8 * t)) * (wrap(4 * t) < 0.5), 0, 1), 15);
       double bell
         = sin(((wrap(t) < 0.5) + 1) * 4 * twopi * osc)
diff @ 2018-09-01 22:02:27 +0100
diff --git a/src/go.c b/src/go.c
index 10b27e97..8b5576b0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -498,8 +498,8 @@ go(S *s, int channels, const float *in, float *out)
     double o[2] = { 0, 0 };
     if (1)
     { // kick
-      double peak = hz * 8;
-      double env = 1 - wrap(2 * t);
+      double peak = hz * 2;
+      double env = 1 - wrap(4 * t);
       double env2 = env * 2;
       env *= env;
       env *= env;
diff @ 2018-09-01 22:02:32 +0100
diff --git a/src/go.c b/src/go.c
index 8b5576b0..59e1bfba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -498,7 +498,7 @@ go(S *s, int channels, const float *in, float *out)
     double o[2] = { 0, 0 };
     if (1)
     { // kick
-      double peak = hz * 2;
+      double peak = hz * 4;
       double env = 1 - wrap(4 * t);
       double env2 = env * 2;
       env *= env;
diff @ 2018-09-01 22:02:46 +0100
diff --git a/src/go.c b/src/go.c
index 59e1bfba..92d7e7c5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -546,7 +546,7 @@ go(S *s, int channels, const float *in, float *out)
       double bass
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
-        + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
+        + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
         + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
       bass *= 1.5;
       o[0] += bass;
diff @ 2018-09-01 22:02:51 +0100
diff --git a/src/go.c b/src/go.c
index 92d7e7c5..2227f841 100644
--- a/src/go.c
+++ b/src/go.c
@@ -546,7 +546,7 @@ go(S *s, int channels, const float *in, float *out)
       double bass
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
-        + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
+        + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 16 * hz, 6))
         + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
       bass *= 1.5;
       o[0] += bass;
diff @ 2018-09-01 22:03:02 +0100
diff --git a/src/go.c b/src/go.c
index 2227f841..36a985a1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -546,7 +546,7 @@ go(S *s, int channels, const float *in, float *out)
       double bass
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
-        + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 16 * hz, 6))
+        + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 16 * hz * pow(2, t), 6))
         + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
       bass *= 1.5;
       o[0] += bass;
diff @ 2018-09-01 22:03:14 +0100
diff --git a/src/go.c b/src/go.c
index 36a985a1..e3e23125 100644
--- a/src/go.c
+++ b/src/go.c
@@ -547,7 +547,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 16 * hz * pow(2, t), 6))
-        + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
+        + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz * pow(2, t), 4)) * 0.7;
       bass *= 1.5;
       o[0] += bass;
       o[1] += bass;
diff @ 2018-09-01 22:03:18 +0100
diff --git a/src/go.c b/src/go.c
index e3e23125..ac4dbacb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -547,7 +547,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(8 * twopi * vcf(&s->vcf59[0], bosc, 16 * hz * pow(2, t), 6))
-        + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz * pow(2, t), 4)) * 0.7;
+        + sin(4 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz * pow(2, t), 4)) * 0.7;
       bass *= 1.5;
       o[0] += bass;
       o[1] += bass;
diff @ 2018-09-01 22:03:52 +0100
diff --git a/src/go.c b/src/go.c
index ac4dbacb..dbb0da4d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -467,24 +467,6 @@ go(S *s, int channels, const float *in, float *out)
   }
 
   // ===================================================================
-  // = 7 = falling leaves
-  {
-    int t = (s->leaves += next) / 6;
-    double o = bytebeat
-    (
-      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
-        ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
-        ((t & 0x1) << (t & 0xa))) >> 20))
-    );
-    o *= 0.3;
-    o = hip1(&s->leaveshi, o, 1);
-    o = lop1(&s->leaveslo, o, 4000);
-    mixdown[0] += o;
-    mixdown[1] += o;
-  }
-
-  // ===================================================================
   // = 8 = fifty-nine stellations
   {
     s->del59 .length = SR/4;
@@ -582,11 +564,30 @@ go(S *s, int channels, const float *in, float *out)
       o[1] += r;
     }
     compress(o, &s->comp59, 5, 10, 15, 36, o);
-    mixdown[0] += o[0] * 1;
-    mixdown[1] += o[1] * 1;
+    mixdown[0] = o[0] * 1;
+    mixdown[1] = o[1] * 1;
   }
 
   // ===================================================================
+  // = 7 = falling leaves
+  {
+    int t = (s->leaves += next) / 6;
+    double o = bytebeat
+    (
+      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
+        ((20 - ((t >> 11) & 0xF)) +
+     ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
+        ((t & 0x1) << (t & 0xa))) >> 20))
+    );
+    o *= 0.3;
+    o = hip1(&s->leaveshi, o, 1);
+    o = lop1(&s->leaveslo, o, 4000);
+    mixdown[0] += o;
+    mixdown[1] += o;
+  }
+
+
+  // ===================================================================
   // = m = mixdown
   if (! next)
     compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
diff @ 2018-09-01 22:04:02 +0100
diff --git a/src/go.c b/src/go.c
index dbb0da4d..08b3a922 100644
--- a/src/go.c
+++ b/src/go.c
@@ -579,7 +579,7 @@ go(S *s, int channels, const float *in, float *out)
      ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
-    o *= 0.3;
+    o *= 0.2;
     o = hip1(&s->leaveshi, o, 1);
     o = lop1(&s->leaveslo, o, 4000);
     mixdown[0] += o;
diff @ 2018-09-01 22:04:23 +0100
diff --git a/src/go.c b/src/go.c
index 08b3a922..ab9a6dd0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -570,6 +570,7 @@ go(S *s, int channels, const float *in, float *out)
 
   // ===================================================================
   // = 7 = falling leaves
+  next = 1;
   {
     int t = (s->leaves += next) / 6;
     double o = bytebeat
@@ -582,8 +583,8 @@ go(S *s, int channels, const float *in, float *out)
     o *= 0.2;
     o = hip1(&s->leaveshi, o, 1);
     o = lop1(&s->leaveslo, o, 4000);
-    mixdown[0] += o;
-    mixdown[1] += o;
+    mixdown[0] = o;
+    mixdown[1] = o;
   }
 
 
diff @ 2018-09-01 22:04:56 +0100
diff --git a/src/go.c b/src/go.c
index ab9a6dd0..16248621 100644
--- a/src/go.c
+++ b/src/go.c
@@ -580,7 +580,14 @@ go(S *s, int channels, const float *in, float *out)
      ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
-    o *= 0.2;
+    double o2 = bytebeat
+    (
+      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
+        ((20 - ((t >> 11) & 0xF)) +
+     ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
+        ((t & 0x1) << (t & 0xa))) >> 20))
+    );
+    o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
     o = lop1(&s->leaveslo, o, 4000);
     mixdown[0] = o;
diff @ 2018-09-01 22:05:03 +0100
diff --git a/src/go.c b/src/go.c
index 16248621..76d10460 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,14 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
-        ((t & 0x1) << (t & 0xa))) >> 20))
-    );
-    double o2 = bytebeat
-    (
-      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
-        ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
+     ((0x1111 * (((2 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.15;
diff @ 2018-09-01 22:05:09 +0100
diff --git a/src/go.c b/src/go.c
index 76d10460..ab572249 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((2 * (t >> 11)) & 0xf) | 8) *
+     ((0x1111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.15;
diff @ 2018-09-01 22:05:14 +0100
diff --git a/src/go.c b/src/go.c
index ab572249..87b7006b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((3 * (t >> 11)) & 0xf) | 8) *
+     ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.15;
diff @ 2018-09-01 22:05:18 +0100
diff --git a/src/go.c b/src/go.c
index 87b7006b..17beeff9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:05:22 +0100
diff --git a/src/go.c b/src/go.c
index 17beeff9..c574bdc5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
-        ((20 - ((t >> 11) & 0xF)) +
+        ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
diff @ 2018-09-01 22:05:32 +0100
diff --git a/src/go.c b/src/go.c
index c574bdc5..3a122b22 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:05:54 +0100
diff --git a/src/go.c b/src/go.c
index 3a122b22..b11eb6d5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:06:04 +0100
diff --git a/src/go.c b/src/go.c
index b11eb6d5..a8d2bec6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2))) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2)) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:06:07 +0100
diff --git a/src/go.c b/src/go.c
index a8d2bec6..e9ab7015 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:06:20 +0100
diff --git a/src/go.c b/src/go.c
index e9ab7015..e14a7087 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
+      (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-09-01 22:06:24 +0100
diff --git a/src/go.c b/src/go.c
index e14a7087..0439fa25 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x111111 * (((3 * (t >> 11)) & 0xf) | 8) *
+     ((0x111111 * (((8 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.15;
diff @ 2018-09-01 22:06:31 +0100
diff --git a/src/go.c b/src/go.c
index 0439fa25..364a889c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x111111 * (((8 * (t >> 11)) & 0xf) | 8) *
+     ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.15;
diff @ 2018-09-01 22:06:41 +0100
diff --git a/src/go.c b/src/go.c
index 364a889c..c899cfb5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -578,7 +578,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
-        ((t & 0x1) << (t & 0xa))) >> 20))
+        ((t & 0x1) << (t & 0xa0))) >> 20))
     );
     o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-09-01 22:06:46 +0100
diff --git a/src/go.c b/src/go.c
index c899cfb5..9f594ef9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -578,7 +578,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
-        ((t & 0x1) << (t & 0xa0))) >> 20))
+        ((t & 0x1) << (t & 0xa0))) >> 19))
     );
     o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-09-01 22:06:52 +0100
diff --git a/src/go.c b/src/go.c
index 9f594ef9..ac2b8f77 100644
--- a/src/go.c
+++ b/src/go.c
@@ -578,7 +578,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
-        ((t & 0x1) << (t & 0xa0))) >> 19))
+        ((t & 0x1) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-09-01 22:06:58 +0100
diff --git a/src/go.c b/src/go.c
index ac2b8f77..197745a3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0xf)|8) * t) >>
+      (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:06 +0100
diff --git a/src/go.c b/src/go.c
index 197745a3..b59454dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((4 * (t >> (11 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
+      (0x111111 * (((4 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:14 +0100
diff --git a/src/go.c b/src/go.c
index b59454dc..e0d18bdc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((4 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
+      (0x111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:18 +0100
diff --git a/src/go.c b/src/go.c
index e0d18bdc..a78faa08 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
+      (0x11111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:21 +0100
diff --git a/src/go.c b/src/go.c
index a78faa08..58816f7d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x11111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:07:27 +0100
diff --git a/src/go.c b/src/go.c
index 58816f7d..986447b2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x11111111 * (((8 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x11111111 * (((18 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:07:31 +0100
diff --git a/src/go.c b/src/go.c
index 986447b2..a6bc973c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x11111111 * (((18 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x11111111 * (((20 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:07:36 +0100
diff --git a/src/go.c b/src/go.c
index a6bc973c..17d0e452 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((12 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
+      (0x11111111 * (((2018 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x11111111 * (((20 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:41 +0100
diff --git a/src/go.c b/src/go.c
index 17d0e452..192ae9f3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((2018 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
-     ((0x11111111 * (((20 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:07:48 +0100
diff --git a/src/go.c b/src/go.c
index 192ae9f3..7e90778d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((2018 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0x3f)|8) * t) >>
+      (0x11111111 * (((2018 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:52 +0100
diff --git a/src/go.c b/src/go.c
index 7e90778d..59aa95cd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((2018 * (t >> (12 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x11111111 * (((2018 * (t >> (14 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:07:57 +0100
diff --git a/src/go.c b/src/go.c
index 59aa95cd..e3a83fcd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((2018 * (t >> (14 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x11111111 * (((2018 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:08:03 +0100
diff --git a/src/go.c b/src/go.c
index e3a83fcd..2b06f73d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((2018 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x11111111 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((18 - ((t >> 11) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:08:09 +0100
diff --git a/src/go.c b/src/go.c
index 2b06f73d..07bb37e0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x11111111 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
-        ((18 - ((t >> 11) & 0xF)) +
+        ((18 - ((t >> 10) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:08:16 +0100
diff --git a/src/go.c b/src/go.c
index 07bb37e0..2d1bc56f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x11111111 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
-        ((18 - ((t >> 10) & 0xF)) +
+        ((2 - ((t >> 10) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:08:21 +0100
diff --git a/src/go.c b/src/go.c
index 2d1bc56f..97d4a19f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x1 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x1) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:08:36 +0100
diff --git a/src/go.c b/src/go.c
index 97d4a19f..27b8a156 100644
--- a/src/go.c
+++ b/src/go.c
@@ -578,7 +578,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x1 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
      ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
-        ((t & 0x1) << (t & 0xa0))) >> 17))
+        ((t & 0x10) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-09-01 22:08:44 +0100
diff --git a/src/go.c b/src/go.c
index 27b8a156..2e152dcf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
-     ((0x11111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:08:52 +0100
diff --git a/src/go.c b/src/go.c
index 2e152dcf..39e584e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((109 * (t >> 11)) & 0xf) | 0x10) *
+     ((0x111111 * (((109 * (t >> 12)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:09:08 +0100
diff --git a/src/go.c b/src/go.c
index 39e584e7..f3f96955 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1 * (((20180109 * (t >> (10 >> (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((109 * (t >> 12)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:09:17 +0100
diff --git a/src/go.c b/src/go.c
index f3f96955..21a3e80d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 2)))) & 0xff)|8) * t) >>
+      (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((109 * (t >> 12)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:09:24 +0100
diff --git a/src/go.c b/src/go.c
index 21a3e80d..e9b90ef9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((2 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((109 * (t >> 12)) & 0xf) | 0x10) *
+     ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:09:32 +0100
diff --git a/src/go.c b/src/go.c
index e9b90ef9..9e2858c1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
-        ((2 - ((t >> 10) & 0xF)) +
+        ((2 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:09:38 +0100
diff --git a/src/go.c b/src/go.c
index 9e2858c1..51bca036 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
-        ((2 - ((t >> 11) & 0xF)) +
+        ((2 - ((t >> 9) & 0xF)) +
      ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:09:41 +0100
diff --git a/src/go.c b/src/go.c
index 51bca036..da847f2f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
-        ((2 - ((t >> 9) & 0xF)) +
+        ((3 - ((t >> 9) & 0xF)) +
      ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x10) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:09:49 +0100
diff --git a/src/go.c b/src/go.c
index da847f2f..6edd27e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -578,7 +578,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((3 - ((t >> 9) & 0xF)) +
      ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
-        ((t & 0x10) << (t & 0xa0))) >> 17))
+        ((t & 0x20) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-09-01 22:09:55 +0100
diff --git a/src/go.c b/src/go.c
index 6edd27e7..93e21c35 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((3 - ((t >> 9) & 0xF)) +
-     ((0x111111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
+     ((0x1111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:09:58 +0100
diff --git a/src/go.c b/src/go.c
index 93e21c35..204b7715 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((3 - ((t >> 9) & 0xF)) +
-     ((0x1111 * (((109 * (t >> 13)) & 0xf) | 0x10) *
+     ((0x11 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:10:03 +0100
diff --git a/src/go.c b/src/go.c
index 204b7715..f38a7742 100644
--- a/src/go.c
+++ b/src/go.c
@@ -577,7 +577,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((3 - ((t >> 9) & 0xF)) +
-     ((0x11 * (((109 * (t >> 13)) & 0xf) | 0x10) *
+     ((0x1 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
     );
     o *= 0.15;
diff @ 2018-09-01 22:10:05 +0100
diff --git a/src/go.c b/src/go.c
index f38a7742..3b2f4011 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
-        ((3 - ((t >> 9) & 0xF)) +
+        ((4 - ((t >> 9) & 0xF)) +
      ((0x1 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:10:10 +0100
diff --git a/src/go.c b/src/go.c
index 3b2f4011..14e248a7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -576,7 +576,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
-        ((4 - ((t >> 9) & 0xF)) +
+        ((8 - ((t >> 9) & 0xF)) +
      ((0x1 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
     );
diff @ 2018-09-01 22:10:13 +0100
diff --git a/src/go.c b/src/go.c
index 14e248a7..986eb36d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
+      (0x * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((8 - ((t >> 9) & 0xF)) +
      ((0x1 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:10:16 +0100
diff --git a/src/go.c b/src/go.c
index 986eb36d..4c3abe39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -575,7 +575,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
+      (0x0 * (((20180109 * (t >> (10 << (t & 0x1000 ? 1 : 4)))) & 0xff)|8) * t) >>
         ((8 - ((t >> 9) & 0xF)) +
      ((0x1 * (((109 * (t >> 13)) & 0xf) | 0x10) *
         ((t & 0x20) << (t & 0xa0))) >> 17))
diff @ 2018-09-01 22:10:24 +0100
diff --git a/src/go.c b/src/go.c
index 4c3abe39..9f4d59bd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -592,7 +592,7 @@ go(S *s, int channels, const float *in, float *out)
   // = m = mixdown
   if (! next)
     compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1;
+  double volume = -;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c)

the end