session-2018-03-18-172830

clive

a C audio live-coding skeleton

diff @ 2018-03-18 17:29:03 +0000
diff --git a/src/go.c b/src/go.c
index 24f3b9d9..7e03dfbd 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-03-18 17:29:13 +0000
diff --git a/src/go.c b/src/go.c
index 7e03dfbd..1d0f2bd7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 10;
+    double q = 20;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:29:21 +0000
diff --git a/src/go.c b/src/go.c
index 1d0f2bd7..ca8fd2eb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 20;
+    double q = 50;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:19 +0000
diff --git a/src/go.c b/src/go.c
index ca8fd2eb..79b3967b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 50;
+    double q = 80;
     na *= 10;
     nb *= 10;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:24 +0000
diff --git a/src/go.c b/src/go.c
index 79b3967b..c6c1e069 100644
--- a/src/go.c
+++ b/src/go.c
@@ -192,8 +192,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 80;
-    na *= 10;
-    nb *= 10;
+    na *= 8;
+    nb *= 8;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:30:28 +0000
diff --git a/src/go.c b/src/go.c
index c6c1e069..9696b667 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 80;
+    double q = 100;
     na *= 8;
     nb *= 8;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:33 +0000
diff --git a/src/go.c b/src/go.c
index 9696b667..2b487314 100644
--- a/src/go.c
+++ b/src/go.c
@@ -192,8 +192,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 100;
-    na *= 8;
-    nb *= 8;
+    na *= 7;
+    nb *= 7;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:30:36 +0000
diff --git a/src/go.c b/src/go.c
index 2b487314..f0405510 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 100;
+    double q = 150;
     na *= 7;
     nb *= 7;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:42 +0000
diff --git a/src/go.c b/src/go.c
index f0405510..83cb050f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -192,8 +192,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 150;
-    na *= 7;
-    nb *= 7;
+    na *= 6;
+    nb *= 6;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:30:46 +0000
diff --git a/src/go.c b/src/go.c
index 83cb050f..b2e2b368 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 150;
+    double q = 180;
     na *= 6;
     nb *= 6;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:49 +0000
diff --git a/src/go.c b/src/go.c
index b2e2b368..92e6a693 100644
--- a/src/go.c
+++ b/src/go.c
@@ -191,7 +191,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 180;
+    double q = 200;
     na *= 6;
     nb *= 6;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:30:52 +0000
diff --git a/src/go.c b/src/go.c
index 92e6a693..e03ac4b8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -192,8 +192,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 200;
-    na *= 6;
-    nb *= 6;
+    na *= 5;
+    nb *= 5;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:31:08 +0000
diff --git a/src/go.c b/src/go.c
index e03ac4b8..1508007b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -107,7 +107,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 + 0 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
@@ -117,7 +117,7 @@ go(S *s, int channels, const float *in, float *out)
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
-  env = 0.5;
+//  env = 0.5;
   freq = 50;
 
   // ===================================================================
diff @ 2018-03-18 17:31:34 +0000
diff --git a/src/go.c b/src/go.c
index 1508007b..5be5072c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -107,7 +107,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 + 0 * (n >= 0xC001)) * probability - 0.5;
+    probability = (4 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:31:38 +0000
diff --git a/src/go.c b/src/go.c
index 5be5072c..a6d07d91 100644
--- a/src/go.c
+++ b/src/go.c
@@ -107,7 +107,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 + 4 * (n >= 0xC001)) * probability - 0.5;
+    probability = (6 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:31:43 +0000
diff --git a/src/go.c b/src/go.c
index a6d07d91..8974e7cf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     freq = lop(&s->bfreq, freq, 20);
   }
 //  env = 0.5;
-  freq = 50;
+//  freq = 50;
 
   // ===================================================================
   // = 3 = total intraliminal extraction
diff @ 2018-03-18 17:31:52 +0000
diff --git a/src/go.c b/src/go.c
index 8974e7cf..69981f72 100644
--- a/src/go.c
+++ b/src/go.c
@@ -113,7 +113,7 @@ go(S *s, int channels, const float *in, float *out)
     double trigger = uniform < probability;
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 5);
-    double harmonic = 5 + clamp(N - zeroes, 0, 20);
+    double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
diff @ 2018-03-18 17:32:01 +0000
diff --git a/src/go.c b/src/go.c
index 69981f72..25ecc23d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -107,7 +107,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 = (6 + 4 * (n >= 0xC001)) * probability - 0.5;
+    probability = (8 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:32:15 +0000
diff --git a/src/go.c b/src/go.c
index 25ecc23d..21cb2e3d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,7 +106,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.51, N - zeroes);
     probability = (8 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-03-18 17:32:26 +0000
diff --git a/src/go.c b/src/go.c
index 21cb2e3d..0cc4e441 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,7 +106,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.51, N - zeroes);
+    double probability = pow(0.52, N - zeroes);
     probability = (8 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-03-18 17:32:40 +0000
diff --git a/src/go.c b/src/go.c
index 0cc4e441..bdfff33a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -107,7 +107,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.52, N - zeroes);
-    probability = (8 + 4 * (n >= 0xC001)) * probability - 0.5;
+    probability = (8 + 8 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:32:49 +0000
diff --git a/src/go.c b/src/go.c
index bdfff33a..95024b13 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,7 +106,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.52, N - zeroes);
+    double probability = pow(0.53, N - zeroes);
     probability = (8 + 8 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-03-18 17:32:54 +0000
diff --git a/src/go.c b/src/go.c
index 95024b13..f523e53d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,7 +106,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.53, N - zeroes);
+    double probability = pow(0.54, N - zeroes);
     probability = (8 + 8 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-03-18 17:32:58 +0000
diff --git a/src/go.c b/src/go.c
index f523e53d..ebe294ea 100644
--- a/src/go.c
+++ b/src/go.c
@@ -106,7 +106,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.54, N - zeroes);
+    double probability = pow(0.55, N - zeroes);
     probability = (8 + 8 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
diff @ 2018-03-18 17:33:05 +0000
diff --git a/src/go.c b/src/go.c
index ebe294ea..4a6a95c1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -112,7 +112,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, 10);
     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-03-18 17:33:13 +0000
diff --git a/src/go.c b/src/go.c
index 4a6a95c1..e13a8405 100644
--- a/src/go.c
+++ b/src/go.c
@@ -112,7 +112,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, 10);
+    env = lop(&s->benv, 0, 15);
     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-03-18 17:33:35 +0000
diff --git a/src/go.c b/src/go.c
index e13a8405..2fdb8544 100644
--- a/src/go.c
+++ b/src/go.c
@@ -114,7 +114,7 @@ go(S *s, int channels, const float *in, float *out)
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
-    freq = 10 * samphold(&s->bsh, harmonic, 1 - trigger);
+    freq = (n < 0xC001 ? 10 : 20) * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
 //  env = 0.5;
diff @ 2018-03-18 17:33:46 +0000
diff --git a/src/go.c b/src/go.c
index 2fdb8544..e164134f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -114,7 +114,7 @@ go(S *s, int channels, const float *in, float *out)
     s->benv.y += trigger;
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
-    freq = (n < 0xC001 ? 10 : 20) * samphold(&s->bsh, harmonic, 1 - trigger);
+    freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
     freq = lop(&s->bfreq, freq, 20);
   }
 //  env = 0.5;
diff @ 2018-03-18 17:33:51 +0000
diff --git a/src/go.c b/src/go.c
index e164134f..2324c8a2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -115,7 +115,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = lop(&s->bfreq, freq, 20);
+    freq = lop(&s->bfreq, freq, 12);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:34:33 +0000
diff --git a/src/go.c b/src/go.c
index 2324c8a2..b8a54e40 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,6 +86,9 @@ typedef struct
   LOP elop[2];
   PHASOR ephase;
 
+
+  BIQUAD ffilt;
+
 } S;
 
 // =====================================================================
@@ -115,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = lop(&s->bfreq, freq, 12);
+    freq = biquad(lowpass(&s->ffilt, 10, flatq), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:34:38 +0000
diff --git a/src/go.c b/src/go.c
index b8a54e40..c771fa72 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 10, flatq), freq);
+    freq = biquad(lowpass(&s->ffilt, 10, 3), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:34:43 +0000
diff --git a/src/go.c b/src/go.c
index c771fa72..44ee56f2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 10, 3), freq);
+    freq = biquad(lowpass(&s->ffilt, 12, 3), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:34:46 +0000
diff --git a/src/go.c b/src/go.c
index 44ee56f2..1bff72e7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 12, 3), freq);
+    freq = biquad(lowpass(&s->ffilt, 12, 5), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:34:56 +0000
diff --git a/src/go.c b/src/go.c
index 1bff72e7..676a9623 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 12, 5), freq);
+    freq = biquad(lowpass(&s->ffilt, 12, 10), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:35:00 +0000
diff --git a/src/go.c b/src/go.c
index 676a9623..8e3c807a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -118,7 +118,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 12, 10), freq);
+    freq = biquad(lowpass(&s->ffilt, 12, 12), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:35:06 +0000
diff --git a/src/go.c b/src/go.c
index 8e3c807a..f6f6681b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,7 +110,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 = (8 + 8 * (n >= 0xC001)) * probability - 0.5;
+    probability = (4 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:35:19 +0000
diff --git a/src/go.c b/src/go.c
index f6f6681b..a65e1986 100644
--- a/src/go.c
+++ b/src/go.c
@@ -167,7 +167,7 @@ go(S *s, int channels, const float *in, float *out)
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
-    double hgain = 0;
+    double hgain = 1;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
     double kgain = 0;
diff @ 2018-03-18 17:35:33 +0000
diff --git a/src/go.c b/src/go.c
index a65e1986..7899ca39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,7 +156,7 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = 0;
+    double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:35:42 +0000
diff --git a/src/go.c b/src/go.c
index 7899ca39..ac1f004c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,7 +156,7 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.5;
+    double fb = -0.75;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:35:52 +0000
diff --git a/src/go.c b/src/go.c
index ac1f004c..ef9a04cc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -150,8 +150,8 @@ go(S *s, int channels, const float *in, float *out)
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
-    double hz1 = 2 * khz * floor(pow(2, wrap(4 * p + 0.0)));
-    double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5)));
+    double hz1 = 2 * khz * floor(pow(2, wrap(4 * p + 0.0))) + 1;
+    double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     double fb1 = mix(sfb1, -sfb2, 0);
diff @ 2018-03-18 17:36:49 +0000
diff --git a/src/go.c b/src/go.c
index ef9a04cc..11dd6215 100644
--- a/src/go.c
+++ b/src/go.c
@@ -88,6 +88,7 @@ typedef struct
 
 
   BIQUAD ffilt;
+  BIQUAD hatfilt[2];
 
 } S;
 
@@ -154,6 +155,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 200, flatq), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 200, flatq), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
     double fb = -0.75;
diff @ 2018-03-18 17:36:58 +0000
diff --git a/src/go.c b/src/go.c
index 11dd6215..dfc19ceb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -155,8 +155,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 200, flatq), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 200, flatq), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 1000, flatq), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 1000, flatq), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
     double fb = -0.75;
diff @ 2018-03-18 17:37:05 +0000
diff --git a/src/go.c b/src/go.c
index dfc19ceb..cad7e003 100644
--- a/src/go.c
+++ b/src/go.c
@@ -155,8 +155,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 1000, flatq), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 1000, flatq), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 1000, 2), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
     double fb = -0.75;
diff @ 2018-03-18 17:37:12 +0000
diff --git a/src/go.c b/src/go.c
index cad7e003..d3f1171f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.75;
+    double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:15 +0000
diff --git a/src/go.c b/src/go.c
index d3f1171f..a9f058f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.5;
+    double fb = -0.2;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:16 +0000
diff --git a/src/go.c b/src/go.c
index a9f058f0..0d81b684 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.2;
+    double fb = -0.1;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:19 +0000
diff --git a/src/go.c b/src/go.c
index 0d81b684..a9f058f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.1;
+    double fb = -0.2;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:23 +0000
diff --git a/src/go.c b/src/go.c
index a9f058f0..155b4dcc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.2;
+    double fb = -0.25;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:32 +0000
diff --git a/src/go.c b/src/go.c
index 155b4dcc..f86ff230 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.25;
+    double fb = -0.26;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:34 +0000
diff --git a/src/go.c b/src/go.c
index f86ff230..d3f1171f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -159,7 +159,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0);
     double fb2 = mix(sfb2, -sfb1, 0);
-    double fb = -0.26;
+    double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:37:46 +0000
diff --git a/src/go.c b/src/go.c
index d3f1171f..347b665d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -157,8 +157,8 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 1000, 2), sfb1);
     sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
-    double fb1 = mix(sfb1, -sfb2, 0);
-    double fb2 = mix(sfb2, -sfb1, 0);
+    double fb1 = mix(sfb1, -sfb2, 0.1);
+    double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
diff @ 2018-03-18 17:37:55 +0000
diff --git a/src/go.c b/src/go.c
index 347b665d..15a954e8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -151,8 +151,8 @@ go(S *s, int channels, const float *in, float *out)
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
-    double hz1 = 2 * khz * floor(pow(2, wrap(4 * p + 0.0))) + 1;
-    double hz2 = 2 * khz * floor(pow(2, wrap(4 * p + 0.5))) - 1;
+    double hz1 = 2 * khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
+    double hz2 = 2 * khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 1000, 2), sfb1);
diff @ 2018-03-18 17:38:03 +0000
diff --git a/src/go.c b/src/go.c
index 15a954e8..fab944a0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -151,8 +151,8 @@ go(S *s, int channels, const float *in, float *out)
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
     double khz = 50 + 10 * (wrap(8 * p) > 1) + 25 * (wrap(2 * p) > 1);
-    double hz1 = 2 * khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
-    double hz2 = 2 * khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
+    double hz1 = khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
+    double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 1000, 2), sfb1);
diff @ 2018-03-18 17:38:23 +0000
diff --git a/src/go.c b/src/go.c
index fab944a0..d7e7a340 100644
--- a/src/go.c
+++ b/src/go.c
@@ -130,7 +130,7 @@ go(S *s, int channels, const float *in, float *out)
   {
     if (phase_reset)
     {
-      s->tphase.phase = 0;
+//      s->tphase.phase = 0;
       s->ttempo = SR * 1.0 / (5 << 16);
     }
     double p = phasor(&s->tphase, s->ttempo);
diff @ 2018-03-18 17:38:32 +0000
diff --git a/src/go.c b/src/go.c
index d7e7a340..53274b97 100644
--- a/src/go.c
+++ b/src/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= hat;
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
-    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);
     double hz1 = khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
diff @ 2018-03-18 17:38:38 +0000
diff --git a/src/go.c b/src/go.c
index 53274b97..801206a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= hat;
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
-    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 1);
+    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
     double hz1 = khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
diff @ 2018-03-18 17:38:48 +0000
diff --git a/src/go.c b/src/go.c
index 801206a6..142c4368 100644
--- a/src/go.c
+++ b/src/go.c
@@ -173,7 +173,7 @@ go(S *s, int channels, const float *in, float *out)
     double hgain = 1;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
-    double kgain = 0;
+    double kgain = 1;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-03-18 17:39:03 +0000
diff --git a/src/go.c b/src/go.c
index 142c4368..bae16921 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     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 * 2, 15)*15);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:10 +0000
diff --git a/src/go.c b/src/go.c
index bae16921..33968d48 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 15)*15);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 25)*25);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:16 +0000
diff --git a/src/go.c b/src/go.c
index 33968d48..0e487b9b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 25)*25);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:24 +0000
diff --git a/src/go.c b/src/go.c
index 0e487b9b..7794fdef 100644
--- a/src/go.c
+++ b/src/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     hat *= hat;
     s->tcomb1.length = SR;
     s->tcomb2.length = SR;
-    double khz = 50 + 10 * (wrap(8 * p) > 0.5) + 25 * (wrap(2 * p) > 0.75);
+    double khz = 50 + 10 * (wrap(8 * p) > 0.5) - 25 * (wrap(2 * p) > 0.75);
     double hz1 = khz * floor(pow(4, wrap(4 * p + 0.0))) + 1;
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
diff @ 2018-03-18 17:39:30 +0000
diff --git a/src/go.c b/src/go.c
index 7794fdef..9219db98 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 2, 50)*50);
+    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:43 +0000
diff --git a/src/go.c b/src/go.c
index 9219db98..5d05fd24 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * 3, 50)*50);
+    kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(4 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:48 +0000
diff --git a/src/go.c b/src/go.c
index 5d05fd24..665362a2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
-    kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(4 * p) < 0.5 ? 3 : 2), 50)*50);
+    kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
     tilex[0] = fb1;
diff @ 2018-03-18 17:39:58 +0000
diff --git a/src/go.c b/src/go.c
index 665362a2..62aa016b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -163,7 +163,7 @@ go(S *s, int channels, const float *in, float *out)
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*2;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*4-20, 5)*5)
          *  sin(vcf(&s->tkick[3], kick, khz*4+20, 5)*5);
diff @ 2018-03-18 17:40:06 +0000
diff --git a/src/go.c b/src/go.c
index 62aa016b..9c5d0342 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    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*6-20, 15)*15)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 15)*15);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:40:13 +0000
diff --git a/src/go.c b/src/go.c
index 9c5d0342..7fca0578 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-20, 15)*15)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 15)*15);
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-20, 150)*100)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 150)*100);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:40:20 +0000
diff --git a/src/go.c b/src/go.c
index 7fca0578..37889d8f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-20, 150)*100)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 150)*100);
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-2, 150)*100)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+2, 150)*100);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:40:26 +0000
diff --git a/src/go.c b/src/go.c
index 37889d8f..eb556a78 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-2, 150)*100)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+2, 150)*100);
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-8, 150)*100)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+8, 150)*100);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:40:33 +0000
diff --git a/src/go.c b/src/go.c
index eb556a78..f041c010 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-8, 150)*100)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+8, 150)*100);
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-40, 150)*100)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 150)*100);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:40:38 +0000
diff --git a/src/go.c b/src/go.c
index f041c010..2697fe7c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,7 +165,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-40, 150)*100)
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-30, 150)*100)
          *  sin(vcf(&s->tkick[3], kick, khz*6+20, 150)*100);
     tilex[0] = fb1;
     tilex[1] = fb2;
diff @ 2018-03-18 17:40:45 +0000
diff --git a/src/go.c b/src/go.c
index 2697fe7c..c08b5c5d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-30, 150)*100)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 150)*100);
+    kick += sin(vcf(&s->tkick[2], kick, khz*6-30, 500)*200)
+         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 500)*200);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:41:28 +0000
diff --git a/src/go.c b/src/go.c
index c08b5c5d..ebae8981 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,8 +165,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*6-30, 500)*200)
-         *  sin(vcf(&s->tkick[3], kick, khz*6+20, 500)*200);
+    kick += sin(vcf(&s->tkick[2], kick, khz*(3 + floor(8 * p))-30, 500)*200)
+         *  sin(vcf(&s->tkick[3], kick, khz*(3 + (floor(16 * p) % 8))+20, 500)*200);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:41:35 +0000
diff --git a/src/go.c b/src/go.c
index ebae8981..6b174cce 100644
--- a/src/go.c
+++ b/src/go.c
@@ -166,7 +166,7 @@ go(S *s, int channels, const float *in, float *out)
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + floor(8 * p))-30, 500)*200)
-         *  sin(vcf(&s->tkick[3], kick, khz*(3 + (floor(16 * p) % 8))+20, 500)*200);
+         *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:41:56 +0000
diff --git a/src/go.c b/src/go.c
index 6b174cce..b5a7abc7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,7 +165,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
-    kick += sin(vcf(&s->tkick[2], kick, khz*(3 + floor(8 * p))-30, 500)*200)
+    kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
          *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
     tilex[0] = fb1;
     tilex[1] = fb2;
diff @ 2018-03-18 17:42:07 +0000
diff --git a/src/go.c b/src/go.c
index b5a7abc7..a271f191 100644
--- a/src/go.c
+++ b/src/go.c
@@ -163,7 +163,7 @@ go(S *s, int channels, const float *in, float *out)
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 15)*15)*2;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
          *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
diff @ 2018-03-18 17:42:15 +0000
diff --git a/src/go.c b/src/go.c
index a271f191..57a7b8a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -163,7 +163,7 @@ go(S *s, int channels, const float *in, float *out)
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*2;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*4;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
          *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
diff @ 2018-03-18 17:42:35 +0000
diff --git a/src/go.c b/src/go.c
index 57a7b8a6..9011a54b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -210,8 +210,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na += 0*samphold(&s->psh[0], na, wrap(3 * pa[0]));
-    nb += 0*samphold(&s->psh[1], nb, wrap(3 * pb[0]));
+    na = samphold(&s->psh[0], na, wrap(3 * pa[0]));
+    nb = samphold(&s->psh[1], nb, wrap(3 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-03-18 17:42:48 +0000
diff --git a/src/go.c b/src/go.c
index 9011a54b..80307a27 100644
--- a/src/go.c
+++ b/src/go.c
@@ -210,8 +210,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na = samphold(&s->psh[0], na, wrap(3 * pa[0]));
-    nb = samphold(&s->psh[1], nb, wrap(3 * pb[0]));
+    na = samphold(&s->psh[0], na, wrap(5 * pa[0]));
+    nb = samphold(&s->psh[1], nb, wrap(5 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-03-18 17:43:02 +0000
diff --git a/src/go.c b/src/go.c
index 80307a27..c5ffd493 100644
--- a/src/go.c
+++ b/src/go.c
@@ -197,9 +197,9 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 200;
-    na *= 5;
-    nb *= 5;
+    double q = 100;
+    na *= 8;
+    nb *= 8;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:43:09 +0000
diff --git a/src/go.c b/src/go.c
index c5ffd493..5beeffc3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -197,7 +197,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 100;
+    double q = 50;
     na *= 8;
     nb *= 8;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:43:13 +0000
diff --git a/src/go.c b/src/go.c
index 5beeffc3..d823cdde 100644
--- a/src/go.c
+++ b/src/go.c
@@ -198,8 +198,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 50;
-    na *= 8;
-    nb *= 8;
+    na *= 16;
+    nb *= 16;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:43:21 +0000
diff --git a/src/go.c b/src/go.c
index d823cdde..e71abf4f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -173,7 +173,7 @@ go(S *s, int channels, const float *in, float *out)
     double hgain = 1;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
-    double kgain = 1;
+    double kgain = 0;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-03-18 17:43:30 +0000
diff --git a/src/go.c b/src/go.c
index e71abf4f..37d7e252 100644
--- a/src/go.c
+++ b/src/go.c
@@ -111,7 +111,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 + 4 * (n >= 0xC001)) * probability - 0.5;
+    probability = (16 + 4 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:43:35 +0000
diff --git a/src/go.c b/src/go.c
index 37d7e252..dd24b505 100644
--- a/src/go.c
+++ b/src/go.c
@@ -111,7 +111,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 = (16 + 4 * (n >= 0xC001)) * probability - 0.5;
+    probability = (16 + 0 * (n >= 0xC001)) * probability - 0.5;
     probability = clamp(probability, 0, 1);
     double uniform = rand() / (double) RAND_MAX;
     double trigger = uniform < probability;
diff @ 2018-03-18 17:43:44 +0000
diff --git a/src/go.c b/src/go.c
index dd24b505..e26b2f70 100644
--- a/src/go.c
+++ b/src/go.c
@@ -197,7 +197,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 50;
+    double q = 500;
     na *= 16;
     nb *= 16;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:43:50 +0000
diff --git a/src/go.c b/src/go.c
index e26b2f70..a699abd3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -198,8 +198,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 500;
-    na *= 16;
-    nb *= 16;
+    na *= 1;
+    nb *= 1;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:44:15 +0000
diff --git a/src/go.c b/src/go.c
index a699abd3..c350bc79 100644
--- a/src/go.c
+++ b/src/go.c
@@ -134,7 +134,8 @@ go(S *s, int channels, const float *in, float *out)
       s->ttempo = SR * 1.0 / (5 << 16);
     }
     double p = phasor(&s->tphase, s->ttempo);
-    double kick = 1 - wrap(16 * p);
+    double kick = 1 - wrap(8 * p);
+    kick *= kick;
     kick *= kick;
     kick *= kick;
     kick *= kick;
@@ -173,7 +174,7 @@ go(S *s, int channels, const float *in, float *out)
     double hgain = 1;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
-    double kgain = 0;
+    double kgain = 1;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-03-18 17:44:28 +0000
diff --git a/src/go.c b/src/go.c
index c350bc79..e266bb1a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -171,7 +171,7 @@ go(S *s, int channels, const float *in, float *out)
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
-    double hgain = 1;
+    double hgain = 4;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
     double kgain = 1;
diff @ 2018-03-18 17:44:38 +0000
diff --git a/src/go.c b/src/go.c
index e266bb1a..1e7ce62d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -144,7 +144,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = 1 - wrap(32 * p + 0.0);
+    double hat = 1 - wrap(16 * p + 0.5);
     hat *= hat;
     hat *= hat;
     hat *= hat;
diff @ 2018-03-18 17:44:46 +0000
diff --git a/src/go.c b/src/go.c
index 1e7ce62d..0f285006 100644
--- a/src/go.c
+++ b/src/go.c
@@ -144,7 +144,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = 1 - wrap(16 * p + 0.5);
+    double hat = 1 - wrap(8 * p + 0.5);
     hat *= hat;
     hat *= hat;
     hat *= hat;
diff @ 2018-03-18 17:45:00 +0000
diff --git a/src/go.c b/src/go.c
index 0f285006..d40bfc3d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -162,8 +162,8 @@ go(S *s, int channels, const float *in, float *out)
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
-    delwrite(&s->tcomb1, sin(hat * noise() - fb * fb1));
-    delwrite(&s->tcomb2, sin(hat * noise() - fb * fb2));
+    delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
+    delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*4;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
diff @ 2018-03-18 17:45:07 +0000
diff --git a/src/go.c b/src/go.c
index d40bfc3d..2b179d62 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,8 +156,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 1000, 2), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 1000, 2), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 500, 2), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 500, 2), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.1);
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
diff @ 2018-03-18 17:45:12 +0000
diff --git a/src/go.c b/src/go.c
index 2b179d62..d9712f80 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,8 +156,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 500, 2), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 500, 2), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 500, 8), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 500, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.1);
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
diff @ 2018-03-18 17:45:23 +0000
diff --git a/src/go.c b/src/go.c
index d9712f80..92ec1d8a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,8 +156,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 500, 8), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 500, 8), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 1000 / hz1, 8), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.1);
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
diff @ 2018-03-18 17:45:34 +0000
diff --git a/src/go.c b/src/go.c
index 92ec1d8a..6371f7b5 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,8 +156,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 1000 / hz1, 8), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 1000 / hz2, 8), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 16 * 1000 / hz1, 8), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 16* 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.1);
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
diff @ 2018-03-18 17:45:40 +0000
diff --git a/src/go.c b/src/go.c
index 6371f7b5..c142d61e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -156,8 +156,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 16 * 1000 / hz1, 8), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 16* 1000 / hz2, 8), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 8), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.1);
     double fb2 = mix(sfb2, -sfb1, 0.1);
     double fb = -0.5;
diff @ 2018-03-18 17:45:47 +0000
diff --git a/src/go.c b/src/go.c
index c142d61e..a61e3ecf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -158,8 +158,8 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 8), sfb1);
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
-    double fb1 = mix(sfb1, -sfb2, 0.1);
-    double fb2 = mix(sfb2, -sfb1, 0.1);
+    double fb1 = mix(sfb1, -sfb2, 0.01);
+    double fb2 = mix(sfb2, -sfb1, 0.01);
     double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
diff @ 2018-03-18 17:45:58 +0000
diff --git a/src/go.c b/src/go.c
index a61e3ecf..b99580f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -158,8 +158,8 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 8), sfb1);
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
-    double fb1 = mix(sfb1, -sfb2, 0.01);
-    double fb2 = mix(sfb2, -sfb1, 0.01);
+    double fb1 = mix(sfb1, -sfb2, 0.5);
+    double fb2 = mix(sfb2, -sfb1, 0.5);
     double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
diff @ 2018-03-18 17:46:00 +0000
diff --git a/src/go.c b/src/go.c
index b99580f0..1c8e6d1f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -158,8 +158,8 @@ go(S *s, int channels, const float *in, float *out)
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
     sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 8), sfb1);
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
-    double fb1 = mix(sfb1, -sfb2, 0.5);
-    double fb2 = mix(sfb2, -sfb1, 0.5);
+    double fb1 = mix(sfb1, -sfb2, 0.25);
+    double fb2 = mix(sfb2, -sfb1, 0.25);
     double fb = -0.5;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
diff @ 2018-03-18 17:46:08 +0000
diff --git a/src/go.c b/src/go.c
index 1c8e6d1f..eab8d872 100644
--- a/src/go.c
+++ b/src/go.c
@@ -164,7 +164,7 @@ go(S *s, int channels, const float *in, float *out)
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
-    kick +=tanh(vcf(&s->tkick[0], kick, khz, 50)*50)*4;
+    kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*4;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
          *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
diff @ 2018-03-18 17:46:14 +0000
diff --git a/src/go.c b/src/go.c
index eab8d872..88d55bb3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -165,7 +165,7 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*4;
-    kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 50)*50);
+    kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 5)*5);
     kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
          *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
     tilex[0] = fb1;
diff @ 2018-03-18 17:46:19 +0000
diff --git a/src/go.c b/src/go.c
index 88d55bb3..20437122 100644
--- a/src/go.c
+++ b/src/go.c
@@ -166,8 +166,8 @@ go(S *s, int channels, const float *in, float *out)
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*4;
     kick += sin(vcf(&s->tkick[1], kick, khz * (wrap(8 * p) < 0.5 ? 3 : 2), 5)*5);
-    kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 500)*200)
-         *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 500)*200);
+    kick += sin(vcf(&s->tkick[2], kick, khz*(3 + (((int)floor(8 * p) * 5)%8))-30, 50)*20)
+         *  sin(vcf(&s->tkick[3], kick, khz*(3 + ((int)floor(16 * p) % 8))+20, 50)*20);
     tilex[0] = fb1;
     tilex[1] = fb2;
     compress(tilex, &s->tcompress1, 5, 10, 25, 48, tilex);
diff @ 2018-03-18 17:46:32 +0000
diff --git a/src/go.c b/src/go.c
index 20437122..311072dc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -211,8 +211,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na = samphold(&s->psh[0], na, wrap(5 * pa[0]));
-    nb = samphold(&s->psh[1], nb, wrap(5 * pb[0]));
+    na += samphold(&s->psh[0], na, wrap(5 * pa[0]));
+    nb += samphold(&s->psh[1], nb, wrap(5 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-03-18 17:46:39 +0000
diff --git a/src/go.c b/src/go.c
index 311072dc..e2d55e57 100644
--- a/src/go.c
+++ b/src/go.c
@@ -199,8 +199,8 @@ go(S *s, int channels, const float *in, float *out)
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
     double q = 500;
-    na *= 1;
-    nb *= 1;
+    na *= 3;
+    nb *= 3;
     na = vcf(&s->pvcf[0], na * q, freq, q);
     nb = vcf(&s->pvcf[1], nb * q, freq, q);
     na = sin(na);
diff @ 2018-03-18 17:46:50 +0000
diff --git a/src/go.c b/src/go.c
index e2d55e57..36e82087 100644
--- a/src/go.c
+++ b/src/go.c
@@ -119,7 +119,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 12, 12), freq);
+    freq = biquad(lowpass(&s->ffilt, 24, 12), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:46:56 +0000
diff --git a/src/go.c b/src/go.c
index 36e82087..e6385626 100644
--- a/src/go.c
+++ b/src/go.c
@@ -119,7 +119,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 24, 12), freq);
+    freq = biquad(lowpass(&s->ffilt, 50, 12), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:47:06 +0000
diff --git a/src/go.c b/src/go.c
index e6385626..deba5989 100644
--- a/src/go.c
+++ b/src/go.c
@@ -119,7 +119,7 @@ go(S *s, int channels, const float *in, float *out)
     env = lop(&s->benv, 0, 15);
     double harmonic = 5 + clamp(N - zeroes - 3, 0, 20);
     freq = (n < 0xC001 ? 10 : 15) * samphold(&s->bsh, harmonic, 1 - trigger);
-    freq = biquad(lowpass(&s->ffilt, 50, 12), freq);
+    freq = biquad(lowpass(&s->ffilt, 50, 50), freq);
   }
 //  env = 0.5;
 //  freq = 50;
diff @ 2018-03-18 17:47:47 +0000
diff --git a/src/go.c b/src/go.c
index deba5989..768290e1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -0.5;
+    double fb = p;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:47:50 +0000
diff --git a/src/go.c b/src/go.c
index 768290e1..5b2e0a78 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = p;
+    double fb = -p;
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:12 +0000
diff --git a/src/go.c b/src/go.c
index 5b2e0a78..46633418 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -p;
+    double fb = -pow(p, 4);
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:21 +0000
diff --git a/src/go.c b/src/go.c
index 46633418..43d2e507 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -pow(p, 4);
+    double fb = -pow(wrap(p * 2), 4);
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:28 +0000
diff --git a/src/go.c b/src/go.c
index 43d2e507..b71b82be 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -pow(wrap(p * 2), 4);
+    double fb = -pow(wrap(p * 2), 0.25);
     fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:38 +0000
diff --git a/src/go.c b/src/go.c
index b71b82be..f3be8f4f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -161,7 +161,7 @@ go(S *s, int channels, const float *in, float *out)
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
     double fb = -pow(wrap(p * 2), 0.25);
-    fb = samphold(&s->tgate[2], fb, wrap(4 * p));
+//    fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
     kick +=tanh(vcf(&s->tkick[0], kick, khz, 5)*5)*4;
diff @ 2018-03-18 17:48:49 +0000
diff --git a/src/go.c b/src/go.c
index f3be8f4f..f3c07835 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -pow(wrap(p * 2), 0.25);
+    double fb = -pow(wrap(p * 2), 0.4);
 //    fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:50 +0000
diff --git a/src/go.c b/src/go.c
index f3c07835..5b716cdc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -pow(wrap(p * 2), 0.4);
+    double fb = -pow(wrap(p * 2), 4);
 //    fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:48:55 +0000
diff --git a/src/go.c b/src/go.c
index 5b716cdc..7525780c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,7 +160,7 @@ go(S *s, int channels, const float *in, float *out)
     sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
-    double fb = -pow(wrap(p * 2), 4);
+    double fb = 1-pow(wrap(p * 2), 4);
 //    fb = samphold(&s->tgate[2], fb, wrap(4 * p));
     delwrite(&s->tcomb1, tanh(hat * noise() - fb * fb1));
     delwrite(&s->tcomb2, tanh(hat * noise() - fb * fb2));
diff @ 2018-03-18 17:49:06 +0000
diff --git a/src/go.c b/src/go.c
index 7525780c..9ffc055b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -174,7 +174,7 @@ go(S *s, int channels, const float *in, float *out)
     double hgain = 4;
     tilex[0] *= hgain;
     tilex[1] *= hgain;
-    double kgain = 1;
+    double kgain = 0;
     kgain = samphold(&s->tgate[0], kgain, p);
     tilex[0] += kgain * kick;
     tilex[1] += kgain * kick;
diff @ 2018-03-18 17:49:24 +0000
diff --git a/src/go.c b/src/go.c
index 9ffc055b..5b5eb150 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,8 +245,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-03-18 17:49:31 +0000
diff --git a/src/go.c b/src/go.c
index 5b5eb150..c803e330 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,8 +245,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-03-18 17:49:37 +0000
diff --git a/src/go.c b/src/go.c
index c803e330..a9b7936b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,8 +245,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.25, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.25, 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-03-18 17:49:45 +0000
diff --git a/src/go.c b/src/go.c
index a9b7936b..72d9ef96 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,8 +245,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.25, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.25, 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-03-18 17:49:52 +0000
diff --git a/src/go.c b/src/go.c
index 72d9ef96..6900d73d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -232,7 +232,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
-    double hz = 0 * bpm / 60;
+    double hz = 0.125 * bpm / 60;
     double p = phasor(&s->ephase, hz);
     double t = twopi * p;
     double co = cos(t);
diff @ 2018-03-18 17:50:13 +0000
diff --git a/src/go.c b/src/go.c
index 6900d73d..26378c37 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,7 @@ go(S *s, int channels, const float *in, float *out)
     double t = twopi * p;
     double co = cos(t);
     double si = sin(t);
-    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 2);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1 : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:50:28 +0000
diff --git a/src/go.c b/src/go.c
index 26378c37..2c3eca9a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -245,8 +245,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.75, pow(wrap(8 * p), 0.25), 0));
+    es[1] = mix(mixdown[1], es[1], mix(0.75, 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-03-18 17:50:52 +0000
diff --git a/src/go.c b/src/go.c
index 2c3eca9a..c4933892 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,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 : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1./(1 << ((rand() % 8) + 1) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:50:57 +0000
diff --git a/src/go.c b/src/go.c
index c4933892..cdb992fc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,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 << ((rand() % 8) + 1) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 1./(1 << ((rand() % 8) + 1)) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:51:05 +0000
diff --git a/src/go.c b/src/go.c
index cdb992fc..9dcf6408 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,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 << ((rand() % 8) + 1)) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 0.125./(1 << ((rand() % 8) + 1)) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:51:07 +0000
diff --git a/src/go.c b/src/go.c
index 9dcf6408..3e24ef4e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,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 ? 0.125./(1 << ((rand() % 8) + 1)) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? 0.125/(1 << ((rand() % 8) + 1)) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:51:37 +0000
diff --git a/src/go.c b/src/go.c
index 3e24ef4e..812a2555 100644
--- a/src/go.c
+++ b/src/go.c
@@ -90,6 +90,8 @@ typedef struct
   BIQUAD ffilt;
   BIQUAD hatfilt[2];
 
+  SAMPHOLD esh[4];
+
 } S;
 
 // =====================================================================
diff @ 2018-03-18 17:51:59 +0000
diff --git a/src/go.c b/src/go.c
index 812a2555..50c55f43 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,7 +239,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 ? 0.125/(1 << ((rand() % 8) + 1)) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? samphold(&s->esh[0], 0.125/(1 << ((rand() % 8) + 1)), p) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:52:16 +0000
diff --git a/src/go.c b/src/go.c
index 50c55f43..5dd9d712 100644
--- a/src/go.c
+++ b/src/go.c
@@ -247,8 +247,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.75, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(0.75, pow(wrap(8 * p), 0.25), 0));
+    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-03-18 17:52:26 +0000
diff --git a/src/go.c b/src/go.c
index 5dd9d712..390e1462 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,7 +239,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 ? samphold(&s->esh[0], 0.125/(1 << ((rand() % 8) + 1)), p) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : 0.125);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:53:05 +0000
diff --git a/src/go.c b/src/go.c
index 390e1462..e8e2caa2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,7 +239,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 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : 0.125);
+    double ldelms = 60000 / bpm * (p < 0.75 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : samphold(&s->esh[1], 0.125 * (1 + (rand() % 8)), p);
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:53:06 +0000
diff --git a/src/go.c b/src/go.c
index e8e2caa2..c061f1b1 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,7 +239,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 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : samphold(&s->esh[1], 0.125 * (1 + (rand() % 8)), p);
+    double ldelms = 60000 / bpm * (p < 0.75 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : samphold(&s->esh[1], 0.125 * (1 + (rand() % 8)), p));
     double rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2018-03-18 17:53:33 +0000
diff --git a/src/go.c b/src/go.c
index c061f1b1..9325a38c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -239,8 +239,12 @@ 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 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p) : samphold(&s->esh[1], 0.125 * (1 + (rand() % 8)), p));
-    double rdelms = ldelms;
+    double ldelms = 60000 / bpm *
+      (p < 0.75 ? samphold(&s->esh[0], 1.0/(1 << ((rand() % 8) + 1)), p)
+                : samphold(&s->esh[1], 0.125 * (1 + (rand() % 8)), p));
+    double rdelms = 60000 / bpm *
+      (p < 0.75 ? samphold(&s->esh[2], 1.0/(1 << ((rand() % 8) + 1)), p)
+                : samphold(&s->esh[3], 0.125 * (1 + (rand() % 8)), p));
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     double el = delread4(&s->edelay1, ldelms + co);
diff @ 2018-03-18 17:53:47 +0000
diff --git a/src/go.c b/src/go.c
index 9325a38c..818d2092 100644
--- a/src/go.c
+++ b/src/go.c
@@ -234,7 +234,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
-    double hz = 0.125 * bpm / 60;
+    double hz = 0.25 * bpm / 60;
     double p = phasor(&s->ephase, hz);
     double t = twopi * p;
     double co = cos(t);
diff @ 2018-03-18 17:54:02 +0000
diff --git a/src/go.c b/src/go.c
index 818d2092..f62525fc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -251,8 +251,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(1, pow(wrap(8 * p), 0.25), 0));
-    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 0));
+    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0.25));
+    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 0.25));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
diff @ 2018-03-18 17:54:09 +0000
diff --git a/src/go.c b/src/go.c
index f62525fc..9fab5da3 100644
--- a/src/go.c
+++ b/src/go.c
@@ -251,8 +251,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(1, pow(wrap(8 * p), 0.25), 0.25));
-    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 0.25));
+    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0.5));
+    es[1] = mix(mixdown[1], es[1], mix(1, 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-03-18 17:54:26 +0000
diff --git a/src/go.c b/src/go.c
index 9fab5da3..9223e511 100644
--- a/src/go.c
+++ b/src/go.c
@@ -213,8 +213,8 @@ go(S *s, int channels, const float *in, float *out)
     hilbert(pb, &s->philbert[1], pb);
     pa[0] = wrap(atan2(pa[0], pa[1]) / twopi);
     pb[0] = wrap(atan2(pb[0], pb[1]) / twopi);
-    na += samphold(&s->psh[0], na, wrap(5 * pa[0]));
-    nb += samphold(&s->psh[1], nb, wrap(5 * pb[0]));
+    na = samphold(&s->psh[0], na, wrap(5 * pa[0]));
+    nb = samphold(&s->psh[1], nb, wrap(5 * pb[0]));
     pnoise[0] = na;
     pnoise[1] = nb;
     compress(pnoise, &s->pcompress, 5, 10, 25, 48, pnoise);
diff @ 2018-03-18 17:54:30 +0000
diff --git a/src/go.c b/src/go.c
index 9223e511..a992e52f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -200,7 +200,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     double na = env * pink(&s->pink[0]);
     double nb = env * pink(&s->pink[1]);
-    double q = 500;
+    double q = 5000;
     na *= 3;
     nb *= 3;
     na = vcf(&s->pvcf[0], na * q, freq, q);
diff @ 2018-03-18 17:54:41 +0000
diff --git a/src/go.c b/src/go.c
index a992e52f..50d302f6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -158,8 +158,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 8), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 8), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 16), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 16), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
     double fb = 1-pow(wrap(p * 2), 4);
diff @ 2018-03-18 17:55:02 +0000
diff --git a/src/go.c b/src/go.c
index 50d302f6..75290080 100644
--- a/src/go.c
+++ b/src/go.c
@@ -128,6 +128,7 @@ go(S *s, int channels, const float *in, float *out)
 
   // ===================================================================
   // = 3 = total intraliminal extraction
+  double kick;
   double tilex[2] = { 0, 0 };
   {
     if (phase_reset)
@@ -136,7 +137,7 @@ go(S *s, int channels, const float *in, float *out)
       s->ttempo = SR * 1.0 / (5 << 16);
     }
     double p = phasor(&s->tphase, s->ttempo);
-    double kick = 1 - wrap(8 * p);
+    kick = 1 - wrap(8 * p);
     kick *= kick;
     kick *= kick;
     kick *= kick;
diff @ 2018-03-18 17:55:14 +0000
diff --git a/src/go.c b/src/go.c
index 75290080..da058072 100644
--- a/src/go.c
+++ b/src/go.c
@@ -257,8 +257,8 @@ go(S *s, int channels, const float *in, float *out)
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0]);
     delwrite(&s->edelay2, es[1]);
-    mixdown[0] = es[0];
-    mixdown[1] = es[1];
+    mixdown[0] = es[0] + kick;
+    mixdown[1] = es[1] + kick;
   }
 
   // ===================================================================
diff @ 2018-03-18 17:55:32 +0000
diff --git a/src/go.c b/src/go.c
index da058072..2fc8384e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -142,8 +142,9 @@ go(S *s, int channels, const float *in, float *out)
     kick *= kick;
     kick *= kick;
     kick *= kick;
+    kick *= kick;
     double kickenv = kick;
-    kick *= 16;
+    kick *= 8;
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
diff @ 2018-03-18 17:55:52 +0000
diff --git a/src/go.c b/src/go.c
index 2fc8384e..70130758 100644
--- a/src/go.c
+++ b/src/go.c
@@ -160,8 +160,8 @@ go(S *s, int channels, const float *in, float *out)
     double hz2 = khz * floor(pow(4, wrap(4 * p + 0.5))) - 1;
     double sfb1 = delread4(&s->tcomb1, 1000 / hz1);
     double sfb2 = delread4(&s->tcomb2, 1000 / hz2);
-    sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, 16), sfb1);
-    sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, 16), sfb2);
+    sfb1 = biquad(highpass(&s->hatfilt[0], 32 * 1000 / hz1, flatq), sfb1);
+    sfb2 = biquad(highpass(&s->hatfilt[1], 32 * 1000 / hz2, flatq), sfb2);
     double fb1 = mix(sfb1, -sfb2, 0.25);
     double fb2 = mix(sfb2, -sfb1, 0.25);
     double fb = 1-pow(wrap(p * 2), 4);
diff @ 2018-03-18 17:56:23 +0000
diff --git a/src/go.c b/src/go.c
index 70130758..55ed0768 100644
--- a/src/go.c
+++ b/src/go.c
@@ -129,6 +129,7 @@ go(S *s, int channels, const float *in, float *out)
   // ===================================================================
   // = 3 = total intraliminal extraction
   double kick;
+  double hat;
   double tilex[2] = { 0, 0 };
   {
     if (phase_reset)
@@ -148,7 +149,7 @@ go(S *s, int channels, const float *in, float *out)
     kick = sin(twopi * kick);
     kick *= 1 + kickenv;
     kick = tanh(kick);
-    double hat = 1 - wrap(8 * p + 0.5);
+    hat = 1 - wrap(8 * p + 0.5);
     hat *= hat;
     hat *= hat;
     hat *= hat;
@@ -256,8 +257,8 @@ go(S *s, int channels, const float *in, float *out)
     es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 0.5));
     es[1] = mix(mixdown[1], es[1], mix(1, 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]);
+    delwrite(&s->edelay1, es[0] + hat * noise());
+    delwrite(&s->edelay2, es[1] + hat * noise());
     mixdown[0] = es[0] + kick;
     mixdown[1] = es[1] + kick;
   }
diff @ 2018-03-18 17:56:34 +0000
diff --git a/src/go.c b/src/go.c
index 55ed0768..44f6378a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -254,8 +254,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(1, pow(wrap(8 * p), 0.25), 0.5));
-    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 0.5));
+    es[0] = mix(mixdown[0], es[0], mix(1, pow(wrap(8 * p), 0.25), 1));
+    es[1] = mix(mixdown[1], es[1], mix(1, pow(wrap(8 * p), 0.25), 1));
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0] + hat * noise());
     delwrite(&s->edelay2, es[1] + hat * noise());
diff @ 2018-03-18 17:56:58 +0000
diff --git a/src/go.c b/src/go.c
index 44f6378a..0b977b4b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
-    double hz = 0.25 * bpm / 60;
+    double hz = 0.5 * bpm / 60;
     double p = phasor(&s->ephase, hz);
     double t = twopi * p;
     double co = cos(t);
diff @ 2018-03-18 17:57:04 +0000
diff --git a/src/go.c b/src/go.c
index 0b977b4b..1713e7e2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -237,7 +237,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
-    double hz = 0.5 * bpm / 60;
+    double hz = bpm / 60;
     double p = phasor(&s->ephase, hz);
     double t = twopi * p;
     double co = cos(t);
diff @ 2018-03-18 17:57:16 +0000
diff --git a/src/go.c b/src/go.c
index 1713e7e2..590e1162 100644
--- a/src/go.c
+++ b/src/go.c
@@ -135,7 +135,7 @@ go(S *s, int channels, const float *in, float *out)
     if (phase_reset)
     {
 //      s->tphase.phase = 0;
-      s->ttempo = SR * 1.0 / (5 << 16);
+      s->ttempo = SR * 1.0 / (7 << 16);
     }
     double p = phasor(&s->tphase, s->ttempo);
     kick = 1 - wrap(8 * p);
diff @ 2018-03-18 17:57:24 +0000
diff --git a/src/go.c b/src/go.c
index 590e1162..f85c501a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int
 go(S *s, int channels, const float *in, float *out)
 {
   double mixdown[2] = { 0, 0 };
-  double bpm = 60 * SR * 16.0 / (5 << 16);
+  double bpm = 60 * SR * 16.0 / (7 << 16);
   int time = s->time++;
   int phase_reset = ((time / 5) & ((1 << 16) - 1)) == 0;
 
diff @ 2018-03-18 17:58:01 +0000
diff --git a/src/go.c b/src/go.c
index f85c501a..6a9e9791 100644
--- a/src/go.c
+++ b/src/go.c
@@ -91,7 +91,7 @@ typedef struct
   BIQUAD hatfilt[2];
 
   SAMPHOLD esh[4];
-
+  double M;
 } S;
 
 // =====================================================================
@@ -99,8 +99,9 @@ typedef struct
 int
 go(S *s, int channels, const float *in, float *out)
 {
+  double M = s->M = 1;
   double mixdown[2] = { 0, 0 };
-  double bpm = 60 * SR * 16.0 / (7 << 16);
+  double bpm = 60 * SR * 16.0 / (7 << 16) / M;
   int time = s->time++;
   int phase_reset = ((time / 5) & ((1 << 16) - 1)) == 0;
 
diff @ 2018-03-18 17:58:20 +0000
diff --git a/src/go.c b/src/go.c
index 6a9e9791..6f5ba3df 100644
--- a/src/go.c
+++ b/src/go.c
@@ -110,7 +110,7 @@ go(S *s, int channels, const float *in, float *out)
   double env;
   double freq;
   {
-    int N = 16;
+    int N = 1;
     int n = (time / 5) & ((1 << N) - 1);
     double zeroes = clamp(count_trailing_zeroes(n), 0, N);
     double probability = pow(0.55, N - zeroes);
diff @ 2018-03-18 17:58:34 +0000
diff --git a/src/go.c b/src/go.c
index 6f5ba3df..e06e169f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -99,7 +99,7 @@ typedef struct
 int
 go(S *s, int channels, const float *in, float *out)
 {
-  double M = s->M = 1;
+  double M = s->M *= 1.000001;
   double mixdown[2] = { 0, 0 };
   double bpm = 60 * SR * 16.0 / (7 << 16) / M;
   int time = s->time++;
diff @ 2018-03-18 17:58:52 +0000
diff --git a/src/go.c b/src/go.c
index e06e169f..a2e43970 100644
--- a/src/go.c
+++ b/src/go.c
@@ -260,14 +260,14 @@ go(S *s, int channels, const float *in, float *out)
     compress(es, &s->ecompress2, 5, 10, 25, 48, es);
     delwrite(&s->edelay1, es[0] + hat * noise());
     delwrite(&s->edelay2, es[1] + hat * noise());
-    mixdown[0] = es[0] + kick;
-    mixdown[1] = es[1] + kick;
+    mixdown[0] = kick;
+    mixdown[1] = kick;
   }
 
   // ===================================================================
   // = 0 = mixdown
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = 1;
+  double volume = ;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c)
diff @ 2018-03-18 17:58:54 +0000
diff --git a/src/go.c b/src/go.c
index a2e43970..165280f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -267,7 +267,7 @@ go(S *s, int channels, const float *in, float *out)
   // ===================================================================
   // = 0 = mixdown
   compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-  double volume = ;
+  double volume = 1;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
   for (int c = 0; c < channels && c < 2; ++c)

the end