2 minute read

Deadline

Saturday, February 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 conceptually simple:

  • Replace (or extend) the sine wave engine with one of our modulation synthesis cores
  • 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 must use one of the following synthesis types:

  • RM (Ring Modulation)
  • AM (Amplitude Modulation)
  • FM (Frequency Modulation)

The key requirement:

  • The modulation 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.

You should therefore reuse and adapt our previous templates.

You are encouraged to use:

  • <line-
  • <function-
  • <expr random()- or some other random process like we’ve been using in class

to control synthesis parameters in addition to pitch and rhythm: for example, carrier and modulator frequencies, modulation depth, amplitude envelope, etc.

This should not take a large amount of time β€” keep it focused and clear. This is just a β€œproof of concept” patch.


2. Build (or Adapt) a Modulation Voice Abstraction

Inside your <poly~- voice patch:

  • Implement RM, AM, or FM
  • Accept pitch, velocity, and duration from <bach.roll-
  • Use proper gain staging
  • Avoid clipping

Your modulation voice must clearly include:

  • A carrier oscillator
  • A modulator oscillator
  • A controllable modulation index / depth / ratio

3. Dynamic Parameter Control (Important)

In addition to triggering pitch and duration, your system must demonstrate dynamic control over at least one of the following:

  • Carrier frequency behavior
  • Modulator frequency
  • Carrier/modulator ratio
  • Modulation index / depth

You must use at least one of these objects to create motion:

  • <line- (for smooth ramps)
  • <function- (for shaped envelopes)
  • <expr random()- (for stochastic parameter variation)

Static modulation values will not receive full credit.

We are exploring:

  • Modulation as a time-varying system, not a fixed formula.