Idea (tabled)
The headless render loads a patch and lets it free-run for 10s with no external input. So it only captures self-playing patches (free-running oscillators, drones, self-clocked/generative). Patches that are instruments waiting to be played — gated behind a MIDI keyboard, a stopped sequencer/clock, or a trigger/strike input — emit silence.
Empirically, of the 228 successfully-rendered patches, 137 self-play and 91 are silent (89 of those are literal digital zero). The silent ones skew more complex (median 29 vs 20 modules) and more often contain MIDI-input modules (32% vs 13%). See data/output/patch_playability.json for the split.
Proposed enhancement
Wake up "playable" patches during render by injecting stimulus the same way render_patch.inject_recorder injects the Recorder + gate LFO:
- Inject a running master clock (pulse/square) and drive common clock inputs (sequencers, clock-divider modules, transport
run params).
- Inject a gate/trigger into trigger-mode voices (drums, Plaits strike, resonator excitation) and envelope gate inputs.
- Possibly flip
run/play params to on where present.
Why it's a mini-project, not a tweak
"Find the clock/gate input" is patch- and module-specific across hundreds of different sequencer/clock/trigger modules (different plugins, different port indices, different conventions). Needs a per-module map of clock/gate input ports (similar to the hand-verified PORT_MAPS), plus heuristics for which inputs to drive. Non-trivial and easy to get wrong (driving the wrong input = garbage or no change).
Value
Would substantially raise the sounding-render yield beyond the ~60% self-playing fraction, unlocking acoustic ground truth for the large class of sequenced/played patches — the more musically interesting ones.
Tabled for a future session. For now we focus on the self-playing set (patch_playability.json → self_playing).
Idea (tabled)
The headless render loads a patch and lets it free-run for 10s with no external input. So it only captures self-playing patches (free-running oscillators, drones, self-clocked/generative). Patches that are instruments waiting to be played — gated behind a MIDI keyboard, a stopped sequencer/clock, or a trigger/strike input — emit silence.
Empirically, of the 228 successfully-rendered patches, 137 self-play and 91 are silent (89 of those are literal digital zero). The silent ones skew more complex (median 29 vs 20 modules) and more often contain MIDI-input modules (32% vs 13%). See
data/output/patch_playability.jsonfor the split.Proposed enhancement
Wake up "playable" patches during render by injecting stimulus the same way
render_patch.inject_recorderinjects the Recorder + gate LFO:runparams).run/playparams to on where present.Why it's a mini-project, not a tweak
"Find the clock/gate input" is patch- and module-specific across hundreds of different sequencer/clock/trigger modules (different plugins, different port indices, different conventions). Needs a per-module map of clock/gate input ports (similar to the hand-verified
PORT_MAPS), plus heuristics for which inputs to drive. Non-trivial and easy to get wrong (driving the wrong input = garbage or no change).Value
Would substantially raise the sounding-render yield beyond the ~60% self-playing fraction, unlocking acoustic ground truth for the large class of sequenced/played patches — the more musically interesting ones.
Tabled for a future session. For now we focus on the self-playing set (
patch_playability.json→self_playing).