Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Fixed sustain levels erase velocity dynamics, while Stagger changes attack and scoop duration rather than delaying player entry.
Review effort: Balanced
Findings: 5
Open (5)
What changed in this PR
Adds two four-player ensemble instruments using osc::blep, deterministic drift, vibrato, and stereo seating.
Changes:
- Adds a resonant violin-section graph.
- Adds a velocity-sensitive horn-section graph with pitch scoops.
| File | Description |
|---|---|
dsp/violins.dsp |
Defines the four-player violin ensemble. |
dsp/horns.dsp |
Defines the four-player horn ensemble. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Addressed in 055387b: sustain now scales with velocity, and |
Each player is its own osc::blep with its own detune, drift, vibrato rate and entry time, panned to a seat across the stereo field. The violins share a body resonance at 290 Hz and 2.8 kHz; each horn scoops up into the note and brightens with velocity.
Sustain scales with velocity, so a soft note does not swell up to the sustain level. Stagger is an entry: each player's attack, filter and scoop wait on a gate a timer envelope opens Stagger times its share after the key, rather than the attack being stretched and the scoop lengthened. Needs env::adsr to wait for a wired trigger (#337); until then every player enters with the first.
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The staggered gates rely on the behavioral changes in unmerged PR #337.
Review effort: Balanced
Findings: None

Item 6 of the instrument list: ensembles. Stacked on #333, since both graphs use
osc::blep.strings.dspandsection.dspwiden one voice with a chorus. These are four discrete players per note, each with its own:detune (
Detune) and slow wander (Drift, seeded from the note so pieces replay exactly)vibrato rate, coming in after
Vibrato Delayentry time (
Stagger)seat across the stereo field (
Width)dsp/violins.dsp: saw players through a note-tracking tone filter that opens with velocity. A violin-body resonance (290 Hz and 2.8 kHz,Body) is applied once per side of the summed section.dsp/horns.dsp: each player scoops up fromScoopcents flat overScoop Time, with a filter that opens with its own envelope byBite× velocity. The cutoff is a multiple of the note, so the timbre holds up the range.Testing
ctest -R "dsp|fx|catalog|gencheck|nodes": 18/18 pass.