String Model + bach Integration
Deadline
Saturday, Feburary 21, 2026, at 11:59 PM
Overview
Last week, we used:
<bach.roll-for event generation<poly~-for polyphony- a simple sine wave engine inside a
<poly~-voice abstraction
For this brief assignment, your task is very simple, conceptually:
- Replace (or extend) the sine wave engine with a string synthesis model
- and drive it using
<bach.roll-through<poly~-. - Create your own notes, chords, or other events inside
<bach.roll-to drive your new synth. - Make a simple patch that does this and be prepared to share this in our next class.
You may use:
- Karplus–Strong
- Allpass string model
- Or some hybrid of both
The key requirement:
- The string synthesizer must be controlled by
<bach.roll- - and instantiated using
<poly~-inside our scaffold patch structure.
What To Do
1. Use the Scaffold Structure
You must work inside:
_scaffold.v01.maxpat(or your updated scaffold)- Your own
<poly~-abstraction for voices - Your own
<bach.roll-object for event sequencing
This assignment is about integration, not inventing something totally from scratch, so you should recycle our previous templates and combine things.
You can also use <line- and <function- to control synthesis parameters in addition to pitch and rhythm.
It shouldn’t occupy much of your time to do this.
2. Build (or Adapt) a String Voice Abstraction
Inside your <poly~- voice patch:
- Implement a Karplus–Strong or allpass string model
- Accept pitch, velocity, and duration from
<bach.roll- - Use proper gain staging
- Avoid clipping
Your string voice must respond correctly to:
- note-on
- note-off (or duration-based decay)
- velocity scaling