aboutsummaryrefslogtreecommitdiff
path: root/nusmuk-audio
diff options
context:
space:
mode:
Diffstat (limited to 'nusmuk-audio')
-rw-r--r--nusmuk-audio/Makefile6
-rw-r--r--nusmuk-audio/_sinh.pd17
-rw-r--r--nusmuk-audio/bq_coef_bp.pd4
-rw-r--r--nusmuk-audio/bq_coef_hip.pd22
-rw-r--r--nusmuk-audio/bq_coef_lop.pd26
-rw-r--r--nusmuk-audio/bq_coef_notch.pd40
-rw-r--r--nusmuk-audio/bq_coef_peak.pd76
-rw-r--r--nusmuk-audio/examples/analog_synth_emulation.pd290
-rw-r--r--nusmuk-audio/granulator~-help.pd22
-rw-r--r--nusmuk-audio/saw~.pd35
10 files changed, 223 insertions, 315 deletions
diff --git a/nusmuk-audio/Makefile b/nusmuk-audio/Makefile
index 884aa60..440a213 100644
--- a/nusmuk-audio/Makefile
+++ b/nusmuk-audio/Makefile
@@ -31,7 +31,7 @@ EXTRA_DIST =
#
#------------------------------------------------------------------------------#
-CFLAGS = -DPD -I"$(PD_INCLUDE)" -Wall -W -g
+CFLAGS = -DPD -I"$(PD_INCLUDE)" -Wall -W -g
LDFLAGS =
LIBS =
@@ -114,8 +114,8 @@ ifeq ($(UNAME),Linux)
EXTENSION = pd_linux
OS = linux
PD_PATH = /usr
- OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
- CFLAGS += -fPIC
+ OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer -ffast-math -fno-trapping-math
+ CFLAGS += -fPIC
LDFLAGS += -Wl,--export-dynamic -shared -fPIC
LIBS += -lc
STRIP = strip --strip-unneeded -R .note -R .comment
diff --git a/nusmuk-audio/_sinh.pd b/nusmuk-audio/_sinh.pd
new file mode 100644
index 0000000..98863b5
--- /dev/null
+++ b/nusmuk-audio/_sinh.pd
@@ -0,0 +1,17 @@
+#N canvas 844 348 450 360 10;
+#X obj 39 100 exp;
+#X obj 66 78 * -1;
+#X obj 39 58 t f f;
+#X obj 66 99 exp;
+#X obj 39 124 -;
+#X obj 39 145 / 2;
+#X obj 39 35 inlet;
+#X obj 39 171 outlet;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 2 0;
diff --git a/nusmuk-audio/bq_coef_bp.pd b/nusmuk-audio/bq_coef_bp.pd
index 565d91e..57e94e6 100644
--- a/nusmuk-audio/bq_coef_bp.pd
+++ b/nusmuk-audio/bq_coef_bp.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 417 599 10;
+#N canvas 1 81 417 599 10;
#X obj 50 32 inlet;
#X obj 211 31 inlet;
#X text 92 34 f;
@@ -39,7 +39,7 @@
#X obj 50 148 * 2;
#X obj 50 99 min 21000;
#X obj 199 303 * 0.767;
-#X obj 238 242 expr sinh($f1);
+#X obj 238 242 _sinh;
#X connect 0 0 31 0;
#X connect 1 0 30 0;
#X connect 4 0 7 1;
diff --git a/nusmuk-audio/bq_coef_hip.pd b/nusmuk-audio/bq_coef_hip.pd
index a3f578f..c9a9ff1 100644
--- a/nusmuk-audio/bq_coef_hip.pd
+++ b/nusmuk-audio/bq_coef_hip.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 360 583 10;
+#N canvas 1 81 360 583 10;
#X obj 50 32 inlet;
#X obj 211 31 inlet;
#X text 92 34 f;
@@ -44,11 +44,11 @@
#X obj 50 115 * 3.14159;
#X obj 60 193 min 3.14;
#X obj 199 294 * 0.767;
-#X obj 238 254 sinh;
#X msg 211 140 1 \$1;
#X obj 211 162 /;
#X obj 50 144 * 2;
#X obj 50 95 min 21000;
+#X obj 238 254 _sinh;
#X connect 0 0 39 0;
#X connect 1 0 38 0;
#X connect 4 0 7 1;
@@ -57,7 +57,7 @@
#X connect 7 0 29 0;
#X connect 8 0 40 0;
#X connect 9 0 43 0;
-#X connect 10 0 45 0;
+#X connect 10 0 44 0;
#X connect 12 0 20 1;
#X connect 12 0 21 1;
#X connect 12 0 22 1;
@@ -78,7 +78,7 @@
#X connect 24 0 28 0;
#X connect 29 0 19 0;
#X connect 30 0 29 0;
-#X connect 30 1 44 0;
+#X connect 30 1 48 0;
#X connect 31 0 10 0;
#X connect 32 0 33 0;
#X connect 33 0 21 0;
@@ -88,17 +88,17 @@
#X connect 36 0 16 0;
#X connect 37 0 15 0;
#X connect 38 0 31 0;
-#X connect 39 0 48 0;
+#X connect 39 0 47 0;
#X connect 40 0 18 0;
#X connect 40 1 14 0;
#X connect 40 1 37 0;
#X connect 40 1 17 0;
#X connect 40 2 33 0;
-#X connect 41 0 47 0;
+#X connect 41 0 46 0;
#X connect 42 0 29 0;
#X connect 43 0 34 0;
-#X connect 44 0 43 1;
-#X connect 45 0 46 0;
-#X connect 46 0 30 0;
-#X connect 47 0 7 0;
-#X connect 48 0 41 0;
+#X connect 44 0 45 0;
+#X connect 45 0 30 0;
+#X connect 46 0 7 0;
+#X connect 47 0 41 0;
+#X connect 48 0 43 1;
diff --git a/nusmuk-audio/bq_coef_lop.pd b/nusmuk-audio/bq_coef_lop.pd
index 5f25d20..d84cb96 100644
--- a/nusmuk-audio/bq_coef_lop.pd
+++ b/nusmuk-audio/bq_coef_lop.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 454 630 10;
+#N canvas 1 81 454 630 10;
#X obj 50 32 inlet;
#X obj 211 31 inlet;
#X text 92 34 f;
@@ -43,12 +43,12 @@
#X obj 50 394 t f f b;
#X obj 50 115 * 3.14159;
#X obj 67 206 min 3.14;
-#X obj 238 295 sinh;
#X obj 199 325 * 0.767;
#X msg 211 140 1 \$1;
#X obj 211 162 /;
#X obj 50 143 * 2;
#X obj 50 95 min 21000;
+#X obj 238 295 _sinh;
#X connect 0 0 39 0;
#X connect 1 0 38 0;
#X connect 4 0 7 1;
@@ -56,8 +56,8 @@
#X connect 6 0 4 0;
#X connect 7 0 35 0;
#X connect 8 0 40 0;
-#X connect 9 0 44 0;
-#X connect 10 0 45 0;
+#X connect 9 0 43 0;
+#X connect 10 0 44 0;
#X connect 12 0 26 1;
#X connect 12 0 27 1;
#X connect 12 0 28 1;
@@ -85,20 +85,20 @@
#X connect 30 0 34 0;
#X connect 35 0 25 0;
#X connect 36 0 35 0;
-#X connect 36 1 43 0;
+#X connect 36 1 48 0;
#X connect 37 0 10 0;
#X connect 38 0 37 0;
-#X connect 39 0 48 0;
+#X connect 39 0 47 0;
#X connect 40 0 20 0;
#X connect 40 1 16 0;
#X connect 40 1 22 0;
#X connect 40 1 19 0;
#X connect 40 2 14 0;
-#X connect 41 0 47 0;
+#X connect 41 0 46 0;
#X connect 42 0 35 0;
-#X connect 43 0 44 1;
-#X connect 44 0 24 0;
-#X connect 45 0 46 0;
-#X connect 46 0 36 0;
-#X connect 47 0 7 0;
-#X connect 48 0 41 0;
+#X connect 43 0 24 0;
+#X connect 44 0 45 0;
+#X connect 45 0 36 0;
+#X connect 46 0 7 0;
+#X connect 47 0 41 0;
+#X connect 48 0 43 1;
diff --git a/nusmuk-audio/bq_coef_notch.pd b/nusmuk-audio/bq_coef_notch.pd
index abfc38e..e1f9927 100644
--- a/nusmuk-audio/bq_coef_notch.pd
+++ b/nusmuk-audio/bq_coef_notch.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 387 638 10;
+#N canvas 1 81 387 638 10;
#X obj 50 32 inlet;
#X obj 205 31 inlet;
#X text 92 34 f;
@@ -32,7 +32,6 @@
#X obj 50 73 max 0;
#X obj 50 122 * 3.14159;
#X msg 205 148 1 \$1;
-#X obj 232 242 sinh;
#X obj 205 170 /;
#X obj 199 303 *;
#X obj 50 148 * 2;
@@ -41,6 +40,7 @@
#X obj 50 548 t f f;
#X obj 205 104 + 0.1;
#X obj 50 99 min 21000;
+#X obj 232 242 _sinh;
#X connect 0 0 29 0;
#X connect 1 0 28 0;
#X connect 4 0 7 1;
@@ -48,7 +48,7 @@
#X connect 6 0 4 0;
#X connect 7 0 23 0;
#X connect 8 0 13 0;
-#X connect 9 0 34 0;
+#X connect 9 0 33 0;
#X connect 10 0 31 0;
#X connect 12 0 15 1;
#X connect 12 0 16 1;
@@ -57,30 +57,30 @@
#X connect 13 0 15 0;
#X connect 14 0 8 0;
#X connect 14 1 9 0;
-#X connect 15 0 38 0;
+#X connect 15 0 37 0;
#X connect 16 0 20 0;
#X connect 17 0 19 0;
#X connect 18 0 22 0;
#X connect 23 0 14 0;
#X connect 24 0 23 0;
-#X connect 24 1 32 0;
+#X connect 24 1 40 0;
#X connect 25 0 26 0;
#X connect 26 0 16 0;
#X connect 27 0 25 0;
+#X connect 27 1 35 0;
#X connect 27 1 36 0;
-#X connect 27 1 37 0;
#X connect 27 2 12 0;
-#X connect 28 0 39 0;
-#X connect 29 0 40 0;
-#X connect 30 0 35 0;
-#X connect 31 0 33 0;
-#X connect 32 0 34 1;
-#X connect 33 0 24 0;
-#X connect 34 0 27 0;
-#X connect 35 0 7 0;
-#X connect 36 0 17 0;
-#X connect 37 0 18 0;
-#X connect 38 0 11 0;
-#X connect 38 1 21 0;
-#X connect 39 0 10 0;
-#X connect 40 0 30 0;
+#X connect 28 0 38 0;
+#X connect 29 0 39 0;
+#X connect 30 0 34 0;
+#X connect 31 0 32 0;
+#X connect 32 0 24 0;
+#X connect 33 0 27 0;
+#X connect 34 0 7 0;
+#X connect 35 0 17 0;
+#X connect 36 0 18 0;
+#X connect 37 0 11 0;
+#X connect 37 1 21 0;
+#X connect 38 0 10 0;
+#X connect 39 0 30 0;
+#X connect 40 0 33 1;
diff --git a/nusmuk-audio/bq_coef_peak.pd b/nusmuk-audio/bq_coef_peak.pd
index a3f2e2b..07df35e 100644
--- a/nusmuk-audio/bq_coef_peak.pd
+++ b/nusmuk-audio/bq_coef_peak.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 433 621 10;
+#N canvas 1 81 433 621 10;
#X obj 50 32 inlet;
#X obj 206 31 inlet;
#X text 92 34 f;
@@ -30,7 +30,6 @@
#X obj 50 73 max 0;
#X obj 50 128 * 3.14159;
#X msg 206 148 1 \$1;
-#X obj 233 226 sinh;
#X obj 206 170 /;
#X obj 50 148 * 2;
#X obj 50 548 t f f;
@@ -53,6 +52,7 @@
#X obj 230 407 * 1;
#X obj 283 407 / 1;
#X obj 200 303 * 74.2;
+#X obj 233 226 _sinh;
#X connect 0 0 27 0;
#X connect 1 0 26 0;
#X connect 4 0 7 1;
@@ -60,7 +60,7 @@
#X connect 6 0 4 0;
#X connect 7 0 23 0;
#X connect 8 0 13 0;
-#X connect 9 0 52 0;
+#X connect 9 0 51 0;
#X connect 10 0 29 0;
#X connect 12 0 15 1;
#X connect 12 0 16 1;
@@ -69,45 +69,45 @@
#X connect 13 0 15 0;
#X connect 14 0 8 0;
#X connect 14 1 9 0;
-#X connect 15 0 33 0;
+#X connect 15 0 32 0;
#X connect 16 0 20 0;
#X connect 17 0 19 0;
#X connect 18 0 22 0;
#X connect 23 0 14 0;
#X connect 24 0 23 0;
-#X connect 24 1 30 0;
-#X connect 25 0 47 0;
-#X connect 26 0 34 0;
-#X connect 27 0 48 0;
-#X connect 28 0 32 0;
-#X connect 29 0 31 0;
-#X connect 30 0 52 1;
-#X connect 31 0 24 0;
-#X connect 32 0 7 0;
-#X connect 33 0 11 0;
-#X connect 33 1 21 0;
-#X connect 34 0 10 0;
-#X connect 35 0 40 0;
-#X connect 37 0 45 0;
+#X connect 24 1 52 0;
+#X connect 25 0 46 0;
+#X connect 26 0 33 0;
+#X connect 27 0 47 0;
+#X connect 28 0 31 0;
+#X connect 29 0 30 0;
+#X connect 30 0 24 0;
+#X connect 31 0 7 0;
+#X connect 32 0 11 0;
+#X connect 32 1 21 0;
+#X connect 33 0 10 0;
+#X connect 34 0 39 0;
+#X connect 36 0 44 0;
+#X connect 37 0 36 0;
#X connect 38 0 37 0;
+#X connect 38 1 36 1;
#X connect 39 0 38 0;
-#X connect 39 1 37 1;
-#X connect 40 0 39 0;
-#X connect 41 0 46 0;
-#X connect 42 0 43 0;
-#X connect 43 0 18 0;
-#X connect 44 0 49 0;
-#X connect 44 0 50 0;
-#X connect 44 1 51 0;
-#X connect 45 0 23 0;
-#X connect 45 1 49 1;
-#X connect 45 1 50 1;
-#X connect 45 1 51 1;
-#X connect 46 0 17 0;
-#X connect 47 0 16 0;
-#X connect 48 0 28 0;
-#X connect 49 0 25 0;
-#X connect 50 0 42 0;
-#X connect 50 0 41 0;
-#X connect 51 0 12 0;
-#X connect 52 0 44 0;
+#X connect 40 0 45 0;
+#X connect 41 0 42 0;
+#X connect 42 0 18 0;
+#X connect 43 0 48 0;
+#X connect 43 0 49 0;
+#X connect 43 1 50 0;
+#X connect 44 0 23 0;
+#X connect 44 1 48 1;
+#X connect 44 1 49 1;
+#X connect 44 1 50 1;
+#X connect 45 0 17 0;
+#X connect 46 0 16 0;
+#X connect 47 0 28 0;
+#X connect 48 0 25 0;
+#X connect 49 0 41 0;
+#X connect 49 0 40 0;
+#X connect 50 0 12 0;
+#X connect 51 0 43 0;
+#X connect 52 0 51 1;
diff --git a/nusmuk-audio/examples/analog_synth_emulation.pd b/nusmuk-audio/examples/analog_synth_emulation.pd
index eefd015..c797984 100644
--- a/nusmuk-audio/examples/analog_synth_emulation.pd
+++ b/nusmuk-audio/examples/analog_synth_emulation.pd
@@ -1,124 +1,42 @@
-#N canvas 333 22 523 667 10;
-#X obj 66 468 *~ 0.1;
-#X obj 67 496 dac~;
-#X obj 65 126 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
--1 -1 5200 1;
-#X obj 65 283 line~;
-#X msg 65 261 \$1 20;
-#X obj 134 476 oscillo~;
-#X obj 66 324 ../saw~;
-#X obj 66 345 ../distortion~;
-#X obj 67 434 ../distortion~;
-#N canvas 520 123 368 628 coef_lpf_biquad 0;
-#X obj 50 32 inlet;
-#X obj 211 31 inlet;
-#X text 92 34 f;
-#X text 256 31 Q;
-#X obj 117 137 samplerate~;
-#X obj 117 114 loadbang;
-#X obj 174 115 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 50 170 /;
-#X obj 50 369 cos;
-#X obj 199 296 sin;
-#X obj 211 116 * 2;
-#X obj 50 564 outlet;
-#X obj 288 504 + 1;
-#X obj 139 501 / 2;
-#X obj 94 505 -;
-#X msg 99 463 1 \$1;
-#X msg 139 458 1 \$1;
-#X obj 184 480 -;
-#X obj 229 501 / 2;
-#X msg 229 460 1 \$1;
-#X obj 50 487 * -2;
-#X obj 139 480 -;
-#X msg 184 458 1 \$1;
-#X obj 229 481 -;
-#X obj 199 350 t f f;
-#X obj 50 269 t f f;
-#X obj 50 539 /;
-#X obj 94 540 /;
-#X obj 139 540 /;
-#X obj 184 539 /;
-#X obj 229 540 /;
-#X obj 139 564 outlet;
-#X obj 94 564 outlet;
-#X obj 184 564 outlet;
-#X obj 229 564 outlet;
-#X obj 50 246 f;
-#X obj 211 185 t b f;
-#X obj 211 95 + 0.707;
-#X obj 211 74 max 0;
-#X obj 50 73 max 0;
-#X obj 50 394 t f f b;
-#X obj 50 115 * 3.14159;
-#X obj 67 206 min 3.14;
-#X obj 238 295 sinh;
-#X obj 199 325 * 0.767;
-#X msg 211 140 1 \$1;
-#X obj 211 162 /;
-#X obj 50 143 * 2;
-#X obj 50 95 min 21000;
-#X connect 0 0 39 0;
-#X connect 1 0 38 0;
-#X connect 4 0 7 1;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 35 0;
-#X connect 8 0 40 0;
-#X connect 9 0 44 0;
-#X connect 10 0 45 0;
-#X connect 12 0 26 1;
-#X connect 12 0 27 1;
-#X connect 12 0 28 1;
-#X connect 12 0 29 1;
-#X connect 12 0 30 1;
-#X connect 13 0 28 0;
-#X connect 14 0 27 0;
-#X connect 15 0 14 0;
-#X connect 16 0 21 0;
-#X connect 17 0 29 0;
-#X connect 18 0 30 0;
-#X connect 19 0 23 0;
-#X connect 20 0 26 0;
-#X connect 21 0 13 0;
-#X connect 22 0 17 0;
-#X connect 23 0 18 0;
-#X connect 24 0 15 0;
-#X connect 24 1 12 0;
-#X connect 25 0 8 0;
-#X connect 25 1 9 0;
-#X connect 26 0 11 0;
-#X connect 27 0 32 0;
-#X connect 28 0 31 0;
-#X connect 29 0 33 0;
-#X connect 30 0 34 0;
-#X connect 35 0 25 0;
-#X connect 36 0 35 0;
-#X connect 36 1 43 0;
-#X connect 37 0 10 0;
-#X connect 38 0 37 0;
-#X connect 39 0 48 0;
-#X connect 40 0 20 0;
-#X connect 40 1 16 0;
-#X connect 40 1 22 0;
-#X connect 40 1 19 0;
-#X connect 40 2 14 0;
-#X connect 41 0 47 0;
-#X connect 42 0 35 0;
-#X connect 43 0 44 1;
-#X connect 44 0 24 0;
-#X connect 45 0 46 0;
-#X connect 46 0 36 0;
-#X connect 47 0 7 0;
-#X connect 48 0 41 0;
-#X restore 244 253 pd coef_lpf_biquad;
-#X obj 244 277 pack f f f f f;
-#X obj 244 231 mtof;
-#X floatatom 369 229 5 0 0 0 - - -;
-#X obj 244 303 t a;
-#N canvas 0 0 450 300 5_line~ 0;
+#N canvas 329 85 523 667 10;
+#X declare -path ..;
+#X obj 66 508 *~ 0.1;
+#X obj 67 536 dac~;
+#X obj 65 166 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 5000 1;
+#X obj 65 323 line~;
+#X msg 65 301 \$1 20;
+#X obj 134 516 oscillo~;
+#X obj 244 271 mtof;
+#X obj 244 136 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 7800 1;
+#X obj 101 1 metro 222;
+#X obj 101 133 pack f f;
+#X obj 101 24 t b b;
+#X obj 154 65 random 222;
+#X obj 232 65 random 222;
+#X obj 101 -18 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 179 111 pack f f;
+#X obj 179 133 line;
+#X obj 66 344 mtof~;
+#X floatatom 132 363 5 0 0 0 - - -;
+#X floatatom 114 455 5 0 0 0 - - -;
+#X obj 360 78 random 222;
+#X obj 307 144 pack f f;
+#X obj 307 166 line;
+#X obj 307 102 random 100;
+#X obj 307 123 / 10;
+#X obj 101 112 + 22;
+#X obj 179 89 random 99;
+#X obj 101 89 random 44;
+#X obj 135 495 *~ 0.5;
+#X obj 69 -44 declare -path ..;
+#X obj 244 343 bq_coef_lop;
+#X obj 66 364 saw~;
+#X obj 66 385 distortion~;
+#X obj 67 474 distortion~;
+#N canvas 1 85 450 300 5_lines~ 0;
#X obj 80 123 line~;
#X obj 79 147 outlet~;
#X obj 80 71 inlet;
@@ -134,11 +52,11 @@
#X obj 304 123 line~;
#X obj 303 147 outlet~;
#X obj 304 73 inlet;
-#X msg 80 97 \$1 5;
-#X msg 135 98 \$1 5;
-#X msg 193 96 \$1 5;
-#X msg 247 99 \$1 5;
-#X msg 303 99 \$1 5;
+#X msg 80 97 \$1 50;
+#X msg 135 98 \$1 50;
+#X msg 193 96 \$1 50;
+#X msg 247 99 \$1 50;
+#X msg 303 99 \$1 50;
#X connect 0 0 1 0;
#X connect 2 0 15 0;
#X connect 3 0 4 0;
@@ -154,84 +72,52 @@
#X connect 17 0 6 0;
#X connect 18 0 9 0;
#X connect 19 0 12 0;
-#X restore 244 344 pd 5_line~;
-#X obj 244 323 unpack f f f f f;
-#X obj 66 388 bq~ ---------;
-#X obj 244 96 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
--1 -1 8200 1;
-#X obj 101 -39 metro 222;
-#X obj 101 93 pack f f;
-#X obj 101 -16 t b b;
-#X obj 154 25 random 222;
-#X obj 232 25 random 222;
-#X obj 101 -58 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X obj 179 71 pack f f;
-#X obj 179 93 line;
-#X obj 66 304 mtof~;
-#X floatatom 132 323 5 0 0 0 - - -;
-#X floatatom 114 415 5 0 0 0 - - -;
-#X obj 359 38 random 222;
-#X obj 306 104 pack f f;
-#X obj 306 126 line;
-#X obj 306 62 random 100;
-#X obj 306 83 / 10;
-#X obj 101 72 + 22;
-#X obj 179 49 random 99;
-#X obj 101 49 random 44;
-#X obj 135 455 *~ 0.5;
+#X restore 244 364 pd 5_lines~;
+#X obj 66 428 bq~ ---------;
#X connect 0 0 1 0;
#X connect 0 0 1 1;
#X connect 2 0 4 0;
-#X connect 3 0 26 0;
+#X connect 3 0 16 0;
#X connect 4 0 3 0;
-#X connect 6 0 7 0;
-#X connect 7 0 16 0;
-#X connect 8 0 0 0;
-#X connect 8 0 37 0;
-#X connect 9 0 10 0;
-#X connect 9 1 10 1;
-#X connect 9 2 10 2;
-#X connect 9 3 10 3;
-#X connect 9 4 10 4;
-#X connect 10 0 13 0;
-#X connect 11 0 9 0;
-#X connect 12 0 9 1;
-#X connect 13 0 15 0;
-#X connect 14 0 16 1;
-#X connect 14 1 16 2;
-#X connect 14 2 16 3;
-#X connect 14 3 16 4;
-#X connect 14 4 16 5;
-#X connect 15 0 14 0;
-#X connect 15 1 14 1;
-#X connect 15 2 14 2;
-#X connect 15 3 14 3;
-#X connect 15 4 14 4;
-#X connect 16 0 8 0;
-#X connect 17 0 11 0;
-#X connect 18 0 20 0;
-#X connect 19 0 3 0;
-#X connect 20 0 32 0;
-#X connect 20 0 35 0;
-#X connect 20 0 36 0;
-#X connect 20 1 21 0;
-#X connect 20 1 22 0;
-#X connect 20 1 29 0;
-#X connect 21 0 19 1;
-#X connect 22 0 24 1;
-#X connect 23 0 18 0;
-#X connect 24 0 25 0;
-#X connect 25 0 11 0;
-#X connect 26 0 6 0;
-#X connect 27 0 7 1;
-#X connect 28 0 8 1;
-#X connect 29 0 30 1;
+#X connect 6 0 29 0;
+#X connect 7 0 6 0;
+#X connect 8 0 10 0;
+#X connect 9 0 3 0;
+#X connect 10 0 22 0;
+#X connect 10 0 25 0;
+#X connect 10 0 26 0;
+#X connect 10 1 11 0;
+#X connect 10 1 12 0;
+#X connect 10 1 19 0;
+#X connect 11 0 9 1;
+#X connect 12 0 14 1;
+#X connect 13 0 8 0;
+#X connect 14 0 15 0;
+#X connect 15 0 6 0;
+#X connect 16 0 30 0;
+#X connect 17 0 31 1;
+#X connect 18 0 32 1;
+#X connect 19 0 20 1;
+#X connect 20 0 21 0;
+#X connect 21 0 29 1;
+#X connect 22 0 23 0;
+#X connect 23 0 20 0;
+#X connect 24 0 9 0;
+#X connect 25 0 14 0;
+#X connect 26 0 24 0;
+#X connect 27 0 5 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 1;
+#X connect 29 2 33 2;
+#X connect 29 3 33 3;
+#X connect 29 4 33 4;
#X connect 30 0 31 0;
-#X connect 31 0 9 1;
-#X connect 32 0 33 0;
-#X connect 33 0 30 0;
-#X connect 34 0 19 0;
-#X connect 35 0 24 0;
-#X connect 36 0 34 0;
-#X connect 37 0 5 0;
+#X connect 31 0 34 0;
+#X connect 32 0 0 0;
+#X connect 32 0 27 0;
+#X connect 33 0 34 1;
+#X connect 33 1 34 2;
+#X connect 33 2 34 3;
+#X connect 33 3 34 4;
+#X connect 33 4 34 5;
+#X connect 34 0 32 0;
diff --git a/nusmuk-audio/granulator~-help.pd b/nusmuk-audio/granulator~-help.pd
index 32daf2a..c28a0e4 100644
--- a/nusmuk-audio/granulator~-help.pd
+++ b/nusmuk-audio/granulator~-help.pd
@@ -69,12 +69,12 @@ in the table);
#X obj 29 361 + 1;
#X text 88 315 10% before the position of the writing index;
#X text 93 342 to keep the number from 0 to 1;
-#X obj 569 520 granulator;
-#X obj 29 523 granulator;
#X obj 569 312 - 0.5;
#X obj 569 337 moses 0;
#X obj 569 360 + 1;
#X text 631 360 float modulo;
+#X obj 29 523 granulator~;
+#X obj 569 523 granulator~;
#X connect 2 0 1 0;
#X connect 2 1 1 0;
#X connect 3 0 1 0;
@@ -84,29 +84,29 @@ in the table);
#X connect 7 0 15 0;
#X connect 7 0 22 0;
#X connect 9 0 13 0;
-#X connect 11 0 33 0;
+#X connect 11 0 36 0;
#X connect 12 0 11 0;
#X connect 13 0 14 0;
#X connect 13 1 14 1;
-#X connect 14 0 33 0;
+#X connect 14 0 36 0;
#X connect 15 0 27 0;
#X connect 18 0 21 0;
-#X connect 19 0 32 0;
+#X connect 19 0 37 0;
#X connect 20 0 19 0;
#X connect 21 0 25 0;
#X connect 21 1 25 1;
#X connect 22 0 26 0;
#X connect 23 0 22 1;
-#X connect 25 0 32 0;
-#X connect 26 0 34 0;
+#X connect 25 0 37 0;
+#X connect 26 0 32 0;
#X connect 27 0 28 0;
#X connect 28 0 29 0;
#X connect 28 1 9 0;
#X connect 29 0 9 0;
-#X connect 34 0 35 0;
-#X connect 35 0 36 0;
-#X connect 35 1 18 0;
-#X connect 36 0 18 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 0;
+#X connect 33 1 18 0;
+#X connect 34 0 18 0;
#X restore 34 664 pd help RealTime Granulator;
#X text 260 7 granular synthesys with pd;
#X text 65 46 open a sound file;
diff --git a/nusmuk-audio/saw~.pd b/nusmuk-audio/saw~.pd
index f06316e..885e721 100644
--- a/nusmuk-audio/saw~.pd
+++ b/nusmuk-audio/saw~.pd
@@ -14,7 +14,6 @@
#X obj 87 542 outlet~;
#X obj 458 97 samplerate~;
#X obj 458 74 loadbang;
-#X obj 458 120 * 0.5;
#X obj 174 427 +~;
#N canvas 104 42 701 480 sin(x)/x 0;
#X obj 220 229 cos~;
@@ -50,30 +49,36 @@
#X obj 174 311 +~ 1;
#X obj 557 518 s \$0-lookup;
#X msg 557 497 0 0 1;
+#X obj 209 48 inlet;
+#X obj 552 73 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 458 122 * 0.5;
#X connect 0 0 1 0;
-#X connect 0 0 21 1;
+#X connect 0 0 20 1;
#X connect 1 0 2 0;
#X connect 1 0 3 0;
-#X connect 1 0 25 0;
+#X connect 1 0 24 0;
#X connect 2 0 8 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
-#X connect 5 0 18 0;
+#X connect 5 0 17 0;
#X connect 6 0 8 1;
#X connect 7 0 6 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
-#X connect 10 0 17 0;
+#X connect 10 0 16 0;
#X connect 11 0 0 0;
#X connect 11 0 6 1;
-#X connect 13 0 15 0;
+#X connect 13 0 29 0;
#X connect 14 0 13 0;
-#X connect 15 0 7 0;
-#X connect 16 0 21 0;
-#X connect 17 0 18 1;
-#X connect 18 0 16 1;
-#X connect 21 0 12 0;
-#X connect 22 0 27 0;
-#X connect 24 0 16 0;
-#X connect 25 0 24 0;
-#X connect 27 0 26 0;
+#X connect 15 0 20 0;
+#X connect 16 0 17 1;
+#X connect 17 0 15 1;
+#X connect 20 0 12 0;
+#X connect 21 0 26 0;
+#X connect 23 0 15 0;
+#X connect 24 0 23 0;
+#X connect 26 0 25 0;
+#X connect 27 0 0 1;
+#X connect 28 0 13 0;
+#X connect 29 0 7 0;