session-2018-06-09-203602

clive

a C audio live-coding skeleton

diff @ 2018-06-09 21:36:21 +0100
diff --git a/src/go.c b/src/go.c
index 8f29ba11..e0af1d0b 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-06-09 21:36:26 +0100
diff --git a/src/go.c b/src/go.c
index e0af1d0b..8f29ba11 100644
--- a/src/go.c
+++ b/src/go.c
@@ -10,7 +10,7 @@
 // =====================================================================
 // =====================================================================
 
-#define RESET 0
+#define RESET 1
 #define SR 48000
 #include "dsp.h"
 
diff @ 2018-06-09 21:36:29 +0100
diff --git a/src/go.c b/src/go.c
index 8f29ba11..e0af1d0b 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-06-09 21:36:43 +0100
diff --git a/src/go.c b/src/go.c
index e0af1d0b..3fe953b7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -210,9 +210,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-06-09 21:37:06 +0100
diff --git a/src/go.c b/src/go.c
index 3fe953b7..56f40a91 100644
--- a/src/go.c
+++ b/src/go.c
@@ -302,8 +302,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-06-09 21:37:24 +0100
diff --git a/src/go.c b/src/go.c
index 56f40a91..f1e17e22 100644
--- a/src/go.c
+++ b/src/go.c
@@ -238,7 +238,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;
@@ -248,7 +248,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-06-09 21:37:36 +0100
diff --git a/src/go.c b/src/go.c
index f1e17e22..dc20f295 100644
--- a/src/go.c
+++ b/src/go.c
@@ -321,7 +321,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 = 1;
     pnoise[0] *= gain;
     pnoise[1] *= gain;
     mixdown[0] += pnoise[0];
diff @ 2018-06-09 21:38:15 +0100
diff --git a/src/go.c b/src/go.c
index dc20f295..7b25a0ab 100644
--- a/src/go.c
+++ b/src/go.c
@@ -182,6 +182,8 @@ typedef struct
   // ===================================================================
   // = append only data structure
 
+  BIQUAD binwob;
+
 } S;
 
 // =====================================================================
@@ -244,6 +246,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->binwob, 10, flatq), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:21 +0100
diff --git a/src/go.c b/src/go.c
index 7b25a0ab..06daa637 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,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->binwob, 10, flatq), env);
+    env = biquad(lowpass(&s->binwob, 10, 3), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:26 +0100
diff --git a/src/go.c b/src/go.c
index 06daa637..996ccdf3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,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->binwob, 10, 3), env);
+    env = biquad(lowpass(&s->binwob, 10, 4), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:32 +0100
diff --git a/src/go.c b/src/go.c
index 996ccdf3..38fe5f97 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,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->binwob, 10, 4), env);
+    env = biquad(lowpass(&s->binwob, 10, 5), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:34 +0100
diff --git a/src/go.c b/src/go.c
index 38fe5f97..d885c084 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,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->binwob, 10, 5), env);
+    env = biquad(lowpass(&s->binwob, 10, 10), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:44 +0100
diff --git a/src/go.c b/src/go.c
index d885c084..ac7337dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,7 +245,7 @@ go(S *s, int channels, const float *in, float *out)
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
     s->benv.y += trigger;
-    env = lop(&s->benv, 0, 5);
+    env = lop(&s->benv, 0, 15);
     env = biquad(lowpass(&s->binwob, 10, 10), env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
diff @ 2018-06-09 21:38:50 +0100
diff --git a/src/go.c b/src/go.c
index ac7337dc..bfd0b4e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
-    env = biquad(lowpass(&s->binwob, 10, 10), env);
+    env = biquad(lowpass(&s->binwob, 10, 10), 2 8 env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:51 +0100
diff --git a/src/go.c b/src/go.c
index bfd0b4e7..5a9db9b5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
-    env = biquad(lowpass(&s->binwob, 10, 10), 2 8 env);
+    env = biquad(lowpass(&s->binwob, 10, 10), 2 * env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:38:55 +0100
diff --git a/src/go.c b/src/go.c
index 5a9db9b5..fd322ded 100644
--- a/src/go.c
+++ b/src/go.c
@@ -246,7 +246,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
-    env = biquad(lowpass(&s->binwob, 10, 10), 2 * env);
+    env = biquad(lowpass(&s->binwob, 10, 20), 2 * env);
     double harmonic = 5 + clamp(N - zeroes, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
diff @ 2018-06-09 21:39:04 +0100
diff --git a/src/go.c b/src/go.c
index fd322ded..f2aa839d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -306,7 +306,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-06-09 21:39:09 +0100
diff --git a/src/go.c b/src/go.c
index f2aa839d..ec4ecb99 100644
--- a/src/go.c
+++ b/src/go.c
@@ -306,7 +306,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-06-09 21:39:13 +0100
diff --git a/src/go.c b/src/go.c
index ec4ecb99..488a5e4b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -307,8 +307,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * so2[0];
     double nb = env * so2[1];
     double q = 50;
-    na *= 10;
-    nb *= 10;
+    na *= 20;
+    nb *= 20;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-06-09 21:39:20 +0100
diff --git a/src/go.c b/src/go.c
index 488a5e4b..92c93a69 100644
--- a/src/go.c
+++ b/src/go.c
@@ -306,7 +306,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 = 80;
     na *= 20;
     nb *= 20;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-06-09 21:39:33 +0100
diff --git a/src/go.c b/src/go.c
index 92c93a69..a6634014 100644
--- a/src/go.c
+++ b/src/go.c
@@ -240,7 +240,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 = (4.5 + 6 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-06-09 21:39:35 +0100
diff --git a/src/go.c b/src/go.c
index a6634014..efc2f64c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,7 +239,7 @@ go(S *s, int channels, const float *in, float *out)
     int N = 16;
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
-    double probability = pow(0.5, N - zeroes);
+    double probability = pow(0.55, N - zeroes);
     probability = (4.5 + 6 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-06-09 21:39:41 +0100
diff --git a/src/go.c b/src/go.c
index efc2f64c..cd0cc05f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -240,7 +240,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.55, N - zeroes);
-    probability = (4.5 + 6 * (n >= 0xC001)) * probability - 0.5;
+    probability = (6.5 + 6 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-06-09 21:39:50 +0100
diff --git a/src/go.c b/src/go.c
index cd0cc05f..8b6a1f8c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -247,7 +247,7 @@ go(S *s, int channels, const float *in, float *out)
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
     env = biquad(lowpass(&s->binwob, 10, 20), 2 * env);
-    double harmonic = 5 + clamp(N - zeroes, 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-06-09 21:39:52 +0100
diff --git a/src/go.c b/src/go.c
index 8b6a1f8c..62bffcf9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -251,7 +251,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);
   }
-  freq = 50;
 
   // ===================================================================
   // = 3 = total intraliminal extraction
diff @ 2018-06-09 21:40:05 +0100
diff --git a/src/go.c b/src/go.c
index 62bffcf9..24a20d95 100644
--- a/src/go.c
+++ b/src/go.c
@@ -225,7 +225,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, 1500,
       tanh(so2[c] + RESET*impulse[c]));
   }
   mixdown[0] += so2[0];
diff @ 2018-06-09 21:40:14 +0100
diff --git a/src/go.c b/src/go.c
index 24a20d95..bceeac34 100644
--- a/src/go.c
+++ b/src/go.c
@@ -225,7 +225,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, 1500,
+    so2echo(&s->so2.echo[c], 200, 1500,
       tanh(so2[c] + RESET*impulse[c]));
   }
   mixdown[0] += so2[0];
diff @ 2018-06-09 21:40:37 +0100
diff --git a/src/go.c b/src/go.c
index bceeac34..60aca07e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -271,8 +271,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(8 * p + 0.5) < 0.25;
+    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);
diff @ 2018-06-09 21:40:51 +0100
diff --git a/src/go.c b/src/go.c
index 60aca07e..99af681b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -278,7 +278,7 @@ go(S *s, int channels, const float *in, float *out)
     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);
-    double crush = phasor(&s->tcrush, 2000);
+    double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
     double kgain = 0;
diff @ 2018-06-09 21:41:58 +0100
diff --git a/src/go.c b/src/go.c
index 99af681b..ba206ade 100644
--- a/src/go.c
+++ b/src/go.c
@@ -183,6 +183,7 @@ typedef struct
   // = append only data structure
 
   BIQUAD binwob;
+  BIQUAD crushhip[2];
 
 } S;
 
@@ -281,6 +282,8 @@ go(S *s, int channels, const float *in, float *out)
     double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
+    tilex[0] = biquad(highpass(&s->crushhip[0], 1000, 10), tilex[0]);
+    tilex[1] = biquad(highpass(&s->crushhip[1], 1000, 10), tilex[1]);
     double kgain = 0;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
diff @ 2018-06-09 21:42:24 +0100
diff --git a/src/go.c b/src/go.c
index ba206ade..ee07621e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -243,6 +243,7 @@ go(S *s, int channels, const float *in, float *out)
     double probability = pow(0.55, N - zeroes);
     probability = (6.5 + 6 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
+    probability = 0;
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
     s->benv.y += trigger;
@@ -284,7 +285,7 @@ go(S *s, int channels, const float *in, float *out)
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
     tilex[0] = biquad(highpass(&s->crushhip[0], 1000, 10), tilex[0]);
     tilex[1] = biquad(highpass(&s->crushhip[1], 1000, 10), tilex[1]);
-    double kgain = 0;
+    double kgain = 1;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-06-09 21:42:42 +0100
diff --git a/src/go.c b/src/go.c
index ee07621e..e29d287f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -277,7 +277,7 @@ go(S *s, int channels, const float *in, float *out)
     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);
+    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 * pow(2, 1 + sin(twopi * p)));
diff @ 2018-06-09 21:42:56 +0100
diff --git a/src/go.c b/src/go.c
index e29d287f..3010ab79 100644
--- a/src/go.c
+++ b/src/go.c
@@ -277,7 +277,7 @@ go(S *s, int channels, const float *in, float *out)
     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 * 3, 5)*5);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 15)*10);
     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, 1 + sin(twopi * p)));
diff @ 2018-06-09 21:43:03 +0100
diff --git a/src/go.c b/src/go.c
index 3010ab79..17eab52c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -277,7 +277,7 @@ go(S *s, int channels, const float *in, float *out)
     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 * 3, 15)*10);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 25)*10);
     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, 1 + sin(twopi * p)));
diff @ 2018-06-09 21:43:09 +0100
diff --git a/src/go.c b/src/go.c
index 17eab52c..edfdf285 100644
--- a/src/go.c
+++ b/src/go.c
@@ -277,7 +277,7 @@ go(S *s, int channels, const float *in, float *out)
     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 * 3, 25)*10);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 25)*20);
     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, 1 + sin(twopi * p)));
diff @ 2018-06-09 21:43:16 +0100
diff --git a/src/go.c b/src/go.c
index edfdf285..62147d95 100644
--- a/src/go.c
+++ b/src/go.c
@@ -277,7 +277,7 @@ go(S *s, int channels, const float *in, float *out)
     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 * 3, 25)*20);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*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, 1 + sin(twopi * p)));
diff @ 2018-06-09 21:43:29 +0100
diff --git a/src/go.c b/src/go.c
index 62147d95..7c1fc9e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -275,7 +275,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(8 * p + 0.5) < 0.25;
     hat *= 1;
-    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, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
diff @ 2018-06-09 21:43:39 +0100
diff --git a/src/go.c b/src/go.c
index 7c1fc9e7..82b509e0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -278,8 +278,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*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*8, 5)*5)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 5)*5);
     double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-06-09 21:43:43 +0100
diff --git a/src/go.c b/src/go.c
index 82b509e0..9edf2a26 100644
--- a/src/go.c
+++ b/src/go.c
@@ -278,8 +278,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*30);
-    kick += sin(vcf(&s->tkick[2], kick, khz*8, 5)*5)
-         *  sin(vcf(&s->tkick[3], kick, khz*9, 5)*5);
+    kick += sin(vcf(&s->tkick[2], kick, khz*8, 50)*5)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 50)*5);
     double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-06-09 21:43:49 +0100
diff --git a/src/go.c b/src/go.c
index 9edf2a26..b20c50b4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -278,8 +278,8 @@ go(S *s, int channels, const float *in, float *out)
     double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*30);
-    kick += sin(vcf(&s->tkick[2], kick, khz*8, 50)*5)
-         *  sin(vcf(&s->tkick[3], kick, khz*9, 50)*5);
+    kick += sin(vcf(&s->tkick[2], kick, khz*8, 50)*35)
+         *  sin(vcf(&s->tkick[3], kick, khz*9, 50)*35);
     double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
diff @ 2018-06-09 21:43:58 +0100
diff --git a/src/go.c b/src/go.c
index b20c50b4..a2c62406 100644
--- a/src/go.c
+++ b/src/go.c
@@ -275,7 +275,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(8 * p + 0.5) < 0.25;
     hat *= 1;
-    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.5);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*8, 50)*35)
diff @ 2018-06-09 21:44:08 +0100
diff --git a/src/go.c b/src/go.c
index a2c62406..66e368ac 100644
--- a/src/go.c
+++ b/src/go.c
@@ -275,7 +275,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = tanh(kick);
     double hat = wrap(8 * p + 0.5) < 0.25;
     hat *= 1;
-    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.5);
+    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*30);
     kick += sin(vcf(&s->tkick[2], kick, khz*8, 50)*35)
diff @ 2018-06-09 21:44:19 +0100
diff --git a/src/go.c b/src/go.c
index 66e368ac..2a22a262 100644
--- a/src/go.c
+++ b/src/go.c
@@ -283,12 +283,12 @@ go(S *s, int channels, const float *in, float *out)
     double crush = phasor(&s->tcrush, 2000 * pow(2, 1 + sin(twopi * p)));
     tilex[0] = samphold(&s->tcrushsh[0], noise() * hat, crush);
     tilex[1] = samphold(&s->tcrushsh[1], noise() * hat, crush);
-    tilex[0] = biquad(highpass(&s->crushhip[0], 1000, 10), tilex[0]);
-    tilex[1] = biquad(highpass(&s->crushhip[1], 1000, 10), tilex[1]);
     double kgain = 1;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
+    tilex[0] = biquad(highpass(&s->crushhip[0], 100, 10), tilex[0]);
+    tilex[1] = biquad(highpass(&s->crushhip[1], 100, 10), tilex[1]);
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
     double gain = 1;
     gain = samphold(&s->tgate[1], gain, p);
diff @ 2018-06-09 21:45:15 +0100
diff --git a/src/go.c b/src/go.c
index 2a22a262..b2039455 100644
--- a/src/go.c
+++ b/src/go.c
@@ -184,6 +184,7 @@ typedef struct
 
   BIQUAD binwob;
   BIQUAD crushhip[2];
+  LOP hilag;
 
 } S;
 
@@ -287,8 +288,9 @@ go(S *s, int channels, const float *in, float *out)
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
-    tilex[0] = biquad(highpass(&s->crushhip[0], 100, 10), tilex[0]);
-    tilex[1] = biquad(highpass(&s->crushhip[1], 100, 10), tilex[1]);
+    double lag = lop(&s->hilag, 1, 1e-5);
+    tilex[0] = biquad(highpass(&s->crushhip[0], 100 - 50 * lag, 10), tilex[0]);
+    tilex[1] = biquad(highpass(&s->crushhip[1], 100 - 50 * lag, 10), tilex[1]);
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
     double gain = 1;
     gain = samphold(&s->tgate[1], gain, p);
diff @ 2018-06-09 21:45:23 +0100
diff --git a/src/go.c b/src/go.c
index b2039455..43053901 100644
--- a/src/go.c
+++ b/src/go.c
@@ -288,7 +288,7 @@ go(S *s, int channels, const float *in, float *out)
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
-    double lag = lop(&s->hilag, 1, 1e-5);
+    double lag = lop(&s->hilag, 1, 1e-4);
     tilex[0] = biquad(highpass(&s->crushhip[0], 100 - 50 * lag, 10), tilex[0]);
     tilex[1] = biquad(highpass(&s->crushhip[1], 100 - 50 * lag, 10), tilex[1]);
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
diff @ 2018-06-09 21:45:28 +0100
diff --git a/src/go.c b/src/go.c
index 43053901..c13395fa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -288,7 +288,7 @@ go(S *s, int channels, const float *in, float *out)
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
-    double lag = lop(&s->hilag, 1, 1e-4);
+    double lag = lop(&s->hilag, 1, 1e-3);
     tilex[0] = biquad(highpass(&s->crushhip[0], 100 - 50 * lag, 10), tilex[0]);
     tilex[1] = biquad(highpass(&s->crushhip[1], 100 - 50 * lag, 10), tilex[1]);
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
diff @ 2018-06-09 21:45:53 +0100
diff --git a/src/go.c b/src/go.c
index c13395fa..8b35bfb3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -222,7 +222,7 @@ go(S *s, int channels, const float *in, float *out)
   // compress feedback
   double so2[2] = { 0, 0 };
   compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
-  double gain = 1;
+  double gain = 0.5;
   so2[0] *= gain;
   so2[1] *= gain;
   // write to delay lines
diff @ 2018-06-09 21:45:57 +0100
diff --git a/src/go.c b/src/go.c
index 8b35bfb3..2573276b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -222,7 +222,7 @@ go(S *s, int channels, const float *in, float *out)
   // compress feedback
   double so2[2] = { 0, 0 };
   compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
-  double gain = 0.5;
+  double gain = 0.25;
   so2[0] *= gain;
   so2[1] *= gain;
   // write to delay lines
diff @ 2018-06-09 21:45:58 +0100
diff --git a/src/go.c b/src/go.c
index 2573276b..a5092398 100644
--- a/src/go.c
+++ b/src/go.c
@@ -222,7 +222,7 @@ go(S *s, int channels, const float *in, float *out)
   // compress feedback
   double so2[2] = { 0, 0 };
   compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
-  double gain = 0.25;
+  double gain = 0.125;
   so2[0] *= gain;
   so2[1] *= gain;
   // write to delay lines
diff @ 2018-06-09 21:46:05 +0100
diff --git a/src/go.c b/src/go.c
index a5092398..784e1877 100644
--- a/src/go.c
+++ b/src/go.c
@@ -222,7 +222,7 @@ go(S *s, int channels, const float *in, float *out)
   // compress feedback
   double so2[2] = { 0, 0 };
   compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
-  double gain = 0.125;
+  double gain = 0;
   so2[0] *= gain;
   so2[1] *= gain;
   // write to delay lines
diff @ 2018-06-09 21:46:11 +0100
diff --git a/src/go.c b/src/go.c
index 784e1877..7b7b4f33 100644
--- a/src/go.c
+++ b/src/go.c
@@ -360,8 +360,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.1, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.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-06-09 21:46:28 +0100
diff --git a/src/go.c b/src/go.c
index 7b7b4f33..92e9c9c9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -352,8 +352,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);
-    double rdelms = ldelms;
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./8);
+    double rdelms = 60000 / bpm * (p < 0.75 ? 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-06-09 21:46:38 +0100
diff --git a/src/go.c b/src/go.c
index 92e9c9c9..8f062a36 100644
--- a/src/go.c
+++ b/src/go.c
@@ -360,8 +360,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.1, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.1, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.2, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.2, 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-06-09 21:46:51 +0100
diff --git a/src/go.c b/src/go.c
index 8f062a36..2c9ed36b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -289,8 +289,8 @@ go(S *s, int channels, const float *in, float *out)
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
     double lag = lop(&s->hilag, 1, 1e-3);
-    tilex[0] = biquad(highpass(&s->crushhip[0], 100 - 50 * lag, 10), tilex[0]);
-    tilex[1] = biquad(highpass(&s->crushhip[1], 100 - 50 * lag, 10), tilex[1]);
+    tilex[0] = biquad(highpass(&s->crushhip[0], 100 - 50 * lag, flatq), tilex[0]);
+    tilex[1] = biquad(highpass(&s->crushhip[1], 100 - 50 * lag, flatq), tilex[1]);
     compress(tilex, &s->tcompress, 5, 10, 25, 48, tilex);
     double gain = 1;
     gain = samphold(&s->tgate[1], gain, p);
diff @ 2018-06-09 21:47:00 +0100
diff --git a/src/go.c b/src/go.c
index 2c9ed36b..b53dbddc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -360,8 +360,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.2, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.2, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.3, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.3, 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-06-09 21:47:45 +0100
diff --git a/src/go.c b/src/go.c
index b53dbddc..76d63800 100644
--- a/src/go.c
+++ b/src/go.c
@@ -185,6 +185,7 @@ typedef struct
   BIQUAD binwob;
   BIQUAD crushhip[2];
   LOP hilag;
+  SAMPHOLD esh[2][2];
 
 } S;
 
@@ -352,7 +353,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./ (1 + samphold(&s->esh[0][1], rand() & 7, p)));
     double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./16);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-06-09 21:48:06 +0100
diff --git a/src/go.c b/src/go.c
index 76d63800..a13afc8e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -354,7 +354,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./ (1 + samphold(&s->esh[0][1], rand() & 7, p)));
-    double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./16);
+    double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-06-09 21:48:16 +0100
diff --git a/src/go.c b/src/go.c
index a13afc8e..2e49917e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -361,8 +361,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.3, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.3, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.4, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.4, 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-06-09 21:48:40 +0100
diff --git a/src/go.c b/src/go.c
index 2e49917e..a3d874ac 100644
--- a/src/go.c
+++ b/src/go.c
@@ -353,7 +353,10 @@ 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./ (1 + samphold(&s->esh[0][1], rand() & 7, p)));
+    double ldelms = 60000 / bpm
+      * (p < 0.75
+        ? 4./ (1 + samphold(&s->esh[0][0], rand() & 7, p))
+        : 1./ (1 + samphold(&s->esh[0][1], rand() & 7, p)));
     double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-06-09 21:48:47 +0100
diff --git a/src/go.c b/src/go.c
index a3d874ac..6176542f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -356,7 +356,7 @@ go(S *s, int channels, const float *in, float *out)
     double ldelms = 60000 / bpm
       * (p < 0.75
         ? 4./ (1 + samphold(&s->esh[0][0], rand() & 7, p))
-        : 1./ (1 + samphold(&s->esh[0][1], rand() & 7, p)));
+        : 1./ (1 << samphold(&s->esh[0][1], rand() & 7, p)));
     double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-06-09 21:48:52 +0100
diff --git a/src/go.c b/src/go.c
index 6176542f..859696dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -356,7 +356,7 @@ go(S *s, int channels, const float *in, float *out)
     double ldelms = 60000 / bpm
       * (p < 0.75
         ? 4./ (1 + samphold(&s->esh[0][0], rand() & 7, p))
-        : 1./ (1 << samphold(&s->esh[0][1], rand() & 7, p)));
+        : 1./ (1 << (int) samphold(&s->esh[0][1], rand() & 7, p)));
     double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-06-09 21:49:08 +0100
diff --git a/src/go.c b/src/go.c
index 859696dc..871b6b38 100644
--- a/src/go.c
+++ b/src/go.c
@@ -357,7 +357,10 @@ go(S *s, int channels, const float *in, float *out)
       * (p < 0.75
         ? 4./ (1 + samphold(&s->esh[0][0], rand() & 7, p))
         : 1./ (1 << (int) samphold(&s->esh[0][1], rand() & 7, p)));
-    double rdelms = 60000 / bpm * (p < 0.75 ? 1 : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
+    double rdelms = 60000 / bpm *
+        (p < 0.75
+        ? 4./ (1 + samphold(&s->esh[1][0], rand() & 7, p))
+        : 1./ (1 << (int) samphold(&s->esh[1][1], rand() & 7, p)));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-06-09 21:49:15 +0100
diff --git a/src/go.c b/src/go.c
index 871b6b38..dde6b262 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,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.4, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.4, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.5, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.5, 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-06-09 21:49:24 +0100
diff --git a/src/go.c b/src/go.c
index dde6b262..47c0604e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,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.5, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.5, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.7, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.7, 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-06-09 21:49:50 +0100
diff --git a/src/go.c b/src/go.c
index 47c0604e..c9b01aca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,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.7, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.7, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(0.7, pow(wrap(8 * p), 0.25), 0.1));
+    es[1] = mix(mixdown[1], es[1], mix(0.7, 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-06-09 21:49:58 +0100
diff --git a/src/go.c b/src/go.c
index c9b01aca..017b1a76 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,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.7, pow(wrap(8 * p), 0.25), 0.1));
-    es[1] = mix(mixdown[1], es[1], mix(0.7, pow(wrap(8 * p), 0.25), 0.1));
+    es[0] = mix(mixdown[0], es[0], mix(0.7, pow(wrap(8 * p), 0.25), 0.2));
+    es[1] = mix(mixdown[1], es[1], mix(0.7, 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-06-09 21:50:07 +0100
diff --git a/src/go.c b/src/go.c
index 017b1a76..54d94b4f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,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.7, pow(wrap(8 * p), 0.25), 0.2));
-    es[1] = mix(mixdown[1], es[1], mix(0.7, pow(wrap(8 * p), 0.25), 0.2));
+    es[0] = mix(mixdown[0], es[0], mix(0.7, pow(wrap(8 * p), 0.25), 0.5));
+    es[1] = mix(mixdown[1], es[1], mix(0.7, 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-06-09 21:50:55 +0100
diff --git a/src/go.c b/src/go.c
index 54d94b4f..426e571c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -186,6 +186,8 @@ typedef struct
   BIQUAD crushhip[2];
   LOP hilag;
   SAMPHOLD esh[2][2];
+  HIP ehip[2];
+  LOP elop[2];
 
 } S;
 
@@ -365,6 +367,8 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
+    el = hip(&s->ehip[0], el, 1);
+    er = hip(&s->ehip[1], er, 1);
     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.7, pow(wrap(8 * p), 0.25), 0.5));
diff @ 2018-06-09 21:51:04 +0100
diff --git a/src/go.c b/src/go.c
index 426e571c..19154694 100644
--- a/src/go.c
+++ b/src/go.c
@@ -187,7 +187,7 @@ typedef struct
   LOP hilag;
   SAMPHOLD esh[2][2];
   HIP ehip[2];
-  LOP elop[2];
+  LOP elop2[2];
 
 } S;
 
diff @ 2018-06-09 21:51:31 +0100
diff --git a/src/go.c b/src/go.c
index 19154694..cba17ab7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -369,6 +369,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     el = hip(&s->ehip[0], el, 1);
     er = hip(&s->ehip[1], er, 1);
+    el = lop(&s->elop2[0], el, 10000);
+    er = lpo(&s->elop2[1], er, 10000);
     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.7, pow(wrap(8 * p), 0.25), 0.5));
diff @ 2018-06-09 21:51:39 +0100
diff --git a/src/go.c b/src/go.c
index cba17ab7..5ecd3715 100644
--- a/src/go.c
+++ b/src/go.c
@@ -370,7 +370,7 @@ go(S *s, int channels, const float *in, float *out)
     el = hip(&s->ehip[0], el, 1);
     er = hip(&s->ehip[1], er, 1);
     el = lop(&s->elop2[0], el, 10000);
-    er = lpo(&s->elop2[1], er, 10000);
+    er = lop(&s->elop2[1], er, 10000);
     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.7, pow(wrap(8 * p), 0.25), 0.5));
diff @ 2018-06-09 21:51:49 +0100
diff --git a/src/go.c b/src/go.c
index 5ecd3715..b5d08daa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -369,8 +369,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     el = hip(&s->ehip[0], el, 1);
     er = hip(&s->ehip[1], er, 1);
-    el = lop(&s->elop2[0], el, 10000);
-    er = lop(&s->elop2[1], er, 10000);
+    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(0.7, pow(wrap(8 * p), 0.25), 0.5));
diff @ 2018-06-09 21:51:56 +0100
diff --git a/src/go.c b/src/go.c
index b5d08daa..c7e60f7d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -369,8 +369,8 @@ go(S *s, int channels, const float *in, float *out)
     double er = delread4(&s->edelay2, rdelms + si);
     el = hip(&s->ehip[0], el, 1);
     er = hip(&s->ehip[1], er, 1);
-    el = lop(&s->elop2[0], el, 5000);
-    er = lop(&s->elop2[1], er, 5000);
+    el = lop(&s->elop2[0], el, 2000);
+    er = lop(&s->elop2[1], er, 2000);
     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.7, pow(wrap(8 * p), 0.25), 0.5));
diff @ 2018-06-09 21:52:01 +0100
diff --git a/src/go.c b/src/go.c
index c7e60f7d..e4c46d98 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,8 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
-    el = hip(&s->ehip[0], el, 1);
-    er = hip(&s->ehip[1], er, 1);
+    el = hip(&s->ehip[0], el, 10);
+    er = hip(&s->ehip[1], er, 10);
     el = lop(&s->elop2[0], el, 2000);
     er = lop(&s->elop2[1], er, 2000);
     double es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2018-06-09 21:52:05 +0100
diff --git a/src/go.c b/src/go.c
index e4c46d98..170218c9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,8 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
-    el = hip(&s->ehip[0], el, 10);
-    er = hip(&s->ehip[1], er, 10);
+    el = hip(&s->ehip[0], el, 20);
+    er = hip(&s->ehip[1], er, 20);
     el = lop(&s->elop2[0], el, 2000);
     er = lop(&s->elop2[1], er, 2000);
     double es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2018-06-09 21:52:22 +0100
diff --git a/src/go.c b/src/go.c
index 170218c9..d6403cbf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -373,8 +373,8 @@ go(S *s, int channels, const float *in, float *out)
     er = lop(&s->elop2[1], er, 2000);
     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.7, pow(wrap(8 * p), 0.25), 0.5));
-    es[1] = mix(mixdown[1], es[1], mix(0.7, pow(wrap(8 * p), 0.25), 0.5));
+    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-06-09 21:52:43 +0100
diff --git a/src/go.c b/src/go.c
index d6403cbf..e6f188bf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -394,7 +394,7 @@ go(S *s, int channels, const float *in, float *out)
       + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 8 * p), 2);
-    double gain = 0;//0.15;
+    double gain = 0.15;
     o *= gain;
     double os[2] =
       { samphold(&s->wwsh[0], o, wrap(400 * q + 0.25))
diff @ 2018-06-09 21:52:51 +0100
diff --git a/src/go.c b/src/go.c
index e6f188bf..cd29fa7b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -393,7 +393,7 @@ go(S *s, int channels, const float *in, float *out)
       + 0.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
-      )) * pow(cos(twopi * 8 * p), 2);
+      )) * pow(cos(twopi * 16 * p), 2);
     double gain = 0.15;
     o *= gain;
     double os[2] =
diff @ 2018-06-09 21:52:57 +0100
diff --git a/src/go.c b/src/go.c
index cd29fa7b..c3c43eb4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -392,7 +392,7 @@ go(S *s, int channels, const float *in, float *out)
       ( q
       + 0.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
-      + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
+      + 1.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 16 * p), 2);
     double gain = 0.15;
     o *= gain;
diff @ 2018-06-09 21:53:23 +0100
diff --git a/src/go.c b/src/go.c
index c3c43eb4..e4e8a791 100644
--- a/src/go.c
+++ b/src/go.c
@@ -390,15 +390,15 @@ go(S *s, int channels, const float *in, float *out)
     double q = wrap(128 * p);
     double o = sin(twopi *
       ( q
-      + 0.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
+      + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
-      + 1.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
+      + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 16 * p), 2);
     double gain = 0.15;
     o *= gain;
     double os[2] =
-      { samphold(&s->wwsh[0], o, wrap(400 * q + 0.25))
-      , samphold(&s->wwsh[1], o, wrap(400 * q + 0.75))
+      { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
+      , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
     wwave[0] = os[0];
     wwave[1] = os[1];
diff @ 2018-06-09 21:53:33 +0100
diff --git a/src/go.c b/src/go.c
index e4e8a791..24c7f3c5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -393,7 +393,7 @@ go(S *s, int channels, const float *in, float *out)
       + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
-      )) * pow(cos(twopi * 16 * p), 2);
+      )) * pow(cos(twopi * 16 * p), 4);
     double gain = 0.15;
     o *= gain;
     double os[2] =
diff @ 2018-06-09 21:53:50 +0100
diff --git a/src/go.c b/src/go.c
index 24c7f3c5..3a7d098e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -391,7 +391,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = sin(twopi *
       ( q
       + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
-      + 0.0 * cos(twopi * 2 * p) * sin(twopi * 3 * q)
+      + (wrap(2 * p) < 0.5) * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 16 * p), 4);
     double gain = 0.15;
diff @ 2018-06-09 21:54:04 +0100
diff --git a/src/go.c b/src/go.c
index 3a7d098e..5a2bf07b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -392,7 +392,7 @@ go(S *s, int channels, const float *in, float *out)
       ( q
       + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + (wrap(2 * p) < 0.5) * cos(twopi * 2 * p) * sin(twopi * 3 * q)
-      + 0.0 * cos(twopi * 3 * p) * sin(twopi * 5 * q)
+      + (p > 0.75) * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 16 * p), 4);
     double gain = 0.15;
     o *= gain;
diff @ 2018-06-09 21:54:16 +0100
diff --git a/src/go.c b/src/go.c
index 5a2bf07b..07afbdb0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,8 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
-    el = hip(&s->ehip[0], el, 20);
-    er = hip(&s->ehip[1], er, 20);
+    el = hip(&s->ehip[0], el, 120);
+    er = hip(&s->ehip[1], er, 120);
     el = lop(&s->elop2[0], el, 2000);
     er = lop(&s->elop2[1], er, 2000);
     double es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2018-06-09 21:54:25 +0100
diff --git a/src/go.c b/src/go.c
index 07afbdb0..e578b6eb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -367,8 +367,8 @@ go(S *s, int channels, const float *in, float *out)
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
     double er = delread4(&s->edelay2, rdelms + si);
-    el = hip(&s->ehip[0], el, 120);
-    er = hip(&s->ehip[1], er, 120);
+    el = hip(&s->ehip[0], el, 200);
+    er = hip(&s->ehip[1], er, 200);
     el = lop(&s->elop2[0], el, 2000);
     er = lop(&s->elop2[1], er, 2000);
     double es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2018-06-09 21:54:56 +0100
diff --git a/src/go.c b/src/go.c
index e578b6eb..2d22aa5d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -371,8 +371,10 @@ go(S *s, int channels, const float *in, float *out)
     er = hip(&s->ehip[1], er, 200);
     el = lop(&s->elop2[0], el, 2000);
     er = lop(&s->elop2[1], er, 2000);
+    el *= 0.5;
+    er *= 0.5;
     double es[2] = { co * el + si * er, -si * el + co * er };
-    compress(es, &s->ecompress1, 5, 10, 25, 48, es);
+    //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));
     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);
diff @ 2018-06-09 21:55:05 +0100
diff --git a/src/go.c b/src/go.c
index 2d22aa5d..8dc591b8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -377,7 +377,7 @@ go(S *s, int channels, const float *in, float *out)
     //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));
     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);
+    //compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
     mixdown[0] = es[0];
diff @ 2018-06-09 21:55:18 +0100
diff --git a/src/go.c b/src/go.c
index 8dc591b8..9e46a8c3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -395,7 +395,7 @@ go(S *s, int channels, const float *in, float *out)
       + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + (wrap(2 * p) < 0.5) * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + (p > 0.75) * cos(twopi * 3 * p) * sin(twopi * 5 * q)
-      )) * pow(cos(twopi * 16 * p), 4);
+      )) * pow(cos(twopi * 16 * p * p), 4);
     double gain = 0.15;
     o *= gain;
     double os[2] =
diff @ 2018-06-09 21:55:23 +0100
diff --git a/src/go.c b/src/go.c
index 9e46a8c3..7e6c341f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -395,7 +395,7 @@ go(S *s, int channels, const float *in, float *out)
       + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + (wrap(2 * p) < 0.5) * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + (p > 0.75) * cos(twopi * 3 * p) * sin(twopi * 5 * q)
-      )) * pow(cos(twopi * 16 * p * p), 4);
+      )) * pow(cos(twopi * 4 * p * p), 4);
     double gain = 0.15;
     o *= gain;
     double os[2] =
diff @ 2018-06-09 21:55:44 +0100
diff --git a/src/go.c b/src/go.c
index 7e6c341f..313a29e4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -392,7 +392,7 @@ go(S *s, int channels, const float *in, float *out)
     double q = wrap(128 * p);
     double o = sin(twopi *
       ( q
-      + 1.0 * cos(twopi * 4 * p) * sin(twopi * 2 * q)
+      + (wrap(2 * p)> 0.5) * cos(twopi * 4 * p) * sin(twopi * 2 * q)
       + (wrap(2 * p) < 0.5) * cos(twopi * 2 * p) * sin(twopi * 3 * q)
       + (p > 0.75) * cos(twopi * 3 * p) * sin(twopi * 5 * q)
       )) * pow(cos(twopi * 4 * p * p), 4);
diff @ 2018-06-09 21:57:05 +0100
diff --git a/src/go.c b/src/go.c
index 313a29e4..4cbb14ed 100644
--- a/src/go.c
+++ b/src/go.c
@@ -188,6 +188,7 @@ typedef struct
   SAMPHOLD esh[2][2];
   HIP ehip[2];
   LOP elop2[2];
+  BIQUAD owwb[2];
 
 } S;
 
@@ -402,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = os[0];
-    wwave[1] = os[1];
+    wwave[0] = biquad(bandpass(&s->owwb[0], 200, 1 + p), os[0]);
+    wwave[1] = biquad(bandpass(&s->owwb[1], 200, 1 + p), os[1]);
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:57:12 +0100
diff --git a/src/go.c b/src/go.c
index 4cbb14ed..f3147411 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = biquad(bandpass(&s->owwb[0], 200, 1 + p), os[0]);
-    wwave[1] = biquad(bandpass(&s->owwb[1], 200, 1 + p), os[1]);
+    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + p), os[0]);
+    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + p), os[1]);
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:57:18 +0100
diff --git a/src/go.c b/src/go.c
index f3147411..7234d1ba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + p), os[0]);
-    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + p), os[1]);
+    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + 10 * p), os[0]);
+    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + 10 * p), os[1]);
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:57:32 +0100
diff --git a/src/go.c b/src/go.c
index 7234d1ba..869caf52 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + 10 * p), os[0]);
-    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + 10 * p), os[1]);
+    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]);
+    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]);
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:01 +0100
diff --git a/src/go.c b/src/go.c
index 869caf52..cc25a0cd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]);
-    wwave[1] = biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]);
+    wwave[0] = sin(biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:07 +0100
diff --git a/src/go.c b/src/go.c
index cc25a0cd..981680e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(2 *biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(2 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:09 +0100
diff --git a/src/go.c b/src/go.c
index 981680e7..02fe4f1a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,7 +403,7 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(2 *biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[0] = sin(2 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
     wwave[1] = sin(2 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
diff @ 2018-06-09 21:58:13 +0100
diff --git a/src/go.c b/src/go.c
index 02fe4f1a..a1359496 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(2 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(2 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(3 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(3 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:17 +0100
diff --git a/src/go.c b/src/go.c
index a1359496..ea62bd05 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(3 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(3 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(4 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(4 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:20 +0100
diff --git a/src/go.c b/src/go.c
index ea62bd05..ce96571b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(4 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(4 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(5 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(5 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:26 +0100
diff --git a/src/go.c b/src/go.c
index ce96571b..77b6f08a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(5 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(5 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(6 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(6 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:58:30 +0100
diff --git a/src/go.c b/src/go.c
index 77b6f08a..02130083 100644
--- a/src/go.c
+++ b/src/go.c
@@ -403,8 +403,8 @@ go(S *s, int channels, const float *in, float *out)
       { samphold(&s->wwsh[0], o, wrap(40 * q + 0.25))
       , samphold(&s->wwsh[1], o, wrap(40 * q + 0.75))
       };
-    wwave[0] = sin(6 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
-    wwave[1] = sin(6 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
+    wwave[0] = sin(16 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
+    wwave[1] = sin(16 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
   mixdown[0] += wwave[0];
   mixdown[1] += wwave[1];
diff @ 2018-06-09 21:59:02 +0100
diff --git a/src/go.c b/src/go.c
index 02130083..9d4cccb9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -406,8 +406,8 @@ go(S *s, int channels, const float *in, float *out)
     wwave[0] = sin(16 * biquad(bandpass(&s->owwb[0], 300, 1 + 10 * wrap(4 * p)), os[0]));
     wwave[1] = sin(16 * biquad(bandpass(&s->owwb[1], 300, 1 + 10 * wrap(4 * p)), os[1]));
   }
-  mixdown[0] += wwave[0];
-  mixdown[1] += wwave[1];
+//  mixdown[0] += wwave[0];
+//  mixdown[1] += wwave[1];
 
   // ===================================================================
   // = 6 = mxmldrp v4
@@ -431,7 +431,7 @@ go(S *s, int channels, const float *in, float *out)
       }
     }
     double mxml[2] = { 0, 0 };
-    double rate = lop(&s->dflow,  1e4, 1); // */ 1e6, 0.0001);
+    double rate = lop(&s->dflow, /* 1e4, 1); // */ 1e6, 0.0001);
     rate = clamp(rate, 1e4, 1e5);
     double d = drip(&s->drip, 16 * rate * (1e4 + 1 < rate && rate < 1e5 - 10));
     if (rate > 1e5 - 10)
@@ -485,8 +485,8 @@ go(S *s, int channels, const float *in, float *out)
 
   // ===================================================================
   // = m = mixdown
-  if (! next)
-    compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
+//  if (! next)
+//    compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
   double volume = 1;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
diff @ 2018-06-09 21:59:13 +0100
diff --git a/src/go.c b/src/go.c
index 9d4cccb9..55ea1ee1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -446,7 +446,7 @@ go(S *s, int channels, const float *in, float *out)
     s->menv[s->idrip].y += tanh(1e-12 * d);
     for (int c = 0; c < 4; ++c)
     {
-      double e = lop1(&s->menv[c], 0, 10);
+      double e = lop1(&s->menv[c], 0, 20);
       double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(twopi * o) * e);
diff @ 2018-06-09 21:59:21 +0100
diff --git a/src/go.c b/src/go.c
index 55ea1ee1..a018df8d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -449,7 +449,7 @@ go(S *s, int channels, const float *in, float *out)
       double e = lop1(&s->menv[c], 0, 20);
       double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
-      o = tanh(4 * sin(twopi * o) * e);
+      o = tanh(4 * sin(2 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.1);
       o = hip(&s->mhip[c], o, 15);
       for (int ear = 0; ear < 2; ++ear)
diff @ 2018-06-09 21:59:28 +0100
diff --git a/src/go.c b/src/go.c
index a018df8d..9328e4a4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -450,7 +450,7 @@ go(S *s, int channels, const float *in, float *out)
       double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(2 * e * twopi * o) * e);
-      o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.1);
+      o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
       o = hip(&s->mhip[c], o, 15);
       for (int ear = 0; ear < 2; ++ear)
       {
diff @ 2018-06-09 21:59:34 +0100
diff --git a/src/go.c b/src/go.c
index 9328e4a4..cce26162 100644
--- a/src/go.c
+++ b/src/go.c
@@ -458,7 +458,7 @@ go(S *s, int channels, const float *in, float *out)
       }
     }
     double tail[2] = { 0, 0 } ;
-    reverb(tail, &s->mverb, mxml, 500);
+    reverb(tail, &s->mverb, mxml, 1500);
     mxml[0] += tail[0];
     mxml[1] += tail[1];
     mixdown[0] += mxml[0];
diff @ 2018-06-09 21:59:37 +0100
diff --git a/src/go.c b/src/go.c
index cce26162..c70b1a9b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -454,7 +454,7 @@ go(S *s, int channels, const float *in, float *out)
       o = hip(&s->mhip[c], o, 15);
       for (int ear = 0; ear < 2; ++ear)
       {
-        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.2);
+        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.5);
       }
     }
     double tail[2] = { 0, 0 } ;
diff @ 2018-06-09 21:59:41 +0100
diff --git a/src/go.c b/src/go.c
index c70b1a9b..007b180f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -454,7 +454,7 @@ go(S *s, int channels, const float *in, float *out)
       o = hip(&s->mhip[c], o, 15);
       for (int ear = 0; ear < 2; ++ear)
       {
-        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.5);
+        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.75);
       }
     }
     double tail[2] = { 0, 0 } ;
diff @ 2018-06-09 21:59:44 +0100
diff --git a/src/go.c b/src/go.c
index 007b180f..cae86e80 100644
--- a/src/go.c
+++ b/src/go.c
@@ -458,7 +458,7 @@ go(S *s, int channels, const float *in, float *out)
       }
     }
     double tail[2] = { 0, 0 } ;
-    reverb(tail, &s->mverb, mxml, 1500);
+    reverb(tail, &s->mverb, mxml, 2500);
     mxml[0] += tail[0];
     mxml[1] += tail[1];
     mixdown[0] += mxml[0];
diff @ 2018-06-09 21:59:48 +0100
diff --git a/src/go.c b/src/go.c
index cae86e80..67476f66 100644
--- a/src/go.c
+++ b/src/go.c
@@ -446,7 +446,7 @@ go(S *s, int channels, const float *in, float *out)
     s->menv[s->idrip].y += tanh(1e-12 * d);
     for (int c = 0; c < 4; ++c)
     {
-      double e = lop1(&s->menv[c], 0, 20);
+      double e = lop1(&s->menv[c], 0, 30);
       double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(2 * e * twopi * o) * e);
diff @ 2018-06-09 21:59:56 +0100
diff --git a/src/go.c b/src/go.c
index 67476f66..682de0bf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -458,7 +458,7 @@ go(S *s, int channels, const float *in, float *out)
       }
     }
     double tail[2] = { 0, 0 } ;
-    reverb(tail, &s->mverb, mxml, 2500);
+    reverb(tail, &s->mverb, mxml, 5000);
     mxml[0] += tail[0];
     mxml[1] += tail[1];
     mixdown[0] += mxml[0];
diff @ 2018-06-09 22:00:07 +0100
diff --git a/src/go.c b/src/go.c
index 682de0bf..9269aa53 100644
--- a/src/go.c
+++ b/src/go.c
@@ -449,7 +449,7 @@ go(S *s, int channels, const float *in, float *out)
       double e = lop1(&s->menv[c], 0, 30);
       double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
-      o = tanh(4 * sin(2 * e * twopi * o) * e);
+      o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
       o = hip(&s->mhip[c], o, 15);
       for (int ear = 0; ear < 2; ++ear)
diff @ 2018-06-09 22:00:16 +0100
diff --git a/src/go.c b/src/go.c
index 9269aa53..924bfda8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -451,7 +451,7 @@ go(S *s, int channels, const float *in, float *out)
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
-      o = hip(&s->mhip[c], o, 15);
+      o = hip(&s->mhip[c], o, 25);
       for (int ear = 0; ear < 2; ++ear)
       {
         mxml[ear] += early_ref(&s->meref[c][ear], o, 0.75);
diff @ 2018-06-09 22:00:38 +0100
diff --git a/src/go.c b/src/go.c
index 924bfda8..963c38d4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -447,7 +447,7 @@ go(S *s, int channels, const float *in, float *out)
     for (int c = 0; c < 4; ++c)
     {
       double e = lop1(&s->menv[c], 0, 30);
-      double f = samphold(&s->msh[c], 40 * pow(1.5, cbrt(1e-11 * d)), -d);
+      double f = samphold(&s->msh[c], 50 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
diff @ 2018-06-09 22:00:49 +0100
diff --git a/src/go.c b/src/go.c
index 963c38d4..4cea605a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -451,7 +451,7 @@ go(S *s, int channels, const float *in, float *out)
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
-      o = hip(&s->mhip[c], o, 25);
+      o = hip(&s->mhip[c], o, 35);
       for (int ear = 0; ear < 2; ++ear)
       {
         mxml[ear] += early_ref(&s->meref[c][ear], o, 0.75);
diff @ 2018-06-09 22:00:54 +0100
diff --git a/src/go.c b/src/go.c
index 4cea605a..0cb17132 100644
--- a/src/go.c
+++ b/src/go.c
@@ -454,7 +454,7 @@ go(S *s, int channels, const float *in, float *out)
       o = hip(&s->mhip[c], o, 35);
       for (int ear = 0; ear < 2; ++ear)
       {
-        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.75);
+        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.875);
       }
     }
     double tail[2] = { 0, 0 } ;
diff @ 2018-06-09 22:00:59 +0100
diff --git a/src/go.c b/src/go.c
index 0cb17132..016df53f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -458,7 +458,7 @@ go(S *s, int channels, const float *in, float *out)
       }
     }
     double tail[2] = { 0, 0 } ;
-    reverb(tail, &s->mverb, mxml, 5000);
+    reverb(tail, &s->mverb, mxml, 15000);
     mxml[0] += tail[0];
     mxml[1] += tail[1];
     mixdown[0] += mxml[0];
diff @ 2018-06-09 22:01:11 +0100
diff --git a/src/go.c b/src/go.c
index 016df53f..a4231d18 100644
--- a/src/go.c
+++ b/src/go.c
@@ -454,7 +454,7 @@ go(S *s, int channels, const float *in, float *out)
       o = hip(&s->mhip[c], o, 35);
       for (int ear = 0; ear < 2; ++ear)
       {
-        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.875);
+        mxml[ear] += early_ref(&s->meref[c][ear], o, 0.5875);
       }
     }
     double tail[2] = { 0, 0 } ;
diff @ 2018-06-09 22:01:18 +0100
diff --git a/src/go.c b/src/go.c
index a4231d18..d5e5d999 100644
--- a/src/go.c
+++ b/src/go.c
@@ -447,7 +447,7 @@ go(S *s, int channels, const float *in, float *out)
     for (int c = 0; c < 4; ++c)
     {
       double e = lop1(&s->menv[c], 0, 30);
-      double f = samphold(&s->msh[c], 50 * pow(1.5, cbrt(1e-11 * d)), -d);
+      double f = samphold(&s->msh[c], 60 * pow(1.5, cbrt(1e-11 * d)), -d);
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
diff @ 2018-06-09 22:01:25 +0100
diff --git a/src/go.c b/src/go.c
index d5e5d999..61857da4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -451,7 +451,7 @@ go(S *s, int channels, const float *in, float *out)
       double o = phasor(&s->mosc[c], f);
       o = tanh(4 * sin(1.5 * e * twopi * o) * e);
       o = moog(&s->mmoog[c], o, f * pow(2, 6 * e), 0.5);
-      o = hip(&s->mhip[c], o, 35);
+      o = hip(&s->mhip[c], o, 45);
       for (int ear = 0; ear < 2; ++ear)
       {
         mxml[ear] += early_ref(&s->meref[c][ear], o, 0.5875);
diff @ 2018-06-09 22:01:45 +0100
diff --git a/src/go.c b/src/go.c
index 61857da4..0bac2bdc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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) >>
+      (0x1111 * (((6 * (t >> 9)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:01:48 +0100
diff --git a/src/go.c b/src/go.c
index 0bac2bdc..61857da4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111 * (((6 * (t >> 9)) & 0xf)|8) * t) >>
+      (0x1111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x1111 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:01:52 +0100
diff --git a/src/go.c b/src/go.c
index 61857da4..65cb9671 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,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) *
+     ((0x1111 * (((2 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:01:59 +0100
diff --git a/src/go.c b/src/go.c
index 65cb9671..61857da4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,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 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:02 +0100
diff --git a/src/go.c b/src/go.c
index 61857da4..63f916ba 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,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) *
+     ((0x1111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:08 +0100
diff --git a/src/go.c b/src/go.c
index 63f916ba..0780d96b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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) >>
+      (0x1111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x1111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:12 +0100
diff --git a/src/go.c b/src/go.c
index 0780d96b..d28989b0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x1111 * (((5 * (t >> 9)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x1111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:16 +0100
diff --git a/src/go.c b/src/go.c
index d28989b0..0780d96b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111 * (((5 * (t >> 9)) & 0xf)|8) * t) >>
+      (0x1111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x1111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:21 +0100
diff --git a/src/go.c b/src/go.c
index 0780d96b..d4ace31f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,9 +471,9 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x11111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x1111 * (((3 * (t >> 12)) & 0xf) | 8) *
+     ((0x11111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:26 +0100
diff --git a/src/go.c b/src/go.c
index d4ace31f..03493def 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111 * (((5 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x11111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x11111 * (((3 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:32 +0100
diff --git a/src/go.c b/src/go.c
index 03493def..d45d66d9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,9 +471,9 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x11111 * (((3 * (t >> 12)) & 0xf) | 8) *
+     ((0x111111 * (((2 * (t >> 12)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:38 +0100
diff --git a/src/go.c b/src/go.c
index d45d66d9..c251d855 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x111111 * (((2 * (t >> 12)) & 0xf) | 8) *
+     ((0x111111 * (((2 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:41 +0100
diff --git a/src/go.c b/src/go.c
index c251d855..929cfeb8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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 >> 12)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((2 * (t >> 11)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:46 +0100
diff --git a/src/go.c b/src/go.c
index 929cfeb8..3bdf18f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((6 * (t >> 12)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
-     ((0x111111 * (((2 * (t >> 11)) & 0xf) | 8) *
+     ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
     );
     o *= 0.3;
diff @ 2018-06-09 22:02:50 +0100
diff --git a/src/go.c b/src/go.c
index 3bdf18f0..b92ba005 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((6 * (t >> 12)) & 0xf)|8) * t) >>
+      (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 20))
diff @ 2018-06-09 22:02:55 +0100
diff --git a/src/go.c b/src/go.c
index b92ba005..b38eae35 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * t) >>
         ((20 - ((t >> 11) & 0xF)) +
      ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
-        ((t & 0x1) << (t & 0xa))) >> 20))
+        ((t & 0x1) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:03:02 +0100
diff --git a/src/go.c b/src/go.c
index b38eae35..f929199a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -472,7 +472,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * t) >>
-        ((20 - ((t >> 11) & 0xF)) +
+        ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
     );
diff @ 2018-06-09 22:03:08 +0100
diff --git a/src/go.c b/src/go.c
index f929199a..289fd804 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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)) & 0xf)|8) * (t >> t)) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:15 +0100
diff --git a/src/go.c b/src/go.c
index 289fd804..e71e6abd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((6 * (t >> 11)) & 0xf)|8) * (t >> t)) >>
         ((20 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((2 * (t >> 9)) & 0xf) | 8) *
+     ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
diff @ 2018-06-09 22:03:18 +0100
diff --git a/src/go.c b/src/go.c
index e71e6abd..dd650f71 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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 >> t)) >>
+      0(0x111111 * (((6 * (t >> 1)) & 0xf)|8) * (t >> t)) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:22 +0100
diff --git a/src/go.c b/src/go.c
index dd650f71..368a69e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      0(0x111111 * (((6 * (t >> 1)) & 0xf)|8) * (t >> t)) >>
+      (0x111111 * (((6 * (t >> 10)) & 0xf)|8) * (t >> t)) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:25 +0100
diff --git a/src/go.c b/src/go.c
index 368a69e7..d32c9fa5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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 >> t)) >>
+      (0x111111 * (((6 * (t >> 10)) & 0xf)|9) * (t >> t)) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:29 +0100
diff --git a/src/go.c b/src/go.c
index d32c9fa5..f48773cb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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)|9) * (t >> t)) >>
+      (0x111111 * (((6 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:42 +0100
diff --git a/src/go.c b/src/go.c
index f48773cb..717789d5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,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)|9) * (t >> (t >> 4))) >>
+      (0x111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
diff @ 2018-06-09 22:03:48 +0100
diff --git a/src/go.c b/src/go.c
index 717789d5..c3754d2b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((4 * (t >> 9)) & 0xf) | 8) *
+     ((0x111111 * (((14 * (t >> 9)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
diff @ 2018-06-09 22:03:52 +0100
diff --git a/src/go.c b/src/go.c
index c3754d2b..4ee606a3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((14 * (t >> 9)) & 0xf) | 8) *
+     ((0x111111 * (((14 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
diff @ 2018-06-09 22:03:58 +0100
diff --git a/src/go.c b/src/go.c
index 4ee606a3..3ba141c2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,9 +471,9 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
+      (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
-     ((0x111111 * (((14 * (t >> 5)) & 0xf) | 8) *
+     ((0x1111111 * (((14 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x1) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
diff @ 2018-06-09 22:04:04 +0100
diff --git a/src/go.c b/src/go.c
index 3ba141c2..983232fb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x1111111 * (((14 * (t >> 5)) & 0xf) | 8) *
-        ((t & 0x1) << (t & 0xa))) >> 19))
+        ((t & 0x2) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:04:10 +0100
diff --git a/src/go.c b/src/go.c
index 983232fb..9b035381 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
-     ((0x1111111 * (((14 * (t >> 5)) & 0xf) | 8) *
+     ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 19))
     );
     o *= 0.3;
diff @ 2018-06-09 22:04:14 +0100
diff --git a/src/go.c b/src/go.c
index 9b035381..8fbf7741 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
-        ((t & 0x2) << (t & 0xa))) >> 19))
+        ((t & 0x2) << (t & 0xa))) >> 17))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:04:17 +0100
diff --git a/src/go.c b/src/go.c
index 8fbf7741..cd2c2802 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
-        ((t & 0x2) << (t & 0xa))) >> 17))
+        ((t & 0x2) << (t & 0xa))) >> 12))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:04:23 +0100
diff --git a/src/go.c b/src/go.c
index cd2c2802..e3267341 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 4))) >>
+      (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 10) & 0xF)) +
      ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 12))
diff @ 2018-06-09 22:04:31 +0100
diff --git a/src/go.c b/src/go.c
index e3267341..6187ec8b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -472,7 +472,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 3))) >>
-        ((20 - ((t >> 10) & 0xF)) +
+        ((20 - ((t >> 9) & 0xF)) +
      ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 12))
     );
diff @ 2018-06-09 22:04:34 +0100
diff --git a/src/go.c b/src/go.c
index 6187ec8b..9310336c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111111 * (((16 * (t >> 10)) & 0xf)|9) * (t >> (t >> 3))) >>
+      (0x1111111 * (((17 * (t >> 10)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 12))
diff @ 2018-06-09 22:04:44 +0100
diff --git a/src/go.c b/src/go.c
index 9310336c..d4782030 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,9 +471,9 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111111 * (((17 * (t >> 10)) & 0xf)|9) * (t >> (t >> 3))) >>
+      (0x1111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x1111111 * (((11 * (t >> 5)) & 0xf) | 8) *
+     ((0x1111111 * (((11 * (t >> 0)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 12))
     );
     o *= 0.3;
diff @ 2018-06-09 22:04:50 +0100
diff --git a/src/go.c b/src/go.c
index d4782030..472df2b9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,9 +471,9 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x1111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
+      (0x11111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x1111111 * (((11 * (t >> 0)) & 0xf) | 8) *
+     ((0x11111111 * (((11 * (t >> 0)) & 0xf) | 8) *
         ((t & 0x2) << (t & 0xa))) >> 12))
     );
     o *= 0.3;
diff @ 2018-06-09 22:04:54 +0100
diff --git a/src/go.c b/src/go.c
index 472df2b9..61b9ca21 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x11111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((11 * (t >> 0)) & 0xf) | 8) *
-        ((t & 0x2) << (t & 0xa))) >> 12))
+        ((t & 0x4) << (t & 0xa))) >> 12))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:05:00 +0100
diff --git a/src/go.c b/src/go.c
index 61b9ca21..b399d4ff 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x11111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((11 * (t >> 0)) & 0xf) | 8) *
-        ((t & 0x4) << (t & 0xa))) >> 12))
+        ((t & 0x4) << (t & 0xa))) >> t))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:05:03 +0100
diff --git a/src/go.c b/src/go.c
index b399d4ff..60a91f58 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((17 * (t >> 0)) & 0xf)|9) * (t >> (t >> 3))) >>
+      (0x11111111 * (((17 * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((11 * (t >> 0)) & 0xf) | 8) *
         ((t & 0x4) << (t & 0xa))) >> t))
diff @ 2018-06-09 22:05:09 +0100
diff --git a/src/go.c b/src/go.c
index 60a91f58..75b14e2d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((17 * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x11111111 * (((11 * (t >> 0)) & 0xf) | 8) *
+     ((0x11111111 * (((11 * (t >> 0)) & 0xf) | t) *
         ((t & 0x4) << (t & 0xa))) >> t))
     );
     o *= 0.3;
diff @ 2018-06-09 22:05:12 +0100
diff --git a/src/go.c b/src/go.c
index 75b14e2d..c689f76a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((17 * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x11111111 * (((11 * (t >> 0)) & 0xf) | t) *
+     ((0x11111111 * (((t * (t >> 0)) & 0xf) | t) *
         ((t & 0x4) << (t & 0xa))) >> t))
     );
     o *= 0.3;
diff @ 2018-06-09 22:05:15 +0100
diff --git a/src/go.c b/src/go.c
index c689f76a..c3ad65d7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -471,7 +471,7 @@ go(S *s, int channels, const float *in, float *out)
     int t = (s->leaves += next) / 6;
     double o = bytebeat
     (
-      (0x11111111 * (((17 * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
+      (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((t * (t >> 0)) & 0xf) | t) *
         ((t & 0x4) << (t & 0xa))) >> t))
diff @ 2018-06-09 22:05:19 +0100
diff --git a/src/go.c b/src/go.c
index c3ad65d7..6e14ae56 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x11111111 * (((t * (t >> 0)) & 0xf) | t) *
+     ((0x11111111 * (((t * (t >> 0)) & T) | t) *
         ((t & 0x4) << (t & 0xa))) >> t))
     );
     o *= 0.3;
diff @ 2018-06-09 22:05:20 +0100
diff --git a/src/go.c b/src/go.c
index 6e14ae56..22193a1e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -473,7 +473,7 @@ go(S *s, int channels, const float *in, float *out)
     (
       (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
-     ((0x11111111 * (((t * (t >> 0)) & T) | t) *
+     ((0x11111111 * (((t * (t >> 0)) & t) | t) *
         ((t & 0x4) << (t & 0xa))) >> t))
     );
     o *= 0.3;
diff @ 2018-06-09 22:05:23 +0100
diff --git a/src/go.c b/src/go.c
index 22193a1e..bf7b0bef 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((t * (t >> 0)) & t) | t) *
-        ((t & 0x4) << (t & 0xa))) >> t))
+        ((t & 0x4) << (t & t))) >> t))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:05:27 +0100
diff --git a/src/go.c b/src/go.c
index bf7b0bef..645915a4 100644
--- a/src/go.c
+++ b/src/go.c
@@ -474,7 +474,7 @@ go(S *s, int channels, const float *in, float *out)
       (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
         ((20 - ((t >> 9) & 0xF)) +
      ((0x11111111 * (((t * (t >> 0)) & t) | t) *
-        ((t & 0x4) << (t & t))) >> t))
+        ((t & t) << (t & t))) >> t))
     );
     o *= 0.3;
     o = hip1(&s->leaveshi, o, 1);
diff @ 2018-06-09 22:05:31 +0100
diff --git a/src/go.c b/src/go.c
index 645915a4..ba2b4681 100644
--- a/src/go.c
+++ b/src/go.c
@@ -472,7 +472,7 @@ go(S *s, int channels, const float *in, float *out)
     double o = bytebeat
     (
       (0x11111111 * (((t * (t >> 0)) & t)|9) * (t >> (t >> 3))) >>
-        ((20 - ((t >> 9) & 0xF)) +
+        ((20 - ((t >> r) & 0xF)) +
      ((0x11111111 * (((t * (t >> 0)) & t) | t) *
         ((t & t) << (t & t))) >> t))
     );
diff @ 2018-06-09 22:05:35 +0100
diff --git a/src/go.c b/src/go.c
index ba2b4681..f5a34741 100644
--- a/src/go.c
+++ b/src/go.c
@@ -487,7 +487,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 = 0;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c)

the end