session-2016-08-07-201143

clive

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

diff @ 2016-08-07 21:12:21 +0100
diff --git a/src/go.c b/src/go.c
index 2624721..226c342 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0/*-12*/, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, 0/* 19*/, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:12:53 +0100
diff --git a/src/go.c b/src/go.c
index 226c342..cc79be6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.2, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:13:04 +0100
diff --git a/src/go.c b/src/go.c
index cc79be6..f362ea6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,7 +48,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:13:08 +0100
diff --git a/src/go.c b/src/go.c
index f362ea6..211180d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,7 +48,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.2, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:13:22 +0100
diff --git a/src/go.c b/src/go.c
index 211180d..4bb912a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.3, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.3, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:13:38 +0100
diff --git a/src/go.c b/src/go.c
index 4bb912a..16b8634 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,7 +48,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.3, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.6, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:13:50 +0100
diff --git a/src/go.c b/src/go.c
index 16b8634..f685ae0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.5, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.6, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:14:04 +0100
diff --git a/src/go.c b/src/go.c
index f685ae0..1bf15a7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -61,7 +61,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 500, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
 
   // breakbeats
diff @ 2016-08-07 21:14:14 +0100
diff --git a/src/go.c b/src/go.c
index 1bf15a7..eaa9f3b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,7 +48,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -0.6, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:14:26 +0100
diff --git a/src/go.c b/src/go.c
index eaa9f3b..911f1ce 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 0.9, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.3, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:14:38 +0100
diff --git a/src/go.c b/src/go.c
index 911f1ce..4422f7d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -32,10 +32,10 @@ typedef struct {
 int go(S *s, int channels, const float *in, float *out) {
 
   // trigger impulse on reload
-  double impulse[2] = { s->reloaded, s->reloaded };
   if (s->reloaded) {
     s->reloaded = 0;
   }
+  double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
   double p = phasor(&s->phase, 0.001);
diff @ 2016-08-07 21:14:52 +0100
diff --git a/src/go.c b/src/go.c
index 4422f7d..5320f5d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.3, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.3, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.51, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:15:01 +0100
diff --git a/src/go.c b/src/go.c
index 5320f5d..e6fe318 100644
--- a/src/go.c
+++ b/src/go.c
@@ -38,8 +38,8 @@ int go(S *s, int channels, const float *in, float *out) {
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.001);
-  double modulation = 100 * cos(twopi * p);
+  double p = phasor(&s->phase, 0.01);
+  double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
     , delread4(&s->echo[0].del, 200 + modulation)
diff @ 2016-08-07 21:15:16 +0100
diff --git a/src/go.c b/src/go.c
index e6fe318..2445e53 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 1.5, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -1.51, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -2.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:15:41 +0100
diff --git a/src/go.c b/src/go.c
index 2445e53..3d10b41 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,8 +47,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 2.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -2.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:16:02 +0100
diff --git a/src/go.c b/src/go.c
index 3d10b41..9e63b7c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -47,7 +47,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.2, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:17:02 +0100
diff --git a/src/go.c b/src/go.c
index 9e63b7c..f30c6c6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -26,6 +26,7 @@ typedef struct {
   PITCHSHIFT shift[4];
   COMPRESS compress[2];
   SO2ECHO echo[2];
+  PHASOR bass;
 } S;
 
 // per sample DSP callback
@@ -47,8 +48,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 3.2, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -3.1, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -64,12 +65,9 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
 
-  // breakbeats
-  const short *breakbeat = &samples_u47_samples_u47_breakbeat_u46_wav;
-  const short *breakbeat_end = &samples_u47_samples_u47_breakbeat_u46_wav_end;
-  const size_t breakbeat_length = (breakbeat_end - breakbeat) / 2;
-  (void) breakbeat;
-  (void) breakbeat_length;
+  double bass = phasor(&s->bass, 45);
+
+
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-08-07 21:17:25 +0100
diff --git a/src/go.c b/src/go.c
index f30c6c6..fa49e55 100644
--- a/src/go.c
+++ b/src/go.c
@@ -49,7 +49,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45);
-
+  bass = (bass > 0.5) - 0.5;
 
 
   // compress mix down
diff @ 2016-08-07 21:17:59 +0100
diff --git a/src/go.c b/src/go.c
index fa49e55..8e3b770 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,8 +48,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 4.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -4.2, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.2, down);
     feedback[c] = feedback[c] + down + up;
   }
 
@@ -67,6 +67,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double bass = phasor(&s->bass, 45);
   bass = (bass > 0.5) - 0.5;
+  compressed[0] += bass;
+  compressed[1] += bass;
 
 
   // compress mix down
diff @ 2016-08-07 21:18:12 +0100
diff --git a/src/go.c b/src/go.c
index 8e3b770..0a3aa7c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,6 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45);
+  bass = wrap(2.6666 * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:18:47 +0100
diff --git a/src/go.c b/src/go.c
index 0a3aa7c..d0922fd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45);
-  bass = wrap(2.6666 * bass);
+  bass = wrap(pow(4, 1 - wrap(64 * p)) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:18:59 +0100
diff --git a/src/go.c b/src/go.c
index d0922fd..0b8a366 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,8 +48,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 5.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -7.2, down);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 12.1, feedback[c]);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:19:36 +0100
diff --git a/src/go.c b/src/go.c
index 0b8a366..a9fe8d9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,7 +65,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
 
-  double bass = phasor(&s->bass, 45);
+  double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
   bass = wrap(pow(4, 1 - wrap(64 * p)) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
diff @ 2016-08-07 21:19:47 +0100
diff --git a/src/go.c b/src/go.c
index a9fe8d9..be17558 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
-  bass = wrap(pow(4, 1 - wrap(64 * p)) * bass);
+  bass = wrap(pow(8, 1 - wrap(64 * p)) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:20:01 +0100
diff --git a/src/go.c b/src/go.c
index be17558..a30b97e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
-  bass = wrap(pow(8, 1 - wrap(64 * p)) * bass);
+  bass = wrap(pow(16, 1 - wrap(64 * p)) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:20:20 +0100
diff --git a/src/go.c b/src/go.c
index a30b97e..97a9d08 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
-  bass = wrap(pow(16, 1 - wrap(64 * p)) * bass);
+  bass = wrap(pow(16, fabs(sin(twopi * wrap(64 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:20:27 +0100
diff --git a/src/go.c b/src/go.c
index 97a9d08..dafe6bc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
   }
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
-  bass = wrap(pow(16, fabs(sin(twopi * wrap(64 * p)))) * bass);
+  bass = wrap(pow(16, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:20:45 +0100
diff --git a/src/go.c b/src/go.c
index dafe6bc..35035ef 100644
--- a/src/go.c
+++ b/src/go.c
@@ -65,8 +65,8 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
   }
 
-  double bass = phasor(&s->bass, 45 + 15 * (wrap(256 * p) > 0.666));
-  bass = wrap(pow(16, fabs(sin(twopi * wrap(32 * p)))) * bass);
+  double bass = phasor(&s->bass, 45 + 15 * (wrap(128 * p) > 0.666));
+  bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:21:44 +0100
diff --git a/src/go.c b/src/go.c
index 35035ef..8441c9c 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,6 +71,16 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += bass;
   compressed[1] += bass;
 
+  double kick = 1 - wrap(128 * p);
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= kick;
+  kick *= 12;
+  kick = sin(twopi * kick);
+  kick *= 4;
+  compressed[0] += kick;
+  compressed[1] += kick;
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-08-07 21:22:04 +0100
diff --git a/src/go.c b/src/go.c
index 8441c9c..c468896 100644
--- a/src/go.c
+++ b/src/go.c
@@ -71,7 +71,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += bass;
   compressed[1] += bass;
 
-  double kick = 1 - wrap(128 * p);
+  double kick = 1 - wrap(2.6666 * wrap(64 * p));
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-07 21:22:28 +0100
diff --git a/src/go.c b/src/go.c
index c468896..be77891 100644
--- a/src/go.c
+++ b/src/go.c
@@ -62,7 +62,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // write to delay lines
   for (int c = 0; c < 2; ++c) {
-    so2echo(&s->echo[c], 20, 1000, tanh(compressed[c] + impulse[c]));
+    so2echo(&s->echo[c], 200, 4000, tanh(compressed[c] + impulse[c]));
   }
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(128 * p) > 0.666));
@@ -82,6 +82,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
+
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
diff @ 2016-08-07 21:23:19 +0100
diff --git a/src/go.c b/src/go.c
index be77891..cbefccc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -82,6 +82,19 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
+  double snare = 1 - wrap(64 * p + 0.5);
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= snare;
+  snare *= noise();
+  snare *= 4;
+  snare = tanh(snare);
+  snare *= 4;
+  compressed[0] += snare;
+  compressed[1] += snare;
+  
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-08-07 21:23:38 +0100
diff --git a/src/go.c b/src/go.c
index cbefccc..9c45629 100644
--- a/src/go.c
+++ b/src/go.c
@@ -48,7 +48,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 12.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 15.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:23:42 +0100
diff --git a/src/go.c b/src/go.c
index 9c45629..3df2ed9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -49,7 +49,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
     double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 15.1, feedback[c]);
-    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -12.1, down);
+    double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -24.1, down);
     feedback[c] = feedback[c] + down + up;
   }
 
diff @ 2016-08-07 21:23:51 +0100
diff --git a/src/go.c b/src/go.c
index 3df2ed9..9150a5a 100644
--- a/src/go.c
+++ b/src/go.c
@@ -56,7 +56,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 1;
+  double gain = 2;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-08-07 21:24:56 +0100
diff --git a/src/go.c b/src/go.c
index 9150a5a..53746ca 100644
--- a/src/go.c
+++ b/src/go.c
@@ -27,6 +27,7 @@ typedef struct {
   COMPRESS compress[2];
   SO2ECHO echo[2];
   PHASOR bass;
+  MOOG moog;
 } S;
 
 // per sample DSP callback
@@ -68,6 +69,9 @@ int go(S *s, int channels, const float *in, float *out) {
   double bass = phasor(&s->bass, 45 + 15 * (wrap(128 * p) > 0.666));
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
+  
+  bass = moog(&s->moog, bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
+  
   compressed[0] += bass;
   compressed[1] += bass;
 
diff @ 2016-08-07 21:25:03 +0100
diff --git a/src/go.c b/src/go.c
index 53746ca..938b37e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
+  bass = moog(&s->moog, 2 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:12 +0100
diff --git a/src/go.c b/src/go.c
index 938b37e..7a26b0e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 2 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:19 +0100
diff --git a/src/go.c b/src/go.c
index 7a26b0e..6b6aea9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.2);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.3);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:22 +0100
diff --git a/src/go.c b/src/go.c
index 6b6aea9..21a6133 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.3);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.4);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:27 +0100
diff --git a/src/go.c b/src/go.c
index 21a6133..da68476 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.4);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.6);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:33 +0100
diff --git a/src/go.c b/src/go.c
index da68476..39ed079 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(8, 1 - wrap(512 * p)), 0.6);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(16, 1 - wrap(512 * p)), 0.6);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:25:47 +0100
diff --git a/src/go.c b/src/go.c
index 39ed079..acdb21f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -49,7 +49,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 15.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 18.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -24.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:26:04 +0100
diff --git a/src/go.c b/src/go.c
index acdb21f..986bf8d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -75,7 +75,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += bass;
   compressed[1] += bass;
 
-  double kick = 1 - wrap(2.6666 * wrap(64 * p));
+  double kick = 1 - wrap(3 * wrap(64 * p));
   kick *= kick;
   kick *= kick;
   kick *= kick;
diff @ 2016-08-07 21:26:22 +0100
diff --git a/src/go.c b/src/go.c
index 986bf8d..aef01a7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -86,7 +86,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
-  double snare = 1 - wrap(64 * p + 0.5);
+  double snare = 1 - wrap(32 * 3 * p + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-07 21:26:35 +0100
diff --git a/src/go.c b/src/go.c
index aef01a7..886dfd7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -91,7 +91,6 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= snare;
   snare *= snare;
   snare *= snare;
-  snare *= snare;
   snare *= noise();
   snare *= 4;
   snare = tanh(snare);
diff @ 2016-08-07 21:26:54 +0100
diff --git a/src/go.c b/src/go.c
index 886dfd7..c1a63b6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(16, 1 - wrap(512 * p)), 0.6);
+  bass = moog(&s->moog, 3 * bass, 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.6);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:27:09 +0100
diff --git a/src/go.c b/src/go.c
index c1a63b6..b0a4dfc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -49,7 +49,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   // pitchshift feedback
   for (int c = 0; c < 2; ++c) {
-    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 18.1, feedback[c]);
+    double down = pitchshift(&s->shift[2 * c + 0], 2, 100, 12.1, feedback[c]);
     double up   = pitchshift(&s->shift[2 * c + 1], 2, 100, -24.1, down);
     feedback[c] = feedback[c] + down + up;
   }
diff @ 2016-08-07 21:28:10 +0100
diff --git a/src/go.c b/src/go.c
index b0a4dfc..73d4379 100644
--- a/src/go.c
+++ b/src/go.c
@@ -97,7 +97,14 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= 4;
   compressed[0] += snare;
   compressed[1] += snare;
-  
+
+  int t = (1 << 18) * p;
+  double bb = bytebeat(
+    t
+  );
+  compressed[0] += bb;
+  compressed[1] += bb;
+
 
   // compress mix down
   double mixdown[2] = { 0, 0 };
diff @ 2016-08-07 21:28:14 +0100
diff --git a/src/go.c b/src/go.c
index 73d4379..ad698a6 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,7 +98,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  int t = (1 << 18) * p;
+  int t = (1 << 20) * p;
   double bb = bytebeat(
     t
   );
diff @ 2016-08-07 21:28:19 +0100
diff --git a/src/go.c b/src/go.c
index ad698a6..02eb353 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,7 +98,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += snare;
   compressed[1] += snare;
 
-  int t = (1 << 20) * p;
+  int t = (1 << 21) * p;
   double bb = bytebeat(
     t
   );
diff @ 2016-08-07 21:28:42 +0100
diff --git a/src/go.c b/src/go.c
index 02eb353..c2c5ca7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    t
+    "4232"[(t >> 8) &3] * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:28:46 +0100
diff --git a/src/go.c b/src/go.c
index c2c5ca7..e6e9c04 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    "4232"[(t >> 8) &3] * t
+    "4232"[(t >> 12) & 3] * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:28:51 +0100
diff --git a/src/go.c b/src/go.c
index e6e9c04..22bba9d 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    "4232"[(t >> 12) & 3] * t
+    "4232"[(t >> 14) & 3] * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:28:56 +0100
diff --git a/src/go.c b/src/go.c
index 22bba9d..e6e9c04 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    "4232"[(t >> 14) & 3] * t
+    "4232"[(t >> 12) & 3] * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:04 +0100
diff --git a/src/go.c b/src/go.c
index e6e9c04..5c88a0e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    "4232"[(t >> 12) & 3] * t
+    "4231"[(t >> 12) & 3] * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:20 +0100
diff --git a/src/go.c b/src/go.c
index 5c88a0e..c7b5619 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    "4231"[(t >> 12) & 3] * t
+    ("4231"[(t >> 12) & 3]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:35 +0100
diff --git a/src/go.c b/src/go.c
index c7b5619..645c5d8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("4231"[(t >> 12) & 3]-'0') * t
+    ("42318756"[(t >> 12) & 3]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:38 +0100
diff --git a/src/go.c b/src/go.c
index 645c5d8..bdbbdbd 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("42318756"[(t >> 12) & 3]-'0') * t
+    ("42318756"[(t >> 12) & 8]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:39 +0100
diff --git a/src/go.c b/src/go.c
index bdbbdbd..d0e00b8 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("42318756"[(t >> 12) & 8]-'0') * t
+    ("42318756"[(t >> 12) & 7]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:48 +0100
diff --git a/src/go.c b/src/go.c
index d0e00b8..00b3ad7 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("42318756"[(t >> 12) & 7]-'0') * t
+    ("82318756"[(t >> 12) & 7]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:29:56 +0100
diff --git a/src/go.c b/src/go.c
index 00b3ad7..054e60f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("82318756"[(t >> 12) & 7]-'0') * t
+    ("82387586"[(t >> 12) & 7]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:30:08 +0100
diff --git a/src/go.c b/src/go.c
index 054e60f..82b9406 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("82387586"[(t >> 12) & 7]-'0') * t
+    ("82387586"[(t >> 12) & 7]-'0') * (t >> t)
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:30:13 +0100
diff --git a/src/go.c b/src/go.c
index 82b9406..054e60f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("82387586"[(t >> 12) & 7]-'0') * (t >> t)
+    ("82387586"[(t >> 12) & 7]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:30:47 +0100
diff --git a/src/go.c b/src/go.c
index 054e60f..4610b9f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -100,7 +100,8 @@ int go(S *s, int channels, const float *in, float *out) {
 
   int t = (1 << 21) * p;
   double bb = bytebeat(
-    ("82387586"[(t >> 12) & 7]-'0') * t
+    ("82387586"[(t >> 12) & 7]-'0') * t ^
+    ("421421"[(t >> 12) % 6]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:31:35 +0100
diff --git a/src/go.c b/src/go.c
index 4610b9f..7edaaf2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -101,7 +101,8 @@ int go(S *s, int channels, const float *in, float *out) {
   int t = (1 << 21) * p;
   double bb = bytebeat(
     ("82387586"[(t >> 12) & 7]-'0') * t ^
-    ("421421"[(t >> 12) % 6]-'0') * t
+    ("421632"[(t >> 12) % 6]-'0') * t ^
+    ("1234"[(t >> 14) % 4]-'0') * t
   );
   compressed[0] += bb;
   compressed[1] += bb;
diff @ 2016-08-07 21:31:55 +0100
diff --git a/src/go.c b/src/go.c
index 7edaaf2..1b0c8f0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -57,7 +57,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress feedback
   double compressed[2] = { 0, 0 };
   compress(compressed, &s->compress[0], 5, 10, 25, 48, feedback);
-  double gain = 2;
+  double gain = 0.00001;
   compressed[0] *= gain;
   compressed[1] *= gain;
 
diff @ 2016-08-07 21:32:04 +0100
diff --git a/src/go.c b/src/go.c
index 1b0c8f0..229f529 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.6);
+  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.6);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:32:13 +0100
diff --git a/src/go.c b/src/go.c
index 229f529..5be842e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.6);
+  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.0);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:32:19 +0100
diff --git a/src/go.c b/src/go.c
index 5be842e..e25cb26 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.0);
+  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:32:24 +0100
diff --git a/src/go.c b/src/go.c
index e25cb26..b97a4aa 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 4 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
+  bass = moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:32:33 +0100
diff --git a/src/go.c b/src/go.c
index b97a4aa..47cfca9 100644
--- a/src/go.c
+++ b/src/go.c
@@ -70,7 +70,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
-  bass = moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
+  bass = 2 * moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:33:02 +0100
diff --git a/src/go.c b/src/go.c
index 47cfca9..a5d2ce0 100644
--- a/src/go.c
+++ b/src/go.c
@@ -83,6 +83,7 @@ int go(S *s, int channels, const float *in, float *out) {
   kick *= 12;
   kick = sin(twopi * kick);
   kick *= 4;
+  kick *= 0;
   compressed[0] += kick;
   compressed[1] += kick;
 
@@ -95,6 +96,7 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= 4;
   snare = tanh(snare);
   snare *= 4;
+  snare *= 0;
   compressed[0] += snare;
   compressed[1] += snare;
 
diff @ 2016-08-07 21:33:17 +0100
diff --git a/src/go.c b/src/go.c
index a5d2ce0..b148467 100644
--- a/src/go.c
+++ b/src/go.c
@@ -66,7 +66,7 @@ int go(S *s, int channels, const float *in, float *out) {
     so2echo(&s->echo[c], 200, 4000, tanh(compressed[c] + impulse[c]));
   }
 
-  double bass = phasor(&s->bass, 45 + 15 * (wrap(128 * p) > 0.666));
+  double bass = phasor(&s->bass, 45 + 15 * (wrap(64 * p) > 0.666));
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > 0.5) - 0.5;
   
diff @ 2016-08-07 21:33:37 +0100
diff --git a/src/go.c b/src/go.c
index b148467..ab8c238 100644
--- a/src/go.c
+++ b/src/go.c
@@ -68,7 +68,7 @@ int go(S *s, int channels, const float *in, float *out) {
 
   double bass = phasor(&s->bass, 45 + 15 * (wrap(64 * p) > 0.666));
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
-  bass = (bass > 0.5) - 0.5;
+  bass = (bass > wrap(16 * p)) - 0.5;
   
   bass = 2 * moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
   
diff @ 2016-08-07 21:34:12 +0100
diff --git a/src/go.c b/src/go.c
index ab8c238..01cb91e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -28,6 +28,7 @@ typedef struct {
   SO2ECHO echo[2];
   PHASOR bass;
   MOOG moog;
+  double tempo;
 } S;
 
 // per sample DSP callback
@@ -36,11 +37,12 @@ int go(S *s, int channels, const float *in, float *out) {
   // trigger impulse on reload
   if (s->reloaded) {
     s->reloaded = 0;
+    s->tempo = 1;
   }
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
-  double p = phasor(&s->phase, 0.01);
+  double p = phasor(&s->phase, 0.01 * s->tempo);
   double modulation = 10 * cos(twopi * p);
   double feedback[2] =
     { delread4(&s->echo[1].del, 200 - modulation)
diff @ 2016-08-07 21:34:28 +0100
diff --git a/src/go.c b/src/go.c
index 01cb91e..af83ebc 100644
--- a/src/go.c
+++ b/src/go.c
@@ -98,7 +98,6 @@ int go(S *s, int channels, const float *in, float *out) {
   snare *= 4;
   snare = tanh(snare);
   snare *= 4;
-  snare *= 0;
   compressed[0] += snare;
   compressed[1] += snare;
 
diff @ 2016-08-07 21:34:36 +0100
diff --git a/src/go.c b/src/go.c
index af83ebc..e573372 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
-  double snare = 1 - wrap(32 * 3 * p + 0.5);
+  double snare = 1 - wrap(32 * 2 * p + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-07 21:34:52 +0100
diff --git a/src/go.c b/src/go.c
index e573372..157597b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -77,7 +77,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += bass;
   compressed[1] += bass;
 
-  double kick = 1 - wrap(3 * wrap(64 * p));
+  double kick = 1 - wrap(4 * wrap(64 * p));
   kick *= kick;
   kick *= kick;
   kick *= kick;
@@ -85,7 +85,6 @@ int go(S *s, int channels, const float *in, float *out) {
   kick *= 12;
   kick = sin(twopi * kick);
   kick *= 4;
-  kick *= 0;
   compressed[0] += kick;
   compressed[1] += kick;
 
diff @ 2016-08-07 21:35:06 +0100
diff --git a/src/go.c b/src/go.c
index 157597b..eff684f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,6 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     s->tempo = 1;
   }
+  s->tempo *= 0.9999999;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:35:24 +0100
diff --git a/src/go.c b/src/go.c
index eff684f..0421f92 100644
--- a/src/go.c
+++ b/src/go.c
@@ -37,9 +37,9 @@ int go(S *s, int channels, const float *in, float *out) {
   // trigger impulse on reload
   if (s->reloaded) {
     s->reloaded = 0;
-    s->tempo = 1;
+    //s->tempo = 1;
   }
-  s->tempo *= 0.9999999;
+  s->tempo *= 0.9999996;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:35:39 +0100
diff --git a/src/go.c b/src/go.c
index 0421f92..782ac42 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 0.9999996;
+  //s->tempo *= 0.9999996;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:35:53 +0100
diff --git a/src/go.c b/src/go.c
index 782ac42..8543ccb 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  //s->tempo *= 0.9999996;
+  s->tempo *= 0.999999;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:36:02 +0100
diff --git a/src/go.c b/src/go.c
index 8543ccb..6e4a90b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 0.999999;
+  //s->tempo *= 0.999999;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:36:11 +0100
diff --git a/src/go.c b/src/go.c
index 6e4a90b..446716f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  //s->tempo *= 0.999999;
+  s->tempo *= 1.000001;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:36:27 +0100
diff --git a/src/go.c b/src/go.c
index 446716f..5e60f39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -73,7 +73,7 @@ int go(S *s, int channels, const float *in, float *out) {
   bass = wrap(pow(4, fabs(sin(twopi * wrap(32 * p)))) * bass);
   bass = (bass > wrap(16 * p)) - 0.5;
   
-  bass = 2 * moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
+  bass = 0 * moog(&s->moog, 3 * bass, 2 * 180 * pow(16, 1 - wrap(256 * 3 * p)), 0.9);
   
   compressed[0] += bass;
   compressed[1] += bass;
diff @ 2016-08-07 21:36:35 +0100
diff --git a/src/go.c b/src/go.c
index 5e60f39..5e5a032 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
-  double snare = 1 - wrap(32 * 2 * p + 0.5);
+  double snare = 1 - wrap(32 * 4 * p + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-07 21:36:42 +0100
diff --git a/src/go.c b/src/go.c
index 5e5a032..2482fed 100644
--- a/src/go.c
+++ b/src/go.c
@@ -89,7 +89,7 @@ int go(S *s, int channels, const float *in, float *out) {
   compressed[0] += kick;
   compressed[1] += kick;
 
-  double snare = 1 - wrap(32 * 4 * p + 0.5);
+  double snare = 1 - wrap(32 * 8 * p + 0.5);
   snare *= snare;
   snare *= snare;
   snare *= snare;
diff @ 2016-08-07 21:36:46 +0100
diff --git a/src/go.c b/src/go.c
index 2482fed..dbc4e39 100644
--- a/src/go.c
+++ b/src/go.c
@@ -92,8 +92,6 @@ int go(S *s, int channels, const float *in, float *out) {
   double snare = 1 - wrap(32 * 8 * p + 0.5);
   snare *= snare;
   snare *= snare;
-  snare *= snare;
-  snare *= snare;
   snare *= noise();
   snare *= 4;
   snare = tanh(snare);
diff @ 2016-08-07 21:37:02 +0100
diff --git a/src/go.c b/src/go.c
index dbc4e39..ad2b197 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1.000001;
+  s->tempo *= 1.000002;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:37:07 +0100
diff --git a/src/go.c b/src/go.c
index ad2b197..5ae483f 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1.000002;
+  s->tempo *= 1.000003;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:37:10 +0100
diff --git a/src/go.c b/src/go.c
index 5ae483f..62aef1b 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1.000003;
+  s->tempo *= 1.00001;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:37:16 +0100
diff --git a/src/go.c b/src/go.c
index 62aef1b..8e4fdbf 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1.00001;
+  s->tempo *= 1.0001;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:37:22 +0100
diff --git a/src/go.c b/src/go.c
index 8e4fdbf..56bcb10 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1.0001;
+  s->tempo *= 1;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
diff @ 2016-08-07 21:37:27 +0100
diff --git a/src/go.c b/src/go.c
index 56bcb10..dff57b2 100644
--- a/src/go.c
+++ b/src/go.c
@@ -39,7 +39,7 @@ int go(S *s, int channels, const float *in, float *out) {
     s->reloaded = 0;
     //s->tempo = 1;
   }
-  s->tempo *= 1;
+  //s->tempo *= 1;
   double impulse[2] = { s->reloaded, s->reloaded };
 
   // modulate delay times
@@ -112,7 +112,7 @@ int go(S *s, int channels, const float *in, float *out) {
   // compress mix down
   double mixdown[2] = { 0, 0 };
   compress(mixdown, &s->compress[1], 5, 10, 25, 36, compressed);
-  double volume = 1;
+  double volume = 0;
   mixdown[0] *= volume;
   mixdown[1] *= volume;
 

the end