Music 171 assignment 5 (due Feb. 23): polyphonic instrument

Assignment 5

This assignment is intended to give you practice making polyphonic instruments using abstractions as voices and distributing messages to them. The assignment is to make a patch that loads at least eight copies of an abstraction that simply plays a note, using a sinusoidal oscillator with a "line~" amplitude control. A stream of messages should specify the pitch of each note to play as a MIDI number. In one way or another (send/receive? inlets?, etc.) distribute them among the copies of "voice.pd". The outputs can be summed using throw~ and catch~ or alternatively by putting an outlet in the abstraction and summing explicitly in the containing patch.

Inside the abstraction the amplitude should be controlled by a "line~". (In the sound example I squared the output for a better decay shape). You could make the rise time 10 milliseconds, and the decay time 1 second. As usual you'll have to start the decay after a delay to allow the rise segment to complete, or else it will cancel the attack.

You can give the abstraction a signal outlet (the "outlet~" object) and just add all the outputs up. Somewhat better style might be to make a "summing bus", as is done in the online documentation examples.

To generate the notes, outside the abstraction (in the "main" patch), use a "metro" to send "bang" messages to a random number generator and add an offset. This will make a stream of suitable MIDI pitches you can send to the polyphonic patch.

There should be separate controls to set:

The result should sound something like this.

For extra credit, make the notes appear randomly out of the left and right speaker. The result should sound like this.