Week 8: Performance Models

click here for assignments from this class.

Ok, we did several things in class. What follows are the example scorefiles we did, along with (soon to come! links to mp3-format soundfiles. If you want more information about RTcmix, mp3-decoders/players, etc. check out the resources page for this class.

strumming a virtual guitar...

Anyhow, one the first things we did was to check out the Karplus-Strong algorithm using the RTcmix instrument STRUM. We used the following scorefile to generate a single note:

NOTE: You can recreate this sound by cutting the above text, pasting it into a file on a system with RTcmix loaded, and then saving the file -- perhaps you called it "test1.sco" -- and running the command STRUM < test1.sco and hearing the output. You can save the output into a soundfile by placing a line:
into the scorefile after the rtsetparams() line.

We then went on to test the "squish" parameter using a simple algorithmic procedure in the following scorefile:

After this, we tried generating a single strummed chord by loading note values into a "makegen()" array and looping through the values one at a time, keeping the start time constant so that the notes would be vertically-stacked on top of each other: Noting that the chord sounded rather artificial, we tried staggering the entrance of each note to reflect the amount of time that it takes a real performer to hit strings on a Real Live strummed instrument. We added 0.02 seconds between each note of the strummed chord (the "start = start + 0.02" line in the score below): Noting that the addition of exactly 0.02 seconds after each string gets "strummed" sound rather artificial, we added a randomizing factor in an attempt to capture the fundamental randomness of human existence: After futzing with the parameters to come up with an ok-sounding amount of randomness, we finally produced the following scorefile, which includes a down-strum followed by an up-strum through the same chord: One thing we didn't do was to fool with the "fundamental decay" and the "Nyquist decay" parameters at all to model the timbral difference between an up-stroke and a down-stroke caused by differing pick positions, force against the strings, pick angle, etc. It Can Be Done, though!

Fake Burundi Drums!

Next we tried to model the whomping sounds of the Warrior Drums of Burundi. To do this, I pounded on a chair and used magical close-miking techniques to reproduce a nice, fakey-burundi-drum sound.

NOTE: For a discussion of how to record sounds in one of our studios (room 324), see Luke Dubois' tutorial on doing this.

After capturing the sound in the soundeditor program and saving it to a soundfile (called "bmono.snd" in the scorefile examples below), we then used the soundeditor program to find the starting times of each of the recorded hits. The times for the down-hits were (Chris thought they sounded like up-hits!):

and the times for the up-hits were: Next we loaded them into "makegen()" arrays and simply cycled through all the recorded hits using the RTcmix STEREO command:
Quick questions: Why did we use makegen(4,...) and makegen(5,...) to store our values, and not makegen(1,...)? Why did we use two separate makegen()s?

Next we created a scorefile that generated a single hit of a group of "burundi drummers" -- this was why we recorded a whole set of different hits; so that we would have a range of similar-yet-different drum-hit sounds to draw upon. The following scorefile sets up 5 "burundi drummers":

Then we added both down-hits and up-hits, eventually randomizing the stereo output parameter and the timing between the two hits. Our ears are amazingly sensitive to small regularities in timing!: Finally, as an exercise we added a ritardando to the entire algorithmic procedure: And that was the end!


1. Take the burundi drums and modify the score to get a different type of beat-pattern. Then do this 'dynamically', so that one beat-pattern morphs into another.

2. Find some other plucked-string strumming style and try to model it.

3. One of the most annoying aspects of the Burundi drum exercise is going through to find the start times of each digitized drum-hit 'by-hand' -- how could you automate this?