Music 171 homework 6
This homework is designed to give you practice with voice management,
parameters, and also to introduce ring modulation as a spectral manipulation
tool (shown in class Feb. 11).
The assignment is to build another polyphonic synthesizer. This one should
take messages with at least three independently controllable parameters (pitch,
index of modulation for waveshaping, and a ring modulation frequency as a
factor to multiply by the frequency of the waveshaped tone). Each voice should
consist of an oscillator with a waveshaper with a variable index of modulation
(fine just to use cos~ as the waveshape, but if you do, remember to correct for
the fact that this doubles the fundamental frequency) . This should be passed
to a ring modulator (that is, multiplied by a sinusoid) whose frequency is set
to a controllable multiple of the fundamental frequency.
Using a metronome and the usual techniques, make random selections between
more than one pitch (I'm using 51, 53, and 60), at least two indices of
modulation, and at least two choices of the multiple to use for the ring
modulator oscillator.
Your successful patch should be able to make sounds like
this. (But you're encouraged to find your own
sets of pitches and other parameters).
To make the patch (with the usual grading):
- Once again you'll need to make a zip archive with two patches, one that
is an abstraction to generate a single voice, and one as the main patch that
calls several copies of the abstraction. In this instance, all the parameters
used by the abstraction should be sent via messages since they all vary from
note to note. A good demonstration of how to manage the voice bank is given
in the Pd documentation, D11.sampler.poly.pd (except that you won't need to
worry about the "poly" object; a simple counter will do fine here).
- The abstraction should take incoming messages with at least three arguments
(pitch, index of modulation for waveshaping, and ring-modulation frequency
multiple). It should unpack these and send them to the appropriate tilde
objects, and also, when a message is generated, should trigger a simple AD
envelope generator so that the note starts and then decays with a message is
received. The overall signal processing network inside the abstraction should
be an oscillator, a waveshaping step, a ring modulation step, and finally
amplitude control.
- Outside the patch, use a "metro" object to make a repeating series of
bangs, and use the output to generate four things: a voice number (using a
counter), a pitch, index of modulation, and ring modulator frequency as a
multiple of fundamental frequency. (These can be chosen randomly from a set
of possible values; you can just use
message boxes to hold the desired pitches and a "random" object to choose which
one; or you can get fancy and assign different probabilities for each. In my
example, I made "60" the most common, and "53 and "51" rarer.)
- You can either repeat the above to generate independently random values for
the index and the ring modulation frequency control, or else you can make a
larger collection of packed messages (adding two more parameters to each of the
pitch messages). I did the latter, but with several different possible
parameter choices for
each of the three possible pitches.
- Pack these into messages containing the voice number and all the
parameters, and connect via a "route" object so that each message goes to the
appropriate copy of the abstraction. The finished patch should have an output
amplitude control and an on/off toggle for the metronome.
back to music 171 main page