PAT 204/504: Creative Coding (Fall 2025)
Due at 11:59pm ET on November 14
In this assignment, you will be implementing a polyphonic FM synthesizer. In class, we talked about FM synthesizer and polyphonic synthesizer, and you will combine the two concepts in this assignment. Your synthesizer should do the followings:
poly~ objectkey and keyup objectsnotein objectkslider objectpreset object to store at least two tones that you likePlease submit both your Max patch and the video recording. You will receive zero credit if the code is missing. Please record something using your synthesizer with two different tones you like, and please play a chord to show that the polyphony works. Zoom can be a good option for recording.
It’s tricky to use presets in subpatches of a poly~ object as the poly object will create multiple instances of the subpatch specified. As a result, when you select a preset in one instance of the subpatch, the presets won’t be propagated to other instances. One way to select a preset for all the instances is to handle preset selection in the main patch and send the selected preset index to all the subpatches as an additional input.
To do this, we can create a umenu button in the main patch for the user to select a preset. We can then pack the preset index together with the pitch and velocity information, and send the packed message to the poly~ object. (Note that we need to add one to the umenu output as umenu is 0-based whereas preset is 1-based.)

Now, in the subpatch, we can then unpack the preset index from the input and use it to select the corresponding preset:
