Music 171 homework 4
This homework assignment is designed to give you practice making
a voice bank using abstractions. The assignment is to make a
4-voice polyphonic synthesizer. To keep things simple, the "voices"
can just be sinusoids with amplitudes controlled with line~
objects. The synthesizer should play "notes" passed as messages; in
this case, the patch should generate notes from a probability
distribution (another technique we haven't used yet).
Your successful patch should be able to make sounds like
this.
To make the patch (each of the following steps is worth 2 points
for a total of 10):
- Make two patches, a main patch and an abstraction that you
could call, for instance, "voice.pd". Put these in a new folder
with a unique name (name it for yourself for instance). To upload
the assignment, you'll make a zip archive of the folder with the
two files in it; this is the way you should upload assignments from
now on.
- Inside the "voice" abstraction, make a patch that multiplies an
oscillator (with a controllable pitch in MIDI units) by a line~.
There should be an input for messages to play a note (which should
contain at least the pitch to play). There should be an output for
the audio signal. These can both be managed via inlets and outlets.
The most sophisticated way to manage the audio output is to have
both a signal inlet and outlet, so that you can daisy-chain the
copies, each adding itself to the sum of all the previous
ones.
- Inside your main patch, using "metro" and "array random"
objects, create a random stream of pitches, preferably somewhere
between 60 and 120 (so that the sinusoidal sounds made by "voice"
sound reasonably good.) You can use "+" to add an offset such as 60
to the output of "array random". You can invent your own collection
of pitches to put in the array or just use mine (0 5 7 10 12 15 16
19 22 26). NOTE: don't just put those values in the array; put "1"
at those locations and leave the rest at "0".)
- Place 4 or more copies of the abstraction inside your main
patch, and make a counter (ranging from 0 to 3, for instance) to
choose which copy of the abstraction to send the message to. You'll
have to pack the counter output with the pitch you computed
earlier, and "route" to then route the messages to one of the 4 (or
more) abstraction copies.
- After summing the signal outputs from the abstractions, make an
overall amplitude control to turn the patch output on and off.
There should also be controls to turn the "metro" object on and
off, and a control for its speed (controlled by changing the
"metro" time in milliseconds). When you load the patch, it should
start making sound once the amplitude control and the "metro" are
turned on.
back to music 171 main page