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