Music 270C: Compositional Algorithms
Spring quarter 2006. University of California, San Diego
http://crca.ucsd.edu/~msp/syllabi/270c.06s/

Meeting time and place have yet to be determined, but WE WILL NOT MEET AS ADVERTISED MONDAY IN MANDEVILLE 127. Please contact me if you haven't received my poll for available times.
Instructor: Professor Miller Puckette , CALIT2, 858-534-4823, msp@ucsd.edu, http://crca.ucsd.edu/~msp/

The course is organized along ten general topics as follows:

• arithmetic and number theoretic algorithms
• stochastic processes 1: Markov chains and random walks
• stochastic processes 2: modeling deterministic sequences
• stochastic processes 3: continuous-time processes
• combinatorial optimization and constraint problems
• fractals, strange attractors, and L-systems
• linguistic parsers and generators
• applications 1: harmony
• applications 2: rhythm
• applications 3: improvisation
There will be nine programming assignments over the ten weeks of the course; the first one will be due April 10, 11, or 12, depending on when we can meet:

Here are the class patches as of April 27 as compressed tar and zip formats. Or indeed, here's everything .

ASSIGNMENT 1. Make a computer generate repeating sequences like this one:

[0 5 10 2 7 12 4 9 1 6 11 3 8]
whose rule is, "add 5 and, if the result is at least 13, subtract 13." If you know a way to do it, represent this in music notation (start at middle C for instance) or in any graphical notation, or synthesize it as sound. Use whatever computer programming environment (Max/Pd/SC? Open Music? C? Basic?) you prefer. You can either bring it on a computer or print out whatever program you ended up with, or just e-mail me the program if it can be represented in plain text. Here is a sample output in music notation:

and here in a crude graphical notation:

ASSIGNMENT 2 (due Thursday, Apr. 20): Make a program (in Pd, Max, C, or whatever) to generate the series [1 2 3 4 5 6 ...], multiply by the golden ratio (about 1.61803), and take the integer part. Sample output:

[1 3 4 6 8 9 11 12 14 16 17 19 21]
(by the way, I'm using square brackets "[]" just to indicate a sequence of numbers). An alternative representation of the sequence is to report differences between successive numbers:
[2 1 2 2 1 2 1 2 2 1 2 2 1]
and a third representation is to report, for each positive integer [1, 2, ...] a "1" if it appears in the sequence and a "0" if it doesn't:
[1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1]

ASSIGNMENT 3 (due Thursday, Apr. 27): Make a program that outputs a sequence of 1s and 0s, in which the density of 1s steadily decreases from 1 (always) to 0 (never). For instance:

[1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0
1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
ASSIGNMENT 4 (due Thursday, May 4): Generate a random-walk solo over a 12-bar blues chord progression. A possible way to proceed would be to make a simple random walk and then quantize it down to a scale that changes with the chord. If you don't like the 12-bar blues, make up your own chord progression or perhaps generate one with a Markov chain.

Here is my own feeble attempt ( Wav, 2.5M ); ( mp3, 600K ). The bass and the 'solo' are both random walks, each with its own rhythm and scales.