session-2019-02-15-214558

clive

a C audio live-coding skeleton

diff @ 2019-02-15 21:46:33 +0000
diff --git a/client/go.c b/client/go.c
index 7ee794d29..ab7841e33 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,8 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample kick  = bd(&s->bd, beat);
+    sample k = beat;
+    sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
     mixdown[0] += drum;
diff @ 2019-02-15 21:47:11 +0000
diff --git a/client/go.h b/client/go.h
index 080905ba5..b541d9c4c 100644
--- a/client/go.h
+++ b/client/go.h
@@ -52,5 +52,6 @@ typedef struct
   DELAY del59r; float del59rbuf[SR/4];
   // = append only data structure ======================================
 
+  BIQUAD bbq[16];
 } S;
 #endif
diff @ 2019-02-15 21:47:12 +0000
diff --git a/client/go.c b/client/go.c
index ab7841e33..db6f8ab76 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = beat;
+    sample k = biquad(highpass(&s->bbq[0], 4, flatq), beat);
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:47:19 +0000
diff --git a/client/go.c b/client/go.c
index db6f8ab76..710e12349 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = biquad(highpass(&s->bbq[0], 4, flatq), beat);
+    sample k = biquad(highpass(&s->bbq[0], 4, flatq), -beat);
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:47:27 +0000
diff --git a/client/go.c b/client/go.c
index 710e12349..86241baab 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = biquad(highpass(&s->bbq[0], 4, flatq), -beat);
+    sample k = biquad(highpass(&s->bbq[0], 4, flatq), -wrap(2 * beat));
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:47:42 +0000
diff --git a/client/go.c b/client/go.c
index 86241baab..c843eecdf 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 60 * SR * 16.0 / (5 << 16); // ~140
+  sample bpm = 130'
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 21:47:43 +0000
diff --git a/client/go.c b/client/go.c
index c843eecdf..ad8a59a61 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 130'
+  sample bpm = 130;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 21:48:03 +0000
diff --git a/client/go.c b/client/go.c
index ad8a59a61..d3a5f2ffc 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,6 +92,8 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 4, flatq), -wrap(2 * beat));
+    out[4] = beat;
+    out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:48:11 +0000
diff --git a/client/go.c b/client/go.c
index d3a5f2ffc..de5f0cb14 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = biquad(highpass(&s->bbq[0], 4, flatq), -wrap(2 * beat));
+    sample k = biquad(highpass(&s->bbq[0], 4, flatq), wrap(2 * beat));
     out[4] = beat;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
diff @ 2019-02-15 21:48:22 +0000
diff --git a/client/go.c b/client/go.c
index de5f0cb14..f305b5bc2 100644
--- a/client/go.c
+++ b/client/go.c
@@ -93,7 +93,7 @@ go(S *s, int channels, const float *in, float *out)
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 4, flatq), wrap(2 * beat));
     out[4] = beat;
-    out[5] = k;
+    out[5] = 2 * k - 1;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:48:28 +0000
diff --git a/client/go.c b/client/go.c
index f305b5bc2..59955621b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = biquad(highpass(&s->bbq[0], 4, flatq), wrap(2 * beat));
+    sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
     out[4] = beat;
     out[5] = 2 * k - 1;
     sample kick  = bd(&s->bd, k);
diff @ 2019-02-15 21:48:40 +0000
diff --git a/client/go.c b/client/go.c
index 59955621b..a76bba88f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    out[4] = beat;
+    out[4] = beat + 1;
     out[5] = 2 * k - 1;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
diff @ 2019-02-15 21:48:44 +0000
diff --git a/client/go.c b/client/go.c
index a76bba88f..59955621b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    out[4] = beat + 1;
+    out[4] = beat;
     out[5] = 2 * k - 1;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
diff @ 2019-02-15 21:48:52 +0000
diff --git a/client/go.c b/client/go.c
index 59955621b..00c9858dc 100644
--- a/client/go.c
+++ b/client/go.c
@@ -93,7 +93,7 @@ go(S *s, int channels, const float *in, float *out)
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
     out[4] = beat;
-    out[5] = 2 * k - 1;
+    out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
diff @ 2019-02-15 21:49:00 +0000
diff --git a/client/go.c b/client/go.c
index 00c9858dc..dedda1a93 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,6 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
+    k = k - floor(k);
     out[4] = beat;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
diff @ 2019-02-15 21:49:25 +0000
diff --git a/client/go.c b/client/go.c
index dedda1a93..223c04637 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,6 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
+    k = biquad(lowpass(&s->bbq[1], 16, flatq), k);
     k = k - floor(k);
     out[4] = beat;
     out[5] = k;
diff @ 2019-02-15 21:49:58 +0000
diff --git a/client/go.h b/client/go.h
index b541d9c4c..c751d2d57 100644
--- a/client/go.h
+++ b/client/go.h
@@ -53,5 +53,6 @@ typedef struct
   // = append only data structure ======================================
 
   BIQUAD bbq[16];
+  SAMPHOLD bsh[16];
 } S;
 #endif
diff @ 2019-02-15 21:49:59 +0000
diff --git a/client/go.c b/client/go.c
index 223c04637..3ab931a61 100644
--- a/client/go.c
+++ b/client/go.c
@@ -93,7 +93,7 @@ go(S *s, int channels, const float *in, float *out)
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
     k = biquad(lowpass(&s->bbq[1], 16, flatq), k);
-    k = k - floor(k);
+    k = samphold(&s->bsh[0], k, -k);
     out[4] = beat;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
diff @ 2019-02-15 21:50:07 +0000
diff --git a/client/go.c b/client/go.c
index 3ab931a61..96f01c0db 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    k = biquad(lowpass(&s->bbq[1], 16, flatq), k);
+    k = biquad(lowpass(&s->bbq[1], 16, 3), k);
     k = samphold(&s->bsh[0], k, -k);
     out[4] = beat;
     out[5] = k;
diff @ 2019-02-15 21:50:10 +0000
diff --git a/client/go.c b/client/go.c
index 96f01c0db..b709e036c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    k = biquad(lowpass(&s->bbq[1], 16, 3), k);
+    k = biquad(lowpass(&s->bbq[1], 4, 3), k);
     k = samphold(&s->bsh[0], k, -k);
     out[4] = beat;
     out[5] = k;
diff @ 2019-02-15 21:50:20 +0000
diff --git a/client/go.c b/client/go.c
index b709e036c..1dc7e9382 100644
--- a/client/go.c
+++ b/client/go.c
@@ -94,7 +94,7 @@ go(S *s, int channels, const float *in, float *out)
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
     k = biquad(lowpass(&s->bbq[1], 4, 3), k);
     k = samphold(&s->bsh[0], k, -k);
-    out[4] = beat;
+    out[4] = 2 * beat - 1;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, beat);
diff @ 2019-02-15 21:50:25 +0000
diff --git a/client/go.c b/client/go.c
index 1dc7e9382..d17f9273c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    k = biquad(lowpass(&s->bbq[1], 4, 3), k);
+    k = biquad(lowpass(&s->bbq[1], 4, 4), k);
     k = samphold(&s->bsh[0], k, -k);
     out[4] = 2 * beat - 1;
     out[5] = k;
diff @ 2019-02-15 21:50:31 +0000
diff --git a/client/go.c b/client/go.c
index d17f9273c..c10e825c5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -92,7 +92,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
     sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
-    k = biquad(lowpass(&s->bbq[1], 4, 4), k);
+    k = biquad(lowpass(&s->bbq[1], 8, 4), k);
     k = samphold(&s->bsh[0], k, -k);
     out[4] = 2 * beat - 1;
     out[5] = k;
diff @ 2019-02-15 21:50:54 +0000
diff --git a/client/go.c b/client/go.c
index c10e825c5..3ee158d2b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -97,7 +97,7 @@ go(S *s, int channels, const float *in, float *out)
     out[4] = 2 * beat - 1;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
-    sample snare = sn(&s->sn, beat);
+    sample snare = sn(&s->sn, wrap(2* bar));
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
diff @ 2019-02-15 21:51:00 +0000
diff --git a/client/go.c b/client/go.c
index 3ee158d2b..373d6ca04 100644
--- a/client/go.c
+++ b/client/go.c
@@ -97,7 +97,7 @@ go(S *s, int channels, const float *in, float *out)
     out[4] = 2 * beat - 1;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
-    sample snare = sn(&s->sn, wrap(2* bar));
+    sample snare = sn(&s->sn, wrap(2* bar -0.5));
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
diff @ 2019-02-15 21:51:06 +0000
diff --git a/client/go.c b/client/go.c
index 373d6ca04..0a4294dfd 100644
--- a/client/go.c
+++ b/client/go.c
@@ -97,7 +97,7 @@ go(S *s, int channels, const float *in, float *out)
     out[4] = 2 * beat - 1;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
-    sample snare = sn(&s->sn, wrap(2* bar -0.5));
+    sample snare = sn(&s->sn, wrap(2* bar -0.5) * 4);
     sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
diff @ 2019-02-15 21:51:13 +0000
diff --git a/client/go.c b/client/go.c
index 0a4294dfd..b1365b47c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample snare = sn(&s->sn, wrap(2* bar -0.5) * 4);
-    sample drum = wrap(2 * bar) < 0.5 ? kick : snare;
+    sample drum = kick + snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
   }
diff @ 2019-02-15 21:51:31 +0000
diff --git a/client/go.c b/client/go.c
index b1365b47c..b186dd722 100644
--- a/client/go.c
+++ b/client/go.c
@@ -91,7 +91,7 @@ go(S *s, int channels, const float *in, float *out)
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
     sample beat = wrap(4 * bar);
-    sample k = biquad(highpass(&s->bbq[0], 8, flatq), wrap(2 * beat));
+    sample k = biquad(highpass(&s->bbq[0], 16, flatq), wrap(2 * beat));
     k = biquad(lowpass(&s->bbq[1], 8, 4), k);
     k = samphold(&s->bsh[0], k, -k);
     out[4] = 2 * beat - 1;
diff @ 2019-02-15 21:51:37 +0000
diff --git a/client/go.c b/client/go.c
index b186dd722..6fe5c1cc9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 130;
+  sample bpm = 120;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 21:52:07 +0000
diff --git a/client/go.c b/client/go.c
index 6fe5c1cc9..565d47ff7 100644
--- a/client/go.c
+++ b/client/go.c
@@ -97,7 +97,9 @@ go(S *s, int channels, const float *in, float *out)
     out[4] = 2 * beat - 1;
     out[5] = k;
     sample kick  = bd(&s->bd, k);
-    sample snare = sn(&s->sn, wrap(2* bar -0.5) * 4);
+    sample n = wrap(2* bar -0.5) * 4;
+    n = biquad(highpass(&s->nbq[2], 32, flatq), n);
+    sample snare = sn(&s->sn, n);
     sample drum = kick + snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
diff @ 2019-02-15 21:52:14 +0000
diff --git a/client/go.c b/client/go.c
index 565d47ff7..8d0efa8fb 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
-    n = biquad(highpass(&s->nbq[2], 32, flatq), n);
+    n = biquad(highpass(&s->bbq[2], 32, flatq), n);
     sample snare = sn(&s->sn, n);
     sample drum = kick + snare;
     mixdown[0] += drum;
diff @ 2019-02-15 21:52:29 +0000
diff --git a/client/go.c b/client/go.c
index 8d0efa8fb..ebcb049e8 100644
--- a/client/go.c
+++ b/client/go.c
@@ -99,6 +99,8 @@ go(S *s, int channels, const float *in, float *out)
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
     n = biquad(highpass(&s->bbq[2], 32, flatq), n);
+    out[6] = out[4];
+    out[7] = n;
     sample snare = sn(&s->sn, n);
     sample drum = kick + snare;
     mixdown[0] += drum;
diff @ 2019-02-15 21:52:39 +0000
diff --git a/client/go.c b/client/go.c
index ebcb049e8..95e68a4a6 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
-    n = biquad(highpass(&s->bbq[2], 32, flatq), n);
+    n = biquad(highpass(&s->bbq[2], 32, 10), n);
     out[6] = out[4];
     out[7] = n;
     sample snare = sn(&s->sn, n);
diff @ 2019-02-15 21:52:44 +0000
diff --git a/client/go.c b/client/go.c
index 95e68a4a6..e0a836dd9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
-    n = biquad(highpass(&s->bbq[2], 32, 10), n);
+    n = biquad(highpass(&s->bbq[2], 32, 12), n);
     out[6] = out[4];
     out[7] = n;
     sample snare = sn(&s->sn, n);
diff @ 2019-02-15 21:52:50 +0000
diff --git a/client/go.c b/client/go.c
index e0a836dd9..b0436db81 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
-    n = biquad(highpass(&s->bbq[2], 32, 12), n);
+    n = biquad(highpass(&s->bbq[2], 36, 12), n);
     out[6] = out[4];
     out[7] = n;
     sample snare = sn(&s->sn, n);
diff @ 2019-02-15 21:52:58 +0000
diff --git a/client/go.c b/client/go.c
index b0436db81..07ac8b9dc 100644
--- a/client/go.c
+++ b/client/go.c
@@ -98,7 +98,7 @@ go(S *s, int channels, const float *in, float *out)
     out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
-    n = biquad(highpass(&s->bbq[2], 36, 12), n);
+    n = biquad(highpass(&s->bbq[2], 64, 12), n);
     out[6] = out[4];
     out[7] = n;
     sample snare = sn(&s->sn, n);
diff @ 2019-02-15 21:53:26 +0000
diff --git a/client/go.c b/client/go.c
index 07ac8b9dc..e147bb4df 100644
--- a/client/go.c
+++ b/client/go.c
@@ -87,6 +87,7 @@ go(S *s, int channels, const float *in, float *out)
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
+  sample snare;
   {
     sample bar4 = phasor(&s->bdsn, bpm / 60 / 16);
     sample bar = wrap(4 * bar4);
@@ -101,7 +102,7 @@ go(S *s, int channels, const float *in, float *out)
     n = biquad(highpass(&s->bbq[2], 64, 12), n);
     out[6] = out[4];
     out[7] = n;
-    sample snare = sn(&s->sn, n);
+    snare = sn(&s->sn, n);
     sample drum = kick + snare;
     mixdown[0] += drum;
     mixdown[1] += drum;
@@ -153,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
       so2echo(&s->so2.echo[c], 20, 500,
-        tanh(so2[c] + RESET*impulse[c]));
+        tanh(so2[c] + snare));
     }
     mixdown[0] += so2[0];
     mixdown[1] += so2[1];
diff @ 2019-02-15 21:53:29 +0000
diff --git a/client/go.c b/client/go.c
index e147bb4df..e18bbc08b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -153,7 +153,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 20, 500,
+      so2echo(&s->so2.echo[c], 120, 500,
         tanh(so2[c] + snare));
     }
     mixdown[0] += so2[0];
diff @ 2019-02-15 21:53:31 +0000
diff --git a/client/go.c b/client/go.c
index e18bbc08b..bfd732184 100644
--- a/client/go.c
+++ b/client/go.c
@@ -153,7 +153,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 120, 500,
+      so2echo(&s->so2.echo[c], 120, 1500,
         tanh(so2[c] + snare));
     }
     mixdown[0] += so2[0];
diff @ 2019-02-15 21:53:38 +0000
diff --git a/client/go.c b/client/go.c
index bfd732184..dc55af31c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -153,7 +153,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 120, 1500,
+      so2echo(&s->so2.echo[c], 120, 2500,
         tanh(so2[c] + snare));
     }
     mixdown[0] += so2[0];
diff @ 2019-02-15 21:53:56 +0000
diff --git a/client/go.c b/client/go.c
index dc55af31c..bd0dd8cec 100644
--- a/client/go.c
+++ b/client/go.c
@@ -100,6 +100,7 @@ go(S *s, int channels, const float *in, float *out)
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
     n = biquad(highpass(&s->bbq[2], 64, 12), n);
+    n = wrap(n);
     out[6] = out[4];
     out[7] = n;
     snare = sn(&s->sn, n);
diff @ 2019-02-15 21:54:05 +0000
diff --git a/client/go.c b/client/go.c
index bd0dd8cec..4757ead54 100644
--- a/client/go.c
+++ b/client/go.c
@@ -100,7 +100,7 @@ go(S *s, int channels, const float *in, float *out)
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
     n = biquad(highpass(&s->bbq[2], 64, 12), n);
-    n = wrap(n);
+    n = wrap(n + 0.5);
     out[6] = out[4];
     out[7] = n;
     snare = sn(&s->sn, n);
diff @ 2019-02-15 21:54:41 +0000
diff --git a/client/go.c b/client/go.c
index 4757ead54..0a763eda1 100644
--- a/client/go.c
+++ b/client/go.c
@@ -144,8 +144,8 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
-    feedback[0] = output[0];
-    feedback[1] = output[1];
+    feedback[0] = sin(output[0]);
+    feedback[1] = sin(output[1]);
 
     // compress feedback
     compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
@@ -155,10 +155,10 @@ go(S *s, int channels, const float *in, float *out)
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
       so2echo(&s->so2.echo[c], 120, 2500,
-        tanh(so2[c] + snare));
+        tanh(so2[c]));
     }
-    mixdown[0] += so2[0];
-    mixdown[1] += so2[1];
+    mixdown[0] = so2[0];
+    mixdown[1] = so2[1];
   }
 
   // = 3 = pegasus =====================================================
diff @ 2019-02-15 21:54:54 +0000
diff --git a/client/go.c b/client/go.c
index 0a763eda1..d8f7fb3af 100644
--- a/client/go.c
+++ b/client/go.c
@@ -115,7 +115,7 @@ go(S *s, int channels, const float *in, float *out)
     // trigger impulse on reload
     sample impulse[2] = { s->reloaded, s->reloaded };
     // modulate delay times
-    sample p = phasor(&s->so2.phase, 0.01);
+    sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 10 * cos(twopi * p);
     sample feedback[2] =
       { delread4(&s->so2.echo[1].del, 200 - modulation)
diff @ 2019-02-15 21:54:57 +0000
diff --git a/client/go.c b/client/go.c
index d8f7fb3af..a86670b3f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -116,7 +116,7 @@ go(S *s, int channels, const float *in, float *out)
     sample impulse[2] = { s->reloaded, s->reloaded };
     // modulate delay times
     sample p = phasor(&s->so2.phase, bpm/60);
-    sample modulation = 10 * cos(twopi * p);
+    sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
       { delread4(&s->so2.echo[1].del, 200 - modulation)
       , delread4(&s->so2.echo[0].del, 200 + modulation)
diff @ 2019-02-15 21:55:13 +0000
diff --git a/client/go.c b/client/go.c
index a86670b3f..6ccdab0ea 100644
--- a/client/go.c
+++ b/client/go.c
@@ -118,8 +118,8 @@ go(S *s, int channels, const float *in, float *out)
     sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
-      { delread4(&s->so2.echo[1].del, 200 - modulation)
-      , delread4(&s->so2.echo[0].del, 200 + modulation)
+      { delread4(&s->so2.echo[1].del, 1000 / (bpm/60) - modulation)
+      , delread4(&s->so2.echo[0].del, 1000 / (bpm/60) + modulation)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
diff @ 2019-02-15 21:55:23 +0000
diff --git a/client/go.c b/client/go.c
index 6ccdab0ea..fb8f45278 100644
--- a/client/go.c
+++ b/client/go.c
@@ -123,9 +123,9 @@ go(S *s, int channels, const float *in, float *out)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
-      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 100,
+      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 50,
         lop(&s->so2.lag[0], -12, 1e-3), feedback[c]);
-      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 100,
+      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 50,
         lop(&s->so2.lag[1],  19, 1e-3), down);
       feedback[c] = feedback[c] - down - up;
     }
diff @ 2019-02-15 21:55:32 +0000
diff --git a/client/go.c b/client/go.c
index fb8f45278..a72183859 100644
--- a/client/go.c
+++ b/client/go.c
@@ -124,9 +124,9 @@ go(S *s, int channels, const float *in, float *out)
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
       sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 50,
-        lop(&s->so2.lag[0], -12, 1e-3), feedback[c]);
+        lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
       sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 50,
-        lop(&s->so2.lag[1],  19, 1e-3), down);
+        lop(&s->so2.lag[1],  0.2, 1e-3), down);
       feedback[c] = feedback[c] - down - up;
     }
 
diff @ 2019-02-15 21:55:39 +0000
diff --git a/client/go.c b/client/go.c
index a72183859..2fcd32cd1 100644
--- a/client/go.c
+++ b/client/go.c
@@ -118,8 +118,8 @@ go(S *s, int channels, const float *in, float *out)
     sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
-      { delread4(&s->so2.echo[1].del, 1000 / (bpm/60) - modulation)
-      , delread4(&s->so2.echo[0].del, 1000 / (bpm/60) + modulation)
+      { delread4(&s->so2.echo[1].del, 0.25 * 1000 / (bpm/60) - modulation)
+      , delread4(&s->so2.echo[0].del, 0.25 * 1000 / (bpm/60) + modulation)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
diff @ 2019-02-15 21:55:48 +0000
diff --git a/client/go.c b/client/go.c
index 2fcd32cd1..169df70ef 100644
--- a/client/go.c
+++ b/client/go.c
@@ -118,8 +118,8 @@ go(S *s, int channels, const float *in, float *out)
     sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
-      { delread4(&s->so2.echo[1].del, 0.25 * 1000 / (bpm/60) - modulation)
-      , delread4(&s->so2.echo[0].del, 0.25 * 1000 / (bpm/60) + modulation)
+      { delread4(&s->so2.echo[1].del, 0.25/4 * 1000 / (bpm/60) - modulation)
+      , delread4(&s->so2.echo[0].del, 0.25/4 * 1000 / (bpm/60) + modulation)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
diff @ 2019-02-15 21:55:59 +0000
diff --git a/client/go.c b/client/go.c
index 169df70ef..21e304a38 100644
--- a/client/go.c
+++ b/client/go.c
@@ -123,9 +123,9 @@ go(S *s, int channels, const float *in, float *out)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
-      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 50,
+      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 25,
         lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
-      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 50,
+      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 25,
         lop(&s->so2.lag[1],  0.2, 1e-3), down);
       feedback[c] = feedback[c] - down - up;
     }
diff @ 2019-02-15 21:56:08 +0000
diff --git a/client/go.c b/client/go.c
index 21e304a38..23d53048b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -154,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 120, 2500,
+      so2echo(&s->so2.echo[c], 10, 2500,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:56:14 +0000
diff --git a/client/go.c b/client/go.c
index 23d53048b..f938b1213 100644
--- a/client/go.c
+++ b/client/go.c
@@ -154,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 10, 2500,
+      so2echo(&s->so2.echo[c], 10, 8500,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:56:33 +0000
diff --git a/client/go.c b/client/go.c
index f938b1213..bf8f78638 100644
--- a/client/go.c
+++ b/client/go.c
@@ -127,7 +127,7 @@ go(S *s, int channels, const float *in, float *out)
         lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
       sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 25,
         lop(&s->so2.lag[1],  0.2, 1e-3), down);
-      feedback[c] = feedback[c] - down - up;
+      feedback[c] = sin(2 * feedback[c] - down - up);
     }
 
     // multiband compressor
diff @ 2019-02-15 21:56:41 +0000
diff --git a/client/go.c b/client/go.c
index bf8f78638..1556a67c4 100644
--- a/client/go.c
+++ b/client/go.c
@@ -118,8 +118,8 @@ go(S *s, int channels, const float *in, float *out)
     sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
-      { delread4(&s->so2.echo[1].del, 0.25/4 * 1000 / (bpm/60) - modulation)
-      , delread4(&s->so2.echo[0].del, 0.25/4 * 1000 / (bpm/60) + modulation)
+      { delread4(&s->so2.echo[1].del, 0.25/16 * 1000 / (bpm/60) - modulation)
+      , delread4(&s->so2.echo[0].del, 0.25/16 * 1000 / (bpm/60) + modulation)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
diff @ 2019-02-15 21:56:47 +0000
diff --git a/client/go.c b/client/go.c
index 1556a67c4..dff6fc3a4 100644
--- a/client/go.c
+++ b/client/go.c
@@ -118,8 +118,8 @@ go(S *s, int channels, const float *in, float *out)
     sample p = phasor(&s->so2.phase, bpm/60);
     sample modulation = 1 * cos(twopi * p);
     sample feedback[2] =
-      { delread4(&s->so2.echo[1].del, 0.25/16 * 1000 / (bpm/60) - modulation)
-      , delread4(&s->so2.echo[0].del, 0.25/16 * 1000 / (bpm/60) + modulation)
+      { delread4(&s->so2.echo[1].del, 0.25/64 * 1000 / (bpm/60) - modulation)
+      , delread4(&s->so2.echo[0].del, 0.25/64 * 1000 / (bpm/60) + modulation)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
diff @ 2019-02-15 21:56:56 +0000
diff --git a/client/go.c b/client/go.c
index dff6fc3a4..8b5eaad62 100644
--- a/client/go.c
+++ b/client/go.c
@@ -123,9 +123,9 @@ go(S *s, int channels, const float *in, float *out)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
-      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 25,
+      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 50,
         lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
-      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 25,
+      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 50,
         lop(&s->so2.lag[1],  0.2, 1e-3), down);
       feedback[c] = sin(2 * feedback[c] - down - up);
     }
diff @ 2019-02-15 21:57:01 +0000
diff --git a/client/go.c b/client/go.c
index 8b5eaad62..f127db7ee 100644
--- a/client/go.c
+++ b/client/go.c
@@ -123,9 +123,9 @@ go(S *s, int channels, const float *in, float *out)
       };
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
-      sample down = pitchshift(&s->so2.shift[2 * c + 0], 2, 50,
+      sample down = pitchshift(&s->so2.shift[2 * c + 0], 1, 50,
         lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
-      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 2, 50,
+      sample up   = pitchshift(&s->so2.shift[2 * c + 1], 1, 50,
         lop(&s->so2.lag[1],  0.2, 1e-3), down);
       feedback[c] = sin(2 * feedback[c] - down - up);
     }
diff @ 2019-02-15 21:57:07 +0000
diff --git a/client/go.c b/client/go.c
index f127db7ee..1f414664a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -124,9 +124,9 @@ go(S *s, int channels, const float *in, float *out)
     // pitchshift feedback
     for (int c = 0; c < 2; ++c) {
       sample down = pitchshift(&s->so2.shift[2 * c + 0], 1, 50,
-        lop(&s->so2.lag[0], -0.1, 1e-3), feedback[c]);
+        lop(&s->so2.lag[0], -0.01, 1e-3), feedback[c]);
       sample up   = pitchshift(&s->so2.shift[2 * c + 1], 1, 50,
-        lop(&s->so2.lag[1],  0.2, 1e-3), down);
+        lop(&s->so2.lag[1],  0.02, 1e-3), down);
       feedback[c] = sin(2 * feedback[c] - down - up);
     }
 
diff @ 2019-02-15 21:57:17 +0000
diff --git a/client/go.c b/client/go.c
index 1f414664a..361df654a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -154,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 10, 8500,
+      so2echo(&s->so2.echo[c], 10, 10,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:57:25 +0000
diff --git a/client/go.c b/client/go.c
index 361df654a..59f4f937c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -154,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 10, 10,
+      so2echo(&s->so2.echo[c], 20, 20,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:57:50 +0000
diff --git a/client/go.c b/client/go.c
index 59f4f937c..35506ea98 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 120;
+  sample bpm = 144;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
@@ -154,7 +154,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 20, 20,
+      so2echo(&s->so2.echo[c], 2000, 20,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
@@ -163,11 +163,10 @@ go(S *s, int channels, const float *in, float *out)
 
   // = 3 = pegasus =====================================================
   {
-    int active = 0;
+    int active = 1;
     if (! active)
       s->prhythm.phase = 0;
     // rhythms
-    sample bpm = 144;
     sample r = phasor(&s->prhythm, bpm/60/512);
     sample hz = 60;
     sample p = (1 - samphold(&s->psh[0], 1, r)) * wrap(512/4 * r);
diff @ 2019-02-15 21:58:16 +0000
diff --git a/client/go.c b/client/go.c
index 35506ea98..d5120f1d2 100644
--- a/client/go.c
+++ b/client/go.c
@@ -95,14 +95,10 @@ go(S *s, int channels, const float *in, float *out)
     sample k = biquad(highpass(&s->bbq[0], 16, flatq), wrap(2 * beat));
     k = biquad(lowpass(&s->bbq[1], 8, 4), k);
     k = samphold(&s->bsh[0], k, -k);
-    out[4] = 2 * beat - 1;
-    out[5] = k;
     sample kick  = bd(&s->bd, k);
     sample n = wrap(2* bar -0.5) * 4;
     n = biquad(highpass(&s->bbq[2], 64, 12), n);
     n = wrap(n + 0.5);
-    out[6] = out[4];
-    out[7] = n;
     snare = sn(&s->sn, n);
     sample drum = kick + snare;
     mixdown[0] += drum;
diff @ 2019-02-15 21:58:32 +0000
diff --git a/client/go.c b/client/go.c
index d5120f1d2..4cfc08321 100644
--- a/client/go.c
+++ b/client/go.c
@@ -186,10 +186,10 @@ go(S *s, int channels, const float *in, float *out)
 
     // tones
     sample osc = active * sin(twopi * phasor(&s->posc[0], hz));
-    sample o = sin(24 * env * osc - delread1(&s->pdel1, 1000 / (bpm/60)/32));
+    sample o = sin(36 * env * osc - delread1(&s->pdel1, 1000 / (bpm/60)/32));
     o += biquad(lowpass(&s->pbq[6], 1000 * pow(16, env), flatq), o);
     o += biquad(highpass(&s->pbq[7], 50, flatq), o);
-    sample o2 = sin(24 * env2 * osc - delread1(&s->pdel2, 1000 / (bpm/60)/32));
+    sample o2 = sin(36 * env2 * osc - delread1(&s->pdel2, 1000 / (bpm/60)/32));
     o2 += biquad(lowpass(&s->pbq[8], 1000 * pow(16, env2), flatq), o2);
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
diff @ 2019-02-15 21:58:43 +0000
diff --git a/client/go.c b/client/go.c
index 4cfc08321..462676604 100644
--- a/client/go.c
+++ b/client/go.c
@@ -186,10 +186,10 @@ go(S *s, int channels, const float *in, float *out)
 
     // tones
     sample osc = active * sin(twopi * phasor(&s->posc[0], hz));
-    sample o = sin(36 * env * osc - delread1(&s->pdel1, 1000 / (bpm/60)/32));
+    sample o = sin(36 * pow(env, 2) * osc - delread1(&s->pdel1, 1000 / (bpm/60)/32));
     o += biquad(lowpass(&s->pbq[6], 1000 * pow(16, env), flatq), o);
     o += biquad(highpass(&s->pbq[7], 50, flatq), o);
-    sample o2 = sin(36 * env2 * osc - delread1(&s->pdel2, 1000 / (bpm/60)/32));
+    sample o2 = sin(36 * pow(env2, 2) * osc - delread1(&s->pdel2, 1000 / (bpm/60)/32));
     o2 += biquad(lowpass(&s->pbq[8], 1000 * pow(16, env2), flatq), o2);
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
diff @ 2019-02-15 21:58:52 +0000
diff --git a/client/go.c b/client/go.c
index 462676604..89963b6a5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 2000, 20,
+      so2echo(&s->so2.echo[c], 12000, 20,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:58:58 +0000
diff --git a/client/go.c b/client/go.c
index 89963b6a5..85dc403e7 100644
--- a/client/go.c
+++ b/client/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 12000, 20,
+      so2echo(&s->so2.echo[c], 12000, 100,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:59:02 +0000
diff --git a/client/go.c b/client/go.c
index 85dc403e7..718e6604b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -150,7 +150,7 @@ go(S *s, int channels, const float *in, float *out)
     so2[1] *= gain;
     // write to delay lines
     for (int c = 0; c < 2; ++c) {
-      so2echo(&s->so2.echo[c], 12000, 100,
+      so2echo(&s->so2.echo[c], 18000, 100,
         tanh(so2[c]));
     }
     mixdown[0] = so2[0];
diff @ 2019-02-15 21:59:09 +0000
diff --git a/client/go.c b/client/go.c
index 718e6604b..b5fafc0d4 100644
--- a/client/go.c
+++ b/client/go.c
@@ -153,8 +153,8 @@ go(S *s, int channels, const float *in, float *out)
       so2echo(&s->so2.echo[c], 18000, 100,
         tanh(so2[c]));
     }
-    mixdown[0] = so2[0];
-    mixdown[1] = so2[1];
+    mixdown[0] = so2[0] * 0;
+    mixdown[1] = so2[1] *0;
   }
 
   // = 3 = pegasus =====================================================
diff @ 2019-02-15 21:59:17 +0000
diff --git a/client/go.c b/client/go.c
index b5fafc0d4..22801b6bf 100644
--- a/client/go.c
+++ b/client/go.c
@@ -212,7 +212,7 @@ go(S *s, int channels, const float *in, float *out)
     cym2 *= cymenv;
 
     // kick
-    sample kick = 1 - wrap(4 * p);
+    sample kick = 1 - wrap(8 * p);
     kick *= kick;
     kick *= kick;
     kick *= kick;
diff @ 2019-02-15 21:59:22 +0000
diff --git a/client/go.c b/client/go.c
index 22801b6bf..5c815a64a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -212,7 +212,7 @@ go(S *s, int channels, const float *in, float *out)
     cym2 *= cymenv;
 
     // kick
-    sample kick = 1 - wrap(8 * p);
+    sample kick = 1 - wrap(16 * p);
     kick *= kick;
     kick *= kick;
     kick *= kick;
diff @ 2019-02-15 21:59:25 +0000
diff --git a/client/go.c b/client/go.c
index 5c815a64a..1e759eb7a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -215,7 +215,6 @@ go(S *s, int channels, const float *in, float *out)
     sample kick = 1 - wrap(16 * p);
     kick *= kick;
     kick *= kick;
-    kick *= kick;
     kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 40, 10),
       tanh(sin(twopi * 20 * active * kick) * (1 + kick))));
     sample output[2] =
diff @ 2019-02-15 21:59:32 +0000
diff --git a/client/go.c b/client/go.c
index 1e759eb7a..af0afaffe 100644
--- a/client/go.c
+++ b/client/go.c
@@ -215,7 +215,7 @@ go(S *s, int channels, const float *in, float *out)
     sample kick = 1 - wrap(16 * p);
     kick *= kick;
     kick *= kick;
-    kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 40, 10),
+    kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 10),
       tanh(sin(twopi * 20 * active * kick) * (1 + kick))));
     sample output[2] =
       { o + 0.1 * o2 + cym + kick
diff @ 2019-02-15 21:59:36 +0000
diff --git a/client/go.c b/client/go.c
index af0afaffe..8f126a7a2 100644
--- a/client/go.c
+++ b/client/go.c
@@ -215,7 +215,7 @@ go(S *s, int channels, const float *in, float *out)
     sample kick = 1 - wrap(16 * p);
     kick *= kick;
     kick *= kick;
-    kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 10),
+    kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 20),
       tanh(sin(twopi * 20 * active * kick) * (1 + kick))));
     sample output[2] =
       { o + 0.1 * o2 + cym + kick
diff @ 2019-02-15 21:59:44 +0000
diff --git a/client/go.c b/client/go.c
index 8f126a7a2..4a295b72e 100644
--- a/client/go.c
+++ b/client/go.c
@@ -215,6 +215,7 @@ go(S *s, int channels, const float *in, float *out)
     sample kick = 1 - wrap(16 * p);
     kick *= kick;
     kick *= kick;
+    kick *= kick;
     kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 20),
       tanh(sin(twopi * 20 * active * kick) * (1 + kick))));
     sample output[2] =
diff @ 2019-02-15 21:59:52 +0000
diff --git a/client/go.c b/client/go.c
index 4a295b72e..9a51713b9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -217,7 +217,7 @@ go(S *s, int channels, const float *in, float *out)
     kick *= kick;
     kick *= kick;
     kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 20),
-      tanh(sin(twopi * 20 * active * kick) * (1 + kick))));
+      tanh(sin(twopi * 30 * active * kick) * (1 + kick))));
     sample output[2] =
       { o + 0.1 * o2 + cym + kick
       , o2 - 0.1 * o + cym2 + kick
diff @ 2019-02-15 22:00:04 +0000
diff --git a/client/go.c b/client/go.c
index 9a51713b9..a38600b1b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -196,11 +196,11 @@ go(S *s, int channels, const float *in, float *out)
     // cymbal
     sample cym = phasor(&s->pcym[0], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 8000, flatq),
-        noise() + 36 * cos(twopi * s->pcym[1].phase))/mtof(0)));
+        noise() + 24 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
     sample cym2 = phasor(&s->pcym[1], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 8000, flatq),
-        noise() + 36 * cos(twopi * s->pcym[0].phase))/mtof(0)));
+        noise() + 24 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
     sample cymenv = 1 - wrap(2 * pow(wrap(8 * p), 1./0.85));
     cymenv *= cymenv;
diff @ 2019-02-15 22:00:11 +0000
diff --git a/client/go.c b/client/go.c
index a38600b1b..fa4eb977d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -196,11 +196,11 @@ go(S *s, int channels, const float *in, float *out)
     // cymbal
     sample cym = phasor(&s->pcym[0], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 8000, flatq),
-        noise() + 24 * cos(twopi * s->pcym[1].phase))/mtof(0)));
+        noise() + 12 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
     sample cym2 = phasor(&s->pcym[1], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 8000, flatq),
-        noise() + 24 * cos(twopi * s->pcym[0].phase))/mtof(0)));
+        noise() + 12 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
     sample cymenv = 1 - wrap(2 * pow(wrap(8 * p), 1./0.85));
     cymenv *= cymenv;
diff @ 2019-02-15 22:00:19 +0000
diff --git a/client/go.c b/client/go.c
index fa4eb977d..95f21ee73 100644
--- a/client/go.c
+++ b/client/go.c
@@ -196,11 +196,11 @@ go(S *s, int channels, const float *in, float *out)
     // cymbal
     sample cym = phasor(&s->pcym[0], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 8000, flatq),
-        noise() + 12 * cos(twopi * s->pcym[1].phase))/mtof(0)));
+        noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
     sample cym2 = phasor(&s->pcym[1], 60 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 8000, flatq),
-        noise() + 12 * cos(twopi * s->pcym[0].phase))/mtof(0)));
+        noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
     sample cymenv = 1 - wrap(2 * pow(wrap(8 * p), 1./0.85));
     cymenv *= cymenv;
diff @ 2019-02-15 22:00:26 +0000
diff --git a/client/go.c b/client/go.c
index 95f21ee73..f2fc9eace 100644
--- a/client/go.c
+++ b/client/go.c
@@ -195,11 +195,11 @@ go(S *s, int channels, const float *in, float *out)
 
     // cymbal
     sample cym = phasor(&s->pcym[0], 60 * pow(2, 8) *
-      mtof(biquad(highpass(&s->pbq[10], 8000, flatq),
+      mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
     sample cym2 = phasor(&s->pcym[1], 60 * pow(2, 8) *
-      mtof(biquad(highpass(&s->pbq[11], 8000, flatq),
+      mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
     sample cymenv = 1 - wrap(2 * pow(wrap(8 * p), 1./0.85));
diff @ 2019-02-15 22:00:34 +0000
diff --git a/client/go.c b/client/go.c
index f2fc9eace..15e828511 100644
--- a/client/go.c
+++ b/client/go.c
@@ -194,11 +194,11 @@ go(S *s, int channels, const float *in, float *out)
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
     // cymbal
-    sample cym = phasor(&s->pcym[0], 60 * pow(2, 8) *
+    sample cym = phasor(&s->pcym[0], 40 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
-    sample cym2 = phasor(&s->pcym[1], 60 * pow(2, 8) *
+    sample cym2 = phasor(&s->pcym[1],40 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
diff @ 2019-02-15 22:00:38 +0000
diff --git a/client/go.c b/client/go.c
index 15e828511..b032eeeed 100644
--- a/client/go.c
+++ b/client/go.c
@@ -194,11 +194,11 @@ go(S *s, int channels, const float *in, float *out)
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
     // cymbal
-    sample cym = phasor(&s->pcym[0], 40 * pow(2, 8) *
+    sample cym = phasor(&s->pcym[0], 20 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
-    sample cym2 = phasor(&s->pcym[1],40 * pow(2, 8) *
+    sample cym2 = phasor(&s->pcym[1],20 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
diff @ 2019-02-15 22:00:43 +0000
diff --git a/client/go.c b/client/go.c
index b032eeeed..d9d5f209c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -194,11 +194,11 @@ go(S *s, int channels, const float *in, float *out)
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
     // cymbal
-    sample cym = phasor(&s->pcym[0], 20 * pow(2, 8) *
+    sample cym = phasor(&s->pcym[0], 10 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
-    sample cym2 = phasor(&s->pcym[1],20 * pow(2, 8) *
+    sample cym2 = phasor(&s->pcym[1],10 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
diff @ 2019-02-15 22:00:46 +0000
diff --git a/client/go.c b/client/go.c
index d9d5f209c..932fb20ba 100644
--- a/client/go.c
+++ b/client/go.c
@@ -194,11 +194,11 @@ go(S *s, int channels, const float *in, float *out)
     o2 += biquad(highpass(&s->pbq[9], 50, flatq), o2);
 
     // cymbal
-    sample cym = phasor(&s->pcym[0], 10 * pow(2, 8) *
+    sample cym = phasor(&s->pcym[0], 1 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
-    sample cym2 = phasor(&s->pcym[1],10 * pow(2, 8) *
+    sample cym2 = phasor(&s->pcym[1],1 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
         noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
diff @ 2019-02-15 22:00:53 +0000
diff --git a/client/go.c b/client/go.c
index 932fb20ba..e7313a99f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -196,11 +196,11 @@ go(S *s, int channels, const float *in, float *out)
     // cymbal
     sample cym = phasor(&s->pcym[0], 1 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[10], 2000, flatq),
-        noise() + 6 * cos(twopi * s->pcym[1].phase))/mtof(0)));
+        noise() + 16 * cos(twopi * s->pcym[1].phase))/mtof(0)));
     cym = sin(twopi * cym);
     sample cym2 = phasor(&s->pcym[1],1 * pow(2, 8) *
       mtof(biquad(highpass(&s->pbq[11], 2000, flatq),
-        noise() + 6 * cos(twopi * s->pcym[0].phase))/mtof(0)));
+        noise() + 16 * cos(twopi * s->pcym[0].phase))/mtof(0)));
     cym2 = sin(twopi * cym2);
     sample cymenv = 1 - wrap(2 * pow(wrap(8 * p), 1./0.85));
     cymenv *= cymenv;
diff @ 2019-02-15 22:01:00 +0000
diff --git a/client/go.c b/client/go.c
index e7313a99f..07613c057 100644
--- a/client/go.c
+++ b/client/go.c
@@ -216,6 +216,7 @@ go(S *s, int channels, const float *in, float *out)
     kick *= kick;
     kick *= kick;
     kick *= kick;
+    kick *= kick;
     kick = 1.5 * tanh(2 * biquad(highpass(&s->pbq[12], 30, 20),
       tanh(sin(twopi * 30 * active * kick) * (1 + kick))));
     sample output[2] =
diff @ 2019-02-15 22:01:14 +0000
diff --git a/client/go.c b/client/go.c
index 07613c057..570ca368c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -248,8 +248,8 @@ go(S *s, int channels, const float *in, float *out)
     sample er = delread4(&s->edelay2, rdelms + si);
     sample 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.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 @ 2019-02-15 22:01:20 +0000
diff --git a/client/go.c b/client/go.c
index 570ca368c..f95b7fde9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -240,7 +240,7 @@ go(S *s, int channels, const float *in, float *out)
     sample t = twopi * p;
     sample co = cos(t);
     sample si = sin(t);
-    sample ldelms = 60000 / bpm * (p < 0.75 ? 1 : 2);
+    sample ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./64);
     sample rdelms = ldelms;
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
diff @ 2019-02-15 22:01:52 +0000
diff --git a/client/go.c b/client/go.c
index f95b7fde9..4ebc1a127 100644
--- a/client/go.c
+++ b/client/go.c
@@ -126,23 +126,6 @@ go(S *s, int channels, const float *in, float *out)
       feedback[c] = sin(2 * feedback[c] - down - up);
     }
 
-    // multiband compressor
-    sample input[2] = { feedback[0], feedback[1] };
-    sample output[2] = { 0, 0 };
-    for (int o = 0; o < OCTAVES; ++o)
-    {
-      sample band[2];
-      for (int c = 0; c < 2; ++c)
-      {
-        band[c] = biquad(bandpass(&s->multiband[o][c], 10 * pow(2, o), flatq), input[c]);
-      }
-      compress(band, &s->multicomp[o], 5, 10, 25, 48, band);
-      output[0] += band[0];
-      output[1] += band[1];
-    }
-    feedback[0] = sin(output[0]);
-    feedback[1] = sin(output[1]);
-
     // compress feedback
     compress(so2, &s->so2.compress, 5, 10, 25, 48, feedback);
     sample gain = 1;
@@ -247,9 +230,27 @@ go(S *s, int channels, const float *in, float *out)
     sample el = delread4(&s->edelay1, ldelms + co);
     sample er = delread4(&s->edelay2, rdelms + si);
     sample es[2] = { co * el + si * er, -si * el + co * er };
+    // multiband compressor
+    sample input[2] = { es[0], es[1] };
+    sample output[2] = { 0, 0 };
+    for (int o = 0; o < OCTAVES; ++o)
+    {
+      sample band[2];
+      for (int c = 0; c < 2; ++c)
+      {
+        band[c] = biquad(bandpass(&s->multiband[o][c], 10 * pow(2, o), flatq), input[c]);
+      }
+      compress(band, &s->multicomp[o], 5, 10, 25, 48, band);
+      output[0] += band[0];
+      output[1] += band[1];
+    }
+    feedback[0] = sin(output[0]);
+    feedback[1] = sin(output[1]);
+
+
     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(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 @ 2019-02-15 22:01:58 +0000
diff --git a/client/go.c b/client/go.c
index 4ebc1a127..b05c81f9f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -244,8 +244,8 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
-    feedback[0] = sin(output[0]);
-    feedback[1] = sin(output[1]);
+    es[[0] = sin(output[0]);
+    es[1] = sin(output[1]);
 
 
     compress(es, &s->ecompress1, 5, 10, 25, 48, es);
diff @ 2019-02-15 22:01:59 +0000
diff --git a/client/go.c b/client/go.c
index b05c81f9f..f82638f8c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -244,7 +244,7 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
-    es[[0] = sin(output[0]);
+    es[0] = sin(output[0]);
     es[1] = sin(output[1]);
 
 
diff @ 2019-02-15 22:02:14 +0000
diff --git a/client/go.c b/client/go.c
index f82638f8c..96b5b8953 100644
--- a/client/go.c
+++ b/client/go.c
@@ -224,7 +224,7 @@ go(S *s, int channels, const float *in, float *out)
     sample co = cos(t);
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./64);
-    sample rdelms = ldelms;
+    sample rdelms = 60000 / bpm * (p < 0.5 ? 1 : 1./32);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     sample el = delread4(&s->edelay1, ldelms + co);
diff @ 2019-02-15 22:02:35 +0000
diff --git a/client/go.c b/client/go.c
index 96b5b8953..63df52f33 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 144;
+  sample bpm = 130;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:02:40 +0000
diff --git a/client/go.c b/client/go.c
index 63df52f33..c0514b6a7 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 130;
+  sample bpm = 120;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:02:46 +0000
diff --git a/client/go.c b/client/go.c
index c0514b6a7..4f4df71c5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 120;
+  sample bpm = 100;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:02:59 +0000
diff --git a/client/go.c b/client/go.c
index 4f4df71c5..077b1e36f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -223,8 +223,8 @@ go(S *s, int channels, const float *in, float *out)
     sample t = twopi * p;
     sample co = cos(t);
     sample si = sin(t);
-    sample ldelms = 60000 / bpm * (p < 0.75 ? 1 : 1./64);
-    sample rdelms = 60000 / bpm * (p < 0.5 ? 1 : 1./32);
+    sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
+    sample rdelms = 60000 / bpm * (p < 0.5 ? 1./2 : 1./32);
     ldelms = lop(&s->elop[0], ldelms, 5);
     rdelms = lop(&s->elop[1], rdelms, 5);
     sample el = delread4(&s->edelay1, ldelms + co);
diff @ 2019-02-15 22:03:25 +0000
diff --git a/client/go.c b/client/go.c
index 077b1e36f..e13c4ea7d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -244,6 +244,7 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
+    
     es[0] = sin(output[0]);
     es[1] = sin(output[1]);
 
diff @ 2019-02-15 22:03:40 +0000
diff --git a/client/go.c b/client/go.c
index e13c4ea7d..077b1e36f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -244,7 +244,6 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
-    
     es[0] = sin(output[0]);
     es[1] = sin(output[1]);
 
diff @ 2019-02-15 22:03:47 +0000
diff --git a/client/go.c b/client/go.c
index 077b1e36f..767f533e7 100644
--- a/client/go.c
+++ b/client/go.c
@@ -225,8 +225,8 @@ go(S *s, int channels, const float *in, float *out)
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
     sample rdelms = 60000 / bpm * (p < 0.5 ? 1./2 : 1./32);
-    ldelms = lop(&s->elop[0], ldelms, 5);
-    rdelms = lop(&s->elop[1], rdelms, 5);
+    ldelms = lop(&s->elop[0], ldelms, 1);
+    rdelms = lop(&s->elop[1], rdelms, 1);
     sample el = delread4(&s->edelay1, ldelms + co);
     sample er = delread4(&s->edelay2, rdelms + si);
     sample es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2019-02-15 22:04:00 +0000
diff --git a/client/go.c b/client/go.c
index 767f533e7..21db60f2c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -225,8 +225,8 @@ go(S *s, int channels, const float *in, float *out)
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
     sample rdelms = 60000 / bpm * (p < 0.5 ? 1./2 : 1./32);
-    ldelms = lop(&s->elop[0], ldelms, 1);
-    rdelms = lop(&s->elop[1], rdelms, 1);
+    ldelms = lop(&s->elop[0], ldelms, 0.1);
+    rdelms = lop(&s->elop[1], rdelms, 0.1);
     sample el = delread4(&s->edelay1, ldelms + co);
     sample er = delread4(&s->edelay2, rdelms + si);
     sample es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2019-02-15 22:04:18 +0000
diff --git a/client/go.c b/client/go.c
index 21db60f2c..6fdb19cbb 100644
--- a/client/go.c
+++ b/client/go.c
@@ -230,6 +230,8 @@ go(S *s, int channels, const float *in, float *out)
     sample el = delread4(&s->edelay1, ldelms + co);
     sample er = delread4(&s->edelay2, rdelms + si);
     sample es[2] = { co * el + si * er, -si * el + co * er };
+    out[2] = co;
+    out[3] = si;
     // multiband compressor
     sample input[2] = { es[0], es[1] };
     sample output[2] = { 0, 0 };
@@ -247,7 +249,6 @@ go(S *s, int channels, const float *in, float *out)
     es[0] = sin(output[0]);
     es[1] = sin(output[1]);
 
-
     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));
diff @ 2019-02-15 22:04:35 +0000
diff --git a/client/go.c b/client/go.c
index 6fdb19cbb..9f459d982 100644
--- a/client/go.c
+++ b/client/go.c
@@ -220,7 +220,7 @@ go(S *s, int channels, const float *in, float *out)
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
     sample p = phasor(&s->ephase, bpm / 60 / 8);
-    sample t = twopi * p;
+    sample t = 2 * twopi * p;
     sample co = cos(t);
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
diff @ 2019-02-15 22:04:41 +0000
diff --git a/client/go.c b/client/go.c
index 9f459d982..f95bb1fd5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -220,7 +220,7 @@ go(S *s, int channels, const float *in, float *out)
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
     sample p = phasor(&s->ephase, bpm / 60 / 8);
-    sample t = 2 * twopi * p;
+    sample t = 4 * twopi * p;
     sample co = cos(t);
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
diff @ 2019-02-15 22:04:46 +0000
diff --git a/client/go.c b/client/go.c
index f95bb1fd5..a67a201e5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -220,7 +220,7 @@ go(S *s, int channels, const float *in, float *out)
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
     sample p = phasor(&s->ephase, bpm / 60 / 8);
-    sample t = 4 * twopi * p;
+    sample t = 5 * twopi * p;
     sample co = cos(t);
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
diff @ 2019-02-15 22:04:49 +0000
diff --git a/client/go.c b/client/go.c
index a67a201e5..da97cc7d5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -220,7 +220,7 @@ go(S *s, int channels, const float *in, float *out)
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
     sample p = phasor(&s->ephase, bpm / 60 / 8);
-    sample t = 5 * twopi * p;
+    sample t = 16 * twopi * p;
     sample co = cos(t);
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
diff @ 2019-02-15 22:04:54 +0000
diff --git a/client/go.c b/client/go.c
index da97cc7d5..32d810a15 100644
--- a/client/go.c
+++ b/client/go.c
@@ -219,7 +219,7 @@ go(S *s, int channels, const float *in, float *out)
   {
     s->edelay1.length = 4 * SR;
     s->edelay2.length = 4 * SR;
-    sample p = phasor(&s->ephase, bpm / 60 / 8);
+    sample p = phasor(&s->ephase, bpm / 60 / 4);
     sample t = 16 * twopi * p;
     sample co = cos(t);
     sample si = sin(t);
diff @ 2019-02-15 22:05:04 +0000
diff --git a/client/go.c b/client/go.c
index 32d810a15..e3509e8e9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -225,8 +225,8 @@ go(S *s, int channels, const float *in, float *out)
     sample si = sin(t);
     sample ldelms = 60000 / bpm * (p < 0.75 ? 1./2 : 1./64);
     sample rdelms = 60000 / bpm * (p < 0.5 ? 1./2 : 1./32);
-    ldelms = lop(&s->elop[0], ldelms, 0.1);
-    rdelms = lop(&s->elop[1], rdelms, 0.1);
+    ldelms = lop(&s->elop[0], ldelms, 15);
+    rdelms = lop(&s->elop[1], rdelms, 15);
     sample el = delread4(&s->edelay1, ldelms + co);
     sample er = delread4(&s->edelay2, rdelms + si);
     sample es[2] = { co * el + si * er, -si * el + co * er };
diff @ 2019-02-15 22:05:30 +0000
diff --git a/client/go.c b/client/go.c
index e3509e8e9..789162d8a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -325,7 +325,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     { // bell
       sample env = lop(&s->lop59[4],
-        0 * clamp(2 * (0.5 - wrap(0.5 + 4 * t)), 0, 1), 15);
+        (wrap(t) < 0.25) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(8 * t))
diff @ 2019-02-15 22:05:35 +0000
diff --git a/client/go.c b/client/go.c
index 789162d8a..5ed4bcf87 100644
--- a/client/go.c
+++ b/client/go.c
@@ -325,7 +325,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     { // bell
       sample env = lop(&s->lop59[4],
-        (wrap(t) < 0.25) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
+        (wrap(t) < 0.125) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(8 * t))
diff @ 2019-02-15 22:05:56 +0000
diff --git a/client/go.c b/client/go.c
index 5ed4bcf87..609553ba6 100644
--- a/client/go.c
+++ b/client/go.c
@@ -332,7 +332,7 @@ go(S *s, int channels, const float *in, float *out)
         * (wrap(4 * t) < 0.5)
         , 0, 1), 15);
       sample bell
-        = sin(4 * twopi * osc)
+        = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5)
         * sin(5 * twopi * osc)
         * sin(7 * twopi * osc)
         * env
diff @ 2019-02-15 22:06:02 +0000
diff --git a/client/go.c b/client/go.c
index 609553ba6..d69ae3648 100644
--- a/client/go.c
+++ b/client/go.c
@@ -332,7 +332,7 @@ go(S *s, int channels, const float *in, float *out)
         * (wrap(4 * t) < 0.5)
         , 0, 1), 15);
       sample bell
-        = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5)
+        = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5))
         * sin(5 * twopi * osc)
         * sin(7 * twopi * osc)
         * env
diff @ 2019-02-15 22:06:10 +0000
diff --git a/client/go.c b/client/go.c
index d69ae3648..72a35a6c3 100644
--- a/client/go.c
+++ b/client/go.c
@@ -333,8 +333,8 @@ go(S *s, int channels, const float *in, float *out)
         , 0, 1), 15);
       sample bell
         = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5))
-        * sin(5 * twopi * osc)
-        * sin(7 * twopi * osc)
+        * sin(5 * twopi * osc * pow(2, wrap(2 * t) < 0.5))
+        * sin(7 * twopi * osc * pow(2, wrap(4 * t) < 0.5))
         * env
         * 4;
       sample bell1 = pitchshift(&s->ps59[0], 2, 100, 3, bell);
diff @ 2019-02-15 22:06:16 +0000
diff --git a/client/go.c b/client/go.c
index 72a35a6c3..24aaf3d88 100644
--- a/client/go.c
+++ b/client/go.c
@@ -325,7 +325,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     { // bell
       sample env = lop(&s->lop59[4],
-        (wrap(t) < 0.125) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
+        (wrap(2 * t) < 0.125) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(8 * t))
diff @ 2019-02-15 22:06:20 +0000
diff --git a/client/go.c b/client/go.c
index 24aaf3d88..6cc10bf32 100644
--- a/client/go.c
+++ b/client/go.c
@@ -325,7 +325,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     { // bell
       sample env = lop(&s->lop59[4],
-        (wrap(2 * t) < 0.125) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
+        (wrap(2 * t) < 0.25) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(8 * t))
diff @ 2019-02-15 22:06:31 +0000
diff --git a/client/go.c b/client/go.c
index 6cc10bf32..25c2019a2 100644
--- a/client/go.c
+++ b/client/go.c
@@ -255,8 +255,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] = 0*es[0];
+    mixdown[1] = 0*es[1];
   }
 
   // = 5 = fifty-nine stellations ======================================
diff @ 2019-02-15 22:06:40 +0000
diff --git a/client/go.c b/client/go.c
index 25c2019a2..25dc0f57d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -350,8 +350,8 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       sample lfo = 11 * sin(16 * twopi * t);
-      sample l = 0.3 * delread4(&s->del59l, ms4 + lfo) + bell;
-      sample r = 0.3 * delread4(&s->del59r, ms4 - lfo) + bell;
+      sample l = 0.73 * delread4(&s->del59l, ms4 + lfo) + bell;
+      sample r = 0.73 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2019-02-15 22:06:43 +0000
diff --git a/client/go.c b/client/go.c
index 25dc0f57d..b3a137f43 100644
--- a/client/go.c
+++ b/client/go.c
@@ -349,7 +349,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      sample lfo = 11 * sin(16 * twopi * t);
+      sample lfo = 1 * sin(16 * twopi * t);
       sample l = 0.73 * delread4(&s->del59l, ms4 + lfo) + bell;
       sample r = 0.73 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2019-02-15 22:06:55 +0000
diff --git a/client/go.c b/client/go.c
index b3a137f43..337e6839e 100644
--- a/client/go.c
+++ b/client/go.c
@@ -319,7 +319,7 @@ go(S *s, int channels, const float *in, float *out)
         + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
         + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
       bass *= 1.5;
-      bass *= 0;
+      bass *= 1;
       o[0] += bass;
       o[1] += bass;
     }
diff @ 2019-02-15 22:07:06 +0000
diff --git a/client/go.c b/client/go.c
index 337e6839e..9acaeee47 100644
--- a/client/go.c
+++ b/client/go.c
@@ -317,7 +317,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
-        + sin(2 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
+        + sin(4 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
       bass *= 1.5;
       bass *= 1;
       o[0] += bass;
diff @ 2019-02-15 22:07:16 +0000
diff --git a/client/go.c b/client/go.c
index 9acaeee47..bbe6632aa 100644
--- a/client/go.c
+++ b/client/go.c
@@ -317,7 +317,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
-        + sin(4 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 4)) * 0.7;
+        + sin(4 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
       o[0] += bass;
diff @ 2019-02-15 22:07:20 +0000
diff --git a/client/go.c b/client/go.c
index bbe6632aa..c6fa0e808 100644
--- a/client/go.c
+++ b/client/go.c
@@ -317,7 +317,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
-        + sin(4 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
+        + sin(8 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
       o[0] += bass;
diff @ 2019-02-15 22:07:32 +0000
diff --git a/client/go.c b/client/go.c
index c6fa0e808..854488794 100644
--- a/client/go.c
+++ b/client/go.c
@@ -317,7 +317,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
-        + sin(8 * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
+        + sin((wrap(2 * t) < 0.5 ? 4 : 8) * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
       o[0] += bass;
diff @ 2019-02-15 22:07:48 +0000
diff --git a/client/go.c b/client/go.c
index 854488794..62ac9ba43 100644
--- a/client/go.c
+++ b/client/go.c
@@ -316,7 +316,7 @@ go(S *s, int channels, const float *in, float *out)
       sample bass
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
-        + sin(4 * twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
+        + sin((wrap(t) < 0.5 ? 4 : 8)* twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
         + sin((wrap(2 * t) < 0.5 ? 4 : 8) * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
diff @ 2019-02-15 22:08:02 +0000
diff --git a/client/go.c b/client/go.c
index 62ac9ba43..dd92ab6ed 100644
--- a/client/go.c
+++ b/client/go.c
@@ -317,7 +317,7 @@ go(S *s, int channels, const float *in, float *out)
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
         + sin((wrap(t) < 0.5 ? 4 : 8)* twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
-        + sin((wrap(2 * t) < 0.5 ? 4 : 8) * twopi * vcf(&s->vcf59[1], bosc, 8 * hz, 6)) * 0.7;
+        + sin((wrap(2 * t) < 0.5 ? 4 : 8) * twopi * vcf(&s->vcf59[1], bosc, 8 * hz * pow(2, sin(twopi * t)), 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
       o[0] += bass;
diff @ 2019-02-15 22:08:13 +0000
diff --git a/client/go.c b/client/go.c
index dd92ab6ed..1d8c0f472 100644
--- a/client/go.c
+++ b/client/go.c
@@ -316,7 +316,7 @@ go(S *s, int channels, const float *in, float *out)
       sample bass
         = sub
         + lop(&s->lop59[1], lop(&s->lop59[2], bosc, 1000), 1000)
-        + sin((wrap(t) < 0.5 ? 4 : 8)* twopi * vcf(&s->vcf59[0], bosc, 4 * hz, 6))
+        + sin((wrap(t) < 0.5 ? 4 : 8)* twopi * vcf(&s->vcf59[0], bosc, 4 * hz * pow(2, cos(twopi * t)), 6))
         + sin((wrap(2 * t) < 0.5 ? 4 : 8) * twopi * vcf(&s->vcf59[1], bosc, 8 * hz * pow(2, sin(twopi * t)), 6)) * 0.7;
       bass *= 1.5;
       bass *= 1;
diff @ 2019-02-15 22:08:26 +0000
diff --git a/client/go.c b/client/go.c
index 1d8c0f472..2be0864df 100644
--- a/client/go.c
+++ b/client/go.c
@@ -325,7 +325,7 @@ go(S *s, int channels, const float *in, float *out)
     }
     { // bell
       sample env = lop(&s->lop59[4],
-        (wrap(2 * t) < 0.25) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
+        (wrap(2 * t) < 0.5) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(8 * t))
diff @ 2019-02-15 22:08:40 +0000
diff --git a/client/go.c b/client/go.c
index 2be0864df..03e5fc190 100644
--- a/client/go.c
+++ b/client/go.c
@@ -343,7 +343,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += bell1 + bell2 + bell3;
       bell *= env;
       sample becho = delread1(&s->del59, ms4);
-      becho = lop(&s->lop59[3], becho, 1000) * 0.5;
+      becho = lop(&s->lop59[3], becho, 1000) * 0.9;
       delwrite(&s->del59,
         bell3 + pitchshift(&s->ps59[3], 2, 100, 3, becho));
       becho *= env2;
diff @ 2019-02-15 22:08:48 +0000
diff --git a/client/go.c b/client/go.c
index 03e5fc190..2864329e8 100644
--- a/client/go.c
+++ b/client/go.c
@@ -343,7 +343,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += bell1 + bell2 + bell3;
       bell *= env;
       sample becho = delread1(&s->del59, ms4);
-      becho = lop(&s->lop59[3], becho, 1000) * 0.9;
+      becho = lop(&s->lop59[3], becho, 1000) * -0.9;
       delwrite(&s->del59,
         bell3 + pitchshift(&s->ps59[3], 2, 100, 3, becho));
       becho *= env2;
diff @ 2019-02-15 22:08:53 +0000
diff --git a/client/go.c b/client/go.c
index 2864329e8..384d98f0f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -343,7 +343,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += bell1 + bell2 + bell3;
       bell *= env;
       sample becho = delread1(&s->del59, ms4);
-      becho = lop(&s->lop59[3], becho, 1000) * -0.9;
+      becho = lop(&s->lop59[3], becho, 1000) * -1.9;
       delwrite(&s->del59,
         bell3 + pitchshift(&s->ps59[3], 2, 100, 3, becho));
       becho *= env2;
diff @ 2019-02-15 22:08:55 +0000
diff --git a/client/go.c b/client/go.c
index 384d98f0f..2864329e8 100644
--- a/client/go.c
+++ b/client/go.c
@@ -343,7 +343,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += bell1 + bell2 + bell3;
       bell *= env;
       sample becho = delread1(&s->del59, ms4);
-      becho = lop(&s->lop59[3], becho, 1000) * -1.9;
+      becho = lop(&s->lop59[3], becho, 1000) * -0.9;
       delwrite(&s->del59,
         bell3 + pitchshift(&s->ps59[3], 2, 100, 3, becho));
       becho *= env2;
diff @ 2019-02-15 22:09:07 +0000
diff --git a/client/go.c b/client/go.c
index 2864329e8..82c2487e0 100644
--- a/client/go.c
+++ b/client/go.c
@@ -343,7 +343,7 @@ go(S *s, int channels, const float *in, float *out)
       bell += bell1 + bell2 + bell3;
       bell *= env;
       sample becho = delread1(&s->del59, ms4);
-      becho = lop(&s->lop59[3], becho, 1000) * -0.9;
+      becho = lop(&s->lop59[3], becho, 1000) * -0.5;
       delwrite(&s->del59,
         bell3 + pitchshift(&s->ps59[3], 2, 100, 3, becho));
       becho *= env2;
diff @ 2019-02-15 22:09:24 +0000
diff --git a/client/go.c b/client/go.c
index 82c2487e0..6bfb30dd3 100644
--- a/client/go.c
+++ b/client/go.c
@@ -328,7 +328,7 @@ go(S *s, int channels, const float *in, float *out)
         (wrap(2 * t) < 0.5) * clamp(2 * (0.5 - wrap(0.5 + 8 * t)), 0, 1), 15);
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
-        * (0.5 - wrap(8 * t))
+        * (0.5 - wrap(16 * t))
         * (wrap(4 * t) < 0.5)
         , 0, 1), 15);
       sample bell
diff @ 2019-02-15 22:09:27 +0000
diff --git a/client/go.c b/client/go.c
index 6bfb30dd3..594a89841 100644
--- a/client/go.c
+++ b/client/go.c
@@ -329,7 +329,7 @@ go(S *s, int channels, const float *in, float *out)
       sample env2 = lop(&s->lop59[5], clamp
         ( 2
         * (0.5 - wrap(16 * t))
-        * (wrap(4 * t) < 0.5)
+        * (wrap(16 * t) < 0.5)
         , 0, 1), 15);
       sample bell
         = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5))
diff @ 2019-02-15 22:09:37 +0000
diff --git a/client/go.c b/client/go.c
index 594a89841..4fddd395a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -330,7 +330,7 @@ go(S *s, int channels, const float *in, float *out)
         ( 2
         * (0.5 - wrap(16 * t))
         * (wrap(16 * t) < 0.5)
-        , 0, 1), 15);
+        , 0, 1), 50);
       sample bell
         = sin(4 * twopi * osc * pow(2, wrap(1 * t) < 0.5))
         * sin(5 * twopi * osc * pow(2, wrap(2 * t) < 0.5))
diff @ 2019-02-15 22:09:44 +0000
diff --git a/client/go.c b/client/go.c
index 4fddd395a..d075d0dd9 100644
--- a/client/go.c
+++ b/client/go.c
@@ -350,8 +350,8 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       sample lfo = 1 * sin(16 * twopi * t);
-      sample l = 0.73 * delread4(&s->del59l, ms4 + lfo) + bell;
-      sample r = 0.73 * delread4(&s->del59r, ms4 - lfo) + bell;
+      sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
+      sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2019-02-15 22:09:46 +0000
diff --git a/client/go.c b/client/go.c
index d075d0dd9..31679373a 100644
--- a/client/go.c
+++ b/client/go.c
@@ -349,7 +349,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      sample lfo = 1 * sin(16 * twopi * t);
+      sample lfo = 2 * sin(16 * twopi * t);
       sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
       sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2019-02-15 22:09:50 +0000
diff --git a/client/go.c b/client/go.c
index 31679373a..4ec641780 100644
--- a/client/go.c
+++ b/client/go.c
@@ -349,7 +349,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      sample lfo = 2 * sin(16 * twopi * t);
+      sample lfo = 3 * sin(16 * twopi * t);
       sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
       sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2019-02-15 22:09:52 +0000
diff --git a/client/go.c b/client/go.c
index 4ec641780..13f97402e 100644
--- a/client/go.c
+++ b/client/go.c
@@ -349,7 +349,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      sample lfo = 3 * sin(16 * twopi * t);
+      sample lfo = pow(2, t) * sin(16 * twopi * t);
       sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
       sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2019-02-15 22:09:57 +0000
diff --git a/client/go.c b/client/go.c
index 13f97402e..84cea2090 100644
--- a/client/go.c
+++ b/client/go.c
@@ -349,7 +349,7 @@ go(S *s, int channels, const float *in, float *out)
       becho *= env2;
       bell += becho;
       bell *= 4;
-      sample lfo = pow(2, t) * sin(16 * twopi * t);
+      sample lfo = pow(10, t) * sin(16 * twopi * t);
       sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
       sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
diff @ 2019-02-15 22:09:58 +0000
diff --git a/client/go.c b/client/go.c
index 84cea2090..7ddde3048 100644
--- a/client/go.c
+++ b/client/go.c
@@ -350,8 +350,8 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       sample lfo = pow(10, t) * sin(16 * twopi * t);
-      sample l = 0.973 * delread4(&s->del59l, ms4 + lfo) + bell;
-      sample r = 0.973 * delread4(&s->del59r, ms4 - lfo) + bell;
+      sample l = 0.3 * delread4(&s->del59l, ms4 + lfo) + bell;
+      sample r = 0.3 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
diff @ 2019-02-15 22:10:16 +0000
diff --git a/client/go.c b/client/go.c
index 7ddde3048..7a8de9b2e 100644
--- a/client/go.c
+++ b/client/go.c
@@ -309,7 +309,7 @@ go(S *s, int channels, const float *in, float *out)
               h * noise(), 3000), 1500));
     }
     { // bass
-      sample lfo = lop(&s->lop59[0], wrap(8/3. * t), 5);
+      sample lfo = lop(&s->lop59[0], wrap(2  *wrap(8/3. * t)), 5);
       sample sub = sin(twopi * osc);
       sample bosc = hip(&s->hip59[1],
           wrap(samphold(&s->sh59, lfo, osc) + osc) - osc, 5);
diff @ 2019-02-15 22:10:26 +0000
diff --git a/client/go.c b/client/go.c
index 7a8de9b2e..c81c77d94 100644
--- a/client/go.c
+++ b/client/go.c
@@ -302,7 +302,7 @@ go(S *s, int channels, const float *in, float *out)
       open   *= open;
       sample env = open + closed;
       sample h = noise();
-      h *= 0;
+      h *= 1;
       o[0] += 4 * tanh(env * hip(&s->hip59[2], hip(&s->hip59[3],
               h * noise(), 3000), 1500));
       o[1] += 4 * tanh(env * hip(&s->hip59[4], hip(&s->hip59[5],
diff @ 2019-02-15 22:10:31 +0000
diff --git a/client/go.c b/client/go.c
index c81c77d94..5c96dd655 100644
--- a/client/go.c
+++ b/client/go.c
@@ -293,6 +293,7 @@ go(S *s, int channels, const float *in, float *out)
       sample open   = 1 - wrap(4 * t - 0.50);
       closed *= closed;
       closed *= closed;
+      closed *= closed;
       closed *= 1.3;
       open   *= 1.3;
       closed *= closed;
diff @ 2019-02-15 22:10:37 +0000
diff --git a/client/go.c b/client/go.c
index 5c96dd655..481abaa8b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -295,10 +295,11 @@ go(S *s, int channels, const float *in, float *out)
       closed *= closed;
       closed *= closed;
       closed *= 1.3;
-      open   *= 1.3;
       closed *= closed;
       closed *= closed;
       open   *= open;
+      open   *= 1.3;
+      open   *= open;
       open   *= open;
       open   *= open;
       sample env = open + closed;
diff @ 2019-02-15 22:10:54 +0000
diff --git a/client/go.c b/client/go.c
index 481abaa8b..654687565 100644
--- a/client/go.c
+++ b/client/go.c
@@ -266,7 +266,7 @@ go(S *s, int channels, const float *in, float *out)
     s->del59r.length = SR/4;
     sample tempo = bpm / 60 / 4;
     sample ms4 = (1000 / (bpm / 60)) / 4;
-    sample hz = 40;
+    sample hz = 30;
     sample t = phasor(&s->phase59, tempo);
     sample osc = phasor(&s->osc59, hz);
     sample o[2] = { 0, 0 };
@@ -284,7 +284,7 @@ go(S *s, int channels, const float *in, float *out)
       sample kick = sin(twopi * phasor(&s->kick59[1], env + mod));
       env2 = env2 + env2 * env2 * env2 * env2;
       kick = 4 * hip(&s->hip59[0], tanh(env2 * kick), 5);
-      kick *= 0;
+      kick *= 1;
       o[0] += kick;
       o[1] += kick;
     }
diff @ 2019-02-15 22:11:16 +0000
diff --git a/client/go.c b/client/go.c
index 654687565..df486b63b 100644
--- a/client/go.c
+++ b/client/go.c
@@ -266,8 +266,8 @@ go(S *s, int channels, const float *in, float *out)
     s->del59r.length = SR/4;
     sample tempo = bpm / 60 / 4;
     sample ms4 = (1000 / (bpm / 60)) / 4;
-    sample hz = 30;
     sample t = phasor(&s->phase59, tempo);
+    sample hz = 30 + (t < 0.75 ? 0: 10);
     sample osc = phasor(&s->osc59, hz);
     sample o[2] = { 0, 0 };
     { // kick
diff @ 2019-02-15 22:12:05 +0000
diff --git a/client/go.c b/client/go.c
index df486b63b..2e79fbca1 100644
--- a/client/go.c
+++ b/client/go.c
@@ -232,22 +232,6 @@ go(S *s, int channels, const float *in, float *out)
     sample es[2] = { co * el + si * er, -si * el + co * er };
     out[2] = co;
     out[3] = si;
-    // multiband compressor
-    sample input[2] = { es[0], es[1] };
-    sample output[2] = { 0, 0 };
-    for (int o = 0; o < OCTAVES; ++o)
-    {
-      sample band[2];
-      for (int c = 0; c < 2; ++c)
-      {
-        band[c] = biquad(bandpass(&s->multiband[o][c], 10 * pow(2, o), flatq), input[c]);
-      }
-      compress(band, &s->multicomp[o], 5, 10, 25, 48, band);
-      output[0] += band[0];
-      output[1] += band[1];
-    }
-    es[0] = sin(output[0]);
-    es[1] = sin(output[1]);
 
     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));
@@ -352,13 +336,27 @@ go(S *s, int channels, const float *in, float *out)
       bell += becho;
       bell *= 4;
       sample lfo = pow(10, t) * sin(16 * twopi * t);
-      sample l = 0.3 * delread4(&s->del59l, ms4 + lfo) + bell;
-      sample r = 0.3 * delread4(&s->del59r, ms4 - lfo) + bell;
+      sample l = 1 * delread4(&s->del59l, ms4 + lfo) + bell;
+      sample r = 1 * delread4(&s->del59r, ms4 - lfo) + bell;
       delwrite(&s->del59l, -r);
       delwrite(&s->del59r,  l);
       o[0] += l;
       o[1] += r;
     }
+    // multiband compressor
+    sample input[2] = { o[0], o[1] };
+    sample output[2] = { 0, 0 };
+    for (int o = 0; o < OCTAVES; ++o)
+    {
+      sample band[2];
+      for (int c = 0; c < 2; ++c)
+      {
+        band[c] = biquad(bandpass(&s->multiband[o][c], 10 * pow(2, o), flatq), input[c]);
+      }
+      compress(band, &s->multicomp[o], 5, 10, 25, 48, band);
+      output[0] += band[0];
+      output[1] += band[1];
+    }
     compress(o, &s->comp59, 5, 10, 15, 36, o);
     mixdown[0] += o[0];
     mixdown[1] += o[1];
diff @ 2019-02-15 22:12:10 +0000
diff --git a/client/go.c b/client/go.c
index 2e79fbca1..a21c84598 100644
--- a/client/go.c
+++ b/client/go.c
@@ -357,7 +357,7 @@ go(S *s, int channels, const float *in, float *out)
       output[0] += band[0];
       output[1] += band[1];
     }
-    compress(o, &s->comp59, 5, 10, 15, 36, o);
+    compress(o, &s->comp59, 5, 10, 15, 36, output);
     mixdown[0] += o[0];
     mixdown[1] += o[1];
   }
diff @ 2019-02-15 22:12:44 +0000
diff --git a/client/go.c b/client/go.c
index a21c84598..a91e9e6ed 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 100;
+  sample bpm = 110;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:12:48 +0000
diff --git a/client/go.c b/client/go.c
index a91e9e6ed..860ac425d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 110;
+  sample bpm = 120;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:12:50 +0000
diff --git a/client/go.c b/client/go.c
index 860ac425d..739dd290d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 120;
+  sample bpm = 130;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:19 +0000
diff --git a/client/go.c b/client/go.c
index 739dd290d..d68cbf09d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -288,7 +288,7 @@ go(S *s, int channels, const float *in, float *out)
       open   *= open;
       sample env = open + closed;
       sample h = noise();
-      h *= 1;
+      h *= o;
       o[0] += 4 * tanh(env * hip(&s->hip59[2], hip(&s->hip59[3],
               h * noise(), 3000), 1500));
       o[1] += 4 * tanh(env * hip(&s->hip59[4], hip(&s->hip59[5],
diff @ 2019-02-15 22:13:21 +0000
diff --git a/client/go.c b/client/go.c
index d68cbf09d..5edc8ba5d 100644
--- a/client/go.c
+++ b/client/go.c
@@ -288,7 +288,7 @@ go(S *s, int channels, const float *in, float *out)
       open   *= open;
       sample env = open + closed;
       sample h = noise();
-      h *= o;
+      h *= 0;
       o[0] += 4 * tanh(env * hip(&s->hip59[2], hip(&s->hip59[3],
               h * noise(), 3000), 1500));
       o[1] += 4 * tanh(env * hip(&s->hip59[4], hip(&s->hip59[5],
diff @ 2019-02-15 22:13:28 +0000
diff --git a/client/go.c b/client/go.c
index 5edc8ba5d..6837c1673 100644
--- a/client/go.c
+++ b/client/go.c
@@ -251,7 +251,7 @@ go(S *s, int channels, const float *in, float *out)
     sample tempo = bpm / 60 / 4;
     sample ms4 = (1000 / (bpm / 60)) / 4;
     sample t = phasor(&s->phase59, tempo);
-    sample hz = 30 + (t < 0.75 ? 0: 10);
+    sample hz = 40 + (t < 0.75 ? 0: 10);
     sample osc = phasor(&s->osc59, hz);
     sample o[2] = { 0, 0 };
     { // kick
diff @ 2019-02-15 22:13:39 +0000
diff --git a/client/go.c b/client/go.c
index 6837c1673..9d19a67ca 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 130;
+  sample bpm = 140;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:42 +0000
diff --git a/client/go.c b/client/go.c
index 9d19a67ca..61a46f103 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 140;
+  sample bpm = 150;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:46 +0000
diff --git a/client/go.c b/client/go.c
index 61a46f103..77a2dced8 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 150;
+  sample bpm = 250;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:48 +0000
diff --git a/client/go.c b/client/go.c
index 77a2dced8..c65a002ad 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 250;
+  sample bpm = 1250;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:51 +0000
diff --git a/client/go.c b/client/go.c
index c65a002ad..bfab06c8c 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 1250;
+  sample bpm = 11250;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:56 +0000
diff --git a/client/go.c b/client/go.c
index bfab06c8c..f75d61ff5 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 11250;
+  sample bpm = 112500;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:13:59 +0000
diff --git a/client/go.c b/client/go.c
index f75d61ff5..d48010020 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 112500;
+  sample bpm = 1125000;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:14:03 +0000
diff --git a/client/go.c b/client/go.c
index d48010020..c297c921e 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 1125000;
+  sample bpm = 1125000.1;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:14:05 +0000
diff --git a/client/go.c b/client/go.c
index c297c921e..b2fd5c22f 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 1125000.1;
+  sample bpm = 1;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:14:10 +0000
diff --git a/client/go.c b/client/go.c
index b2fd5c22f..b0f45bb58 100644
--- a/client/go.c
+++ b/client/go.c
@@ -83,7 +83,7 @@ go(S *s, int channels, const float *in, float *out)
     s->pdel2.length = SR;
   }
   sample mixdown[2] = { 0, 0 };
-  sample bpm = 1;
+  sample bpm = 0;
   //int time = s->time++;
 
   // = 1 = bdsn ========================================================
diff @ 2019-02-15 22:14:16 +0000
diff --git a/client/go.c b/client/go.c
index b0f45bb58..9948b6557 100644
--- a/client/go.c
+++ b/client/go.c
@@ -365,7 +365,7 @@ go(S *s, int channels, const float *in, float *out)
   // = m = mixdown =====================================================
   {
     compress(mixdown, &s->mixdown, 5, 10, 25, 48, mixdown);
-    sample volume = 1;
+    sample volume = 0;
     mixdown[0] *= volume;
     mixdown[1] *= volume;
     for (int c = 0; c < channels && c < 2; ++c)

the end