The object of this assignemnt is to learn to use a qlist object to control a polyphonic synthesis algorithm; the algorithm should be FM in the sense of the first assignment (i.e., using tabread4~; you get to specify your wavetables either as a sum of partials or by drawing them.) You can use the solution to assignment 1 as a starting point if you wish.
to get polyphonc synthesis, you should make an abstraction that carries out one voice of synthesis. Don't put the tables in teh abstraction (since then you'll get them multiply defined). You probably will want to fix the abstractions so that you can select which of several tables to use (using the "set" messages to tabread4~.)
Then prepare a separate text file to hold the sequence (that qlist reads.) The easiest thing to do will be to put number box controls in the abstraction, find some nice sounds, then copy the parameters you found into the qlist in a sequence.
The only dodgy thing is figuring out how to organize two or more voices so that they sound interesting together. Here are some possibilities:
1. make a bank of slightly detuned ones and experiment with beat patterns;
2. make a sequence of pitches (a staircase-like pitch table) and make two of them play at different speeds so that they "phase";
3. make two voices and move them in proto-counterpoint by having one of them play through a sequence of changes while the other stays still, then reversing the roles of the two. Make them occupy distinct pitch ranges so that you ear can separate the two tracks.
4. Just explore the really ratty sounds you can get out of the patch.
As always, make a "readme" somewhere in the patch (using a subpatch if necessary) explaining how to turn the patch on and use it. Since your project wwill require at least three files, make a sub-folder of the drop folder to put tthem in.