noise study – structure

In James Tenney’s “Computer Music Experiences” article, he presents the following chart:

CME Fig 3.tifFrom this we can see 3 parameters, “note duration”, “intensity” and “bandwidth”. The subsequent values “mean pitch level” and “pitch range” are determined from the “bandwidth” profile. The charts that Tenney gives for “mean pitch levels” and “pitch range” don’t seem terribly useful at first glance (pitch level of “1” and pitch range of “5”?). However, looking at Matthew’s Music III paper, I see that pitch is specified in octaves, so that Middle C is 3.0. It looks very much like all of the 5 voices started with a mean of C1, C2, C3, C4 and C5. What isn’t completely clear is whether the center of the note varied, or if the bandwidth simply was controlled by the noise intensity alone. The intensity is certainly using the Music III CVT01 function, which used decibels. CVT01 = 10^P3/20.0, which means the amplitudes vary from 1.0 (0) to 501 (54).

In the instrument, there is a noise frequency and amplitude input, each of which can vary or remain constant. There is also the oscillator frequency input, which can also vary (by linear change) or remain constant. Tenney mentions that “for center frequency, the toss of a coin was used to determine whether the initial and final values for a given note were to be the same or different”. From listening to the piece, it seems that the other parameters (noise frequency and amplitude) were generated in a similar fashion.


analog #1 – noise study – rand, randx, randi – notes

I have been looking at James Tenney’s documentation for Analog #1 – Noise Study in “Computer Music Experiences 1961-1964.” I am hoping to recreate the instrument that Tenney used in this piece. As it was completed in 1961, the software he used was probably closer to Music III than it was to Music IV, though it seems he describes the instrument in Music IV terms.

In the “CME” document Tenney shows a unit generator (“U5”) called RANDI with two inlets, with the left controlling amplitude and the right controlling frequency or period. RANDI is a interpolating random number generator, that generates numbers at an audio rate. This is probably the same unit generator that is called RAND in Max Mathews’ article “An Acoustic Compiler for Music and Psychological Stimuli”. In Tenney’s 1963 article “Sound-Generation by means of a Digital Computer” he describes a RAND and a RANDX. RAND is the interpolating random generator, and RANDX holds the random value. In the “Music IV Programmer’s Manual”, the two functions are RANDI and RANDH (interpolation and hold).

There are two parameters for all of these unit generators. The left input is the limit of the random number generation or amplitude. The right inlet is described as a bandwidth control in the Music III document, where bandwidth = sample-rate/2 x right-inlet/512. If this inlet varies from 0 to 512, the bandwidth would vary from 0 to the nyquist rate. It is also described in the Music IV manual as a control of the rate of random number generation, where a new random number is generated every 512/right-inlet samples. This is pretty consistent through-out all of the documents, with one exception in Tenney’s 1963 article (figure 13) where he implies that the right inlet I controls period (period is 512/I).

So to emulate RAND/RANDI, I need to have two inlets – one which determines amplitude (I1), and the other which determines frequency (I2), where frequency is in a linear scale from 0 to 512, and 512 corresponds to a new random number generated every sample. Looking at James Tenney’s various example patches, with continuous envelopes sent into the inlets, it seems likely that floating point numbers were used for both of these inlets.

This untested code will generate a new random number that goes from i1 to -i1 every 512/i2 samples. This is what is implied by the Music III and IV documentation, but I can’t be sure of the method of random number generation. Also, like the originals, this is sample rate dependent. It will only act like the original code if run at a sample rate of 10,000 Hz.

 static t_int *randi_perform(t_int *w)
 t_randi *x = (t_randi *)(w[1]);
 t_float *freq = (t_float *)(w[2]);
 t_float *out = (t_float *)(w[3]);
 int n = (int)(w[4]);
 int blocksize = n;
 int i, sample = 0;
 float phaseincrement;
 float findex;
 int iindex;
 while (n--)
 // first we need to calculate the phase increment from the frequency
// and sample rate - this is the number of cycles per sample
 // freq = cyc/sec, sr = samp/sec, phaseinc = cyc/samp = freq/sr
if(*(freq+sample) != 0.0f)
 phaseincrement = *(freq+sample)/x->samplerate;
 phaseincrement = x->x_f/x->samplerate;
 // now, increment the phase and make sure it doesn't go over 1.0
 x->phase += phaseincrement;
 while(x->phase >= 1.0f)
 x->phase -= 1.0f;
 x->previous = x->current;
 x->current = random();
 x->current = (x->current/1073741824.0f) - 1.0f;
while(x->phase < 0.0f)
 x->phase += 1.0f;
 x->previous = x->current;
 x->current = random();
 x->current = (x->current/1073741824.0f) - 1.0f;
*(out+sample) = x->previous + x->phase * (x->current - x->previous);
 return (w+5);

My next step is to build this into a PD external and test in a patch similar to what is used in Tenney’s “Noise Study”.

Update – 11/12/14

I have implemented the noise generator above, and have inserted it into a PD patch (I have edited the real code into this article). The results sound very much like Noise Study. Here is a single voice

Screen Shot 2014-11-12 at 12.42.10 PM

Now to determine the overall structure.


reverb in PD

i’m working on a number of classic reverbs in PD (so i can show them in class this quarter). first up is the Jon Dattorro plate reverb. please send me comments and corrections if you find any errors. thanks….

2013-02-06 update

found a mistake in all of my allpass filters. this is now corrected and the dattorro plate sounds much much better. gain can also now go up to 1.0 for infinite reverb. i replaced the archive above with the update, so please download again.

fwiw – i also implemented the schroeder and moorer reverbs… my interpretation of moorer’s filtered combs may be a bit off, and i inverted the all pass and combs in the schroeder so that i could do a stereo output.


Williams Mix Debut

On September 5th, 2010, I debuted my version of John Cage’s Williams Mix at Space4Art in San Diego as part of Bonnie Wright’s Fresh Sound series. This was part of a concert which also featured J Lesser, Negitvwobblyland & Dieter Mobius. I played first, but there were many latecomers, so I played a second time after intermission (and John Cage birthday cake). Everything worked out beautifully, both performances were very satisfying. The reviewer from the SD Reader had the following to say:

Williams Mix is a masterpiece of kaleidoscopic sonic assault — especially as played through the massive sound system assembled for the event. At times, it seemed that the piece was mimicking a short-wave radio scanning all of the channels available in Hell, with an epileptic hand manning the dial.

Fusillades of white and pink noise came shooting at the audience from all directions, while fragments of speech, acoustic instruments and ambient sound of all variety wrapped around the brain in the process.

In a very real sense – everything that followed – and some very brilliant things did follow – suffered in comparison. Measuring up to Cage – even something he composed in 1952, is no easy task.”

I completed Williams Mix only a few days before the concert. It took me from January to early August to measure all of the events on the 192 page score. After that I wrote software in Pure Data to perform the score, and started collecting the 500-600 sounds required to perform the piece. I collected about 100 sounds myself, the following musicians, artists and friends contributed from their sound collections: Cooper Baker, Bobby Bray, Clay Chaplin, Kent Clelland, Greg Davis, Greg Dixon, Tom Djil, Sam Dunscombe, Jeff Kaiser, Scot Gresham Lancaster, J Lesser, Elainie Lillios, Carl Stone, Stephan Mathieu, Rick Nance, Maggi Payne, Michael Trigilio, Doug Van Nort.

I will be playing Williams Mix again at UC San Diego on the November 5th Palimpsest concert, and will also be giving a short talk and performance at UC Santa Cruz on October 15th.

Williams Mix

My current project is creating a new performance version of Williams Mix. I have received the score from the John Cage Trust and am measuring and noting all of the tape edits from the original 192 page score. This detailed information will be used to create a computer music program or patch with which I can perform the piece. I do not think anyone has taken this approach yet.

Soon I will be putting out a call for sound file  contributions to this version. I will try to cast my net wide, as Cage’s original note calls for “all acoustic phenomena”. However, if I miss you and you would like to contribute to this project, please get in touch.