fix: replace cyclone env~ with vanilla line~ envelope, fix stripnote outlet
Validate and Test / validate-patches (push) Failing after 12s

- env~ is a cyclone external not available on board's Pd 0.55
- Replace with line~ + *~ 0.0055 for velocity-scaled AR envelope
- Fix stripnote outlet 1 (gate trigger) connected to envelope instead of outlet 0 (pitch)
- Change dac~ to dac~ 1 for mono output matching -outchannels 1
- Envelope: attack ~50ms, release ~50ms, sustain scaled by velocity
This commit is contained in:
2026-06-24 16:47:05 -07:00
parent 8d3666cdaa
commit 191c70fd18
2 changed files with 34 additions and 24 deletions
+20 -17
View File
@@ -16,7 +16,6 @@
#X obj 20 190 r midi-pitch;
#X obj 20 220 stripnote;
#X obj 20 260 mtof;
#X obj 20 290 env~ 50 200 0.7 400;
#X obj 140 260 osc~;
#X obj 140 290 *~ 0.3;
#X obj 220 260 osc~;
@@ -26,7 +25,10 @@
#X obj 180 400 lop~;
#X obj 180 460 *~;
#X obj 320 460 *~;
#X obj 250 530 dac~;
#X obj 250 530 dac~ 1;
#X obj 20 290 line~ 0 50;
#X obj 20 330 *~ 0.0055;
#X obj 100 370 *~;
#X obj 350 300 loadbang;
#X obj 350 320 float 10000;
#X obj 350 400 loadbang;
@@ -48,22 +50,23 @@
#X connect 12 0 14 1;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 17 0;
#X connect 15 0 19 0;
#X connect 17 0 18 0;
#X connect 19 0 20 0;
#X connect 18 0 21 0;
#X connect 20 0 21 1;
#X connect 15 0 16 0;
#X connect 15 0 18 0;
#X connect 16 0 17 0;
#X connect 18 0 19 0;
#X connect 17 0 20 0;
#X connect 19 0 20 1;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 14 0 16 0;
#X connect 16 0 24 1;
#X connect 24 0 25 0;
#X connect 14 1 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 23 1;
#X connect 23 0 28 1;
#X connect 28 0 24 0;
#X connect 29 0 30 0;
#X connect 30 0 31 0;
#X connect 31 0 25 1;
#X connect 25 0 26 0;
#X connect 25 0 26 1;
#X connect 30 0 22 1;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 33 0 24 1;
#X connect 24 0 25 0;
+14 -7
View File
@@ -54,7 +54,6 @@ def gen():
r_pitch = Obj(20, 190, "r midi-pitch")
strip = Obj(20, 220, "stripnote")
mtof = Obj(20, 260, "mtof")
env = Obj(20, 290, "env~ 50 200 0.7 400")
osc1 = Obj(140, 260, "osc~")
mul1 = Obj(140, 290, "*~ 0.3")
osc2 = Obj(220, 260, "osc~")
@@ -64,7 +63,13 @@ def gen():
filt = Obj(180, 400, "lop~")
amp = Obj(180, 460, "*~")
panscale = Obj(320, 460, "*~")
dac = Obj(250, 530, "dac~")
dac = Obj(250, 530, "dac~ 1")
# ── Vanilla AR envelope (line~, not cyclone env~) ──
# stripnote out1 = velocity (0-127) on note-on, 0 on note-off
# Scale velocity/127 * 0.7 ≈ velocity * 0.0055 for sustain approx 0.7
env_ramp = Obj(20, 290, "line~ 0 50")
env_scale = Obj(20, 330, "*~ 0.0055")
env_mult = Obj(100, 370, "*~")
connect(c, r_vel, 0, strip, 1)
connect(c, r_pitch, 0, strip, 0)
@@ -78,9 +83,12 @@ def gen():
connect(c, sum, 0, scale, 0)
connect(c, scale, 0, filt, 0)
connect(c, filt, 0, amp, 0)
connect(c, strip, 0, env, 0)
connect(c, env, 0, amp, 1)
connect(c, amp, 0, panscale, 0)
# stripnote out1 (gate: velocity on note-on, 0 on note-off) → line~
connect(c, strip, 1, env_ramp, 0)
connect(c, env_ramp, 0, env_scale, 0)
connect(c, env_scale, 0, env_mult, 0)
connect(c, amp, 0, env_mult, 1)
connect(c, env_mult, 0, panscale, 0)
# ── Controls (headless-safe: loadbang-initialized floats, not hsl) ──
lb_cut = Obj(350, 300, "loadbang")
@@ -95,9 +103,8 @@ def gen():
connect(c, float_vol, 0, div, 0)
connect(c, div, 0, panscale, 1)
# ── Output ──
# ── Output (mono, matches -outchannels 1) ──
connect(c, panscale, 0, dac, 0)
connect(c, panscale, 0, dac, 1)
# ── Write ──
lines = [