thanks everyone for the comments. Compositionally, these really aren't that fantastic, and I am aware of this. These are more experiments in the chuck language. I'll explain a little about whats going on with chuck.
ChucK is a programming language. ChucK => Strongly-timed, On-the-fly Audio Programming Language check out the examples on that page to see a little what the code looks like...
the language includes things like Oscillators (sine, tri, saw etc.) Envelope Generators, Effects (reverb, chorus, filters etc.) and several synth instruments (of varying quality.. things like flute, plucked string, moog etc.). The language has the ability to read in .wav files from the computer and play them either from memory, or from the HD.
The language supports re-usable classes and functions (that is, you can code some sort of 'instrument' and it can be copy and pasteable from program to program.)
The language is "strongly timed" which means that everything must be set to run in a certain time frame, or it won't run at all. This means that it is VERY easy to get things running together in sync (something which is not so easy in PureData.. which i have also used.)
Ok.. a bit about how I created this stuff. A very important symbol in this language is called "the chuck" and looks like this =>. The most basic program is something like this:
SinOsc s => dac; day => now;[/CODE]
There is a Sine Oscillator (called 's') which is 'chucked' to the dac (digital audio convertor) and then "day => now" which simply means to make time pass. in this case, this sinewave would play at 220 hz (the default) for exactly one day and then the program would shut down. There are many different durations that one can use: week, day, hour, minute, second, millisecond, and sample.
To make the sound change you edit some parameter by chucking the new value to it. we called the sinosc "s" so its frequency parameter would be "s.freq" if we wanted for this sinewave to play at 440, we would add a line of code that says " 440 => s.freq;"
[CODE] SinOsc s => dac; 440 => s.freq; 2::second => now; 220 => s.freq; 2::second => now; 440 => s.freq; 2::second => now; 220 => s.freq; 2::second => now; [/CODE]
in this program, the sinewave switches back and forth between 440 and 220, playing each for 2 seconds.
The language includes a midi to freq converter, so most of the time i code using midi numbers. These pieces all have some sort of random melody or harmony in them which is done by creating an array of midi notes, and then having the program pick randomly from that array, converting that from midi to freq, and then chucking the resulting note to the Oscilator's .freq parameter. I code this into a loop so that the note changes constantly through the whole piece.
The beats that are used are external .WAV samples. there is a parameter to ( .rate ) that changes the rate of playback, so i use a mathmatical operation to match the beat to the tempo of the song (or in one example, i matched the tempo of the song to the beat...) There is also a parameter ( .pos ) which is used to tell from where in the file to begin playback (in samples). When the file is read into memory, you can get the number of samples in the file. I divided this number by 8 or 16 or something (for a 4/4 bar) and use the resulting number to 'slice' the beat, by playing back the 8 or 16 slices in a different order (usually random.. :) )
...
does that answere most of the questions you might have?? please feel free to ask questions about the process or the language.
cody