User:Jrowell/220C

From CCRMA Wiki
Revision as of 12:14, 12 June 2012 by Jrowell (Talk | contribs) (Bass)

Jump to: navigation, search

Charles is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car Charlie the Unicorn

Project Overview

The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours).

One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.

Non-Melodic Functions

Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.

Layering

Steady Drums

Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.

Random Drums

Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.

Patterned Drums

Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.

Melodic Functions

The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional

Melody

Harmony

5/1- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator. The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.

Bass

Chord Progression

The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.

Key Change

Instrumental Piece

Log Updates

4/24

-basic architecture coded

-drum sounds added

-mood control variable implemented

4/30

Excerpt from running of program on 5/1

-melodic controls added

-basic instrument types added

5/1

- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator. The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.

6/12

"Final" version of program

Demo of program playing