Releases Blog Info RSS Soundcloud Facebook Twitter Spotify iTunes Amazon MP3

Midnight, wherever you are.

Disquiet Junto Project 0131: Kettle Development

These are the steps for this week’s project:

Step 1: Record the sound of a tea kettle coming to a boil, preferably a tea kettle that whistles when the boil is achieved.

Step 2: Create a piece of music that originates from the sound of that tea kettle reaching its climax. Employ the sound of the tea kettle in an original composition that can be heard to extend from the field recording of the kettle itself. Start your piece with between five and ten seconds of the unaltered kettle sound.

Step 3: Upload the track to the Disquiet Junto group on SoundCloud, following the directions below.

Deadline: Monday, June 30, 2014, at 11:59pm wherever you are.

Length: The length of your finished work will be between one and two minutes.

My Process: I cheated on this one a lot. In addition to the boiling sound I also used the sound of the flame turning on and the clicking of the stove ignition. Started on this one 90 minutes before the deadline and went over by 30 minutes. Chopped and effected in Renoise.

A Young Person’s Guide To Time Travel

I am proud to announce that my new album is available for free download from BandCamp and the Free Music Archive.

"A Young Person’s Guide To Time Travel" is a 30 minute electronic work based on the classic manual by Bernard Meany (1882 - 1721). Each track is based on a different chapter from the book.

The album was created using Supercollider, Reaper and a Tascam DR-40.

Time Becomes A Loop.

My new album “A Young Person’s Guide To Time Travel” will be released on 7/7/14 as a free download. The album is a 30 minute electronic work based on the classic manual by Bernard Meany (1882 - 1721). Each track is based on a different chapter from the book.


  1. Have You Ever Seen A Portal?
  2. A Brief History Of Time Machines
  3. Your First Wormhole
  4. All You Will Need For Your Journey
  5. How To Recognize a Closed Timelike Curve
  6. Maintaining Personal Continuity
  7. Should You Become Lost

Prior to release the album will be played in two parts by The Lion 90.7 FM WKPS in Pennsylvania. Part one will be 6/29 and part two will be 7/6 during the Altered State program (5 - 8 PM). The broadcast can also be streamed via

Follow @djtimkai and @thelionaltered for more info

Woke up to an early morning rainstorm…

AmbientMachine Test

This is some Supercollider code I wrote to randomly play snippets of a directory full of WAV files. I ran the code of a field recording I took of a parade and these are the results. In the future I will be modifying this code to allow real-time control.

	/* Start user values */
	var path ="C:/test"); //Path to directory of WAV files.
	var debug = 0; // 0 = No debug info, 1 = Post debug info to the post window. May affect performance.
	var fadeTime = 0.3; //Time to fade between samples, 0 is no fade.
	var loopTime = 0.6; //Time to play a sample before switching. If FAILURE IN SERVER messages appear in the post window try to increase this setting.  Use care, you may be able to lock up your machine by setting this too low. On my test machine the lowest I could get with no glitches was 0.1 with debug off and 0.3 with it on.
	var delayAmp = 0.3; // 0 = No delay, 1 = Full delay
	var delayLength = 1; //Delay length, current max is 3. Use care with very small values.
	var delayDecay = 10; //Decay time for delay
	var numSlices = 1280; //sample will be randomly broken into this many pieces to pick where to start playing from. Set to 1 to always start at the begining. The higher the number, the smaller the slices the greater the chance that a slice hits the end of the file
	var amp = 0.5; //master volume.  0.5 is a good starting point.  Reduce it if you get clipping.
	var compThreshold = 0.2;
	var compAmount = 1/90; //compThreshold and compAmount set the values for the compressor.  1/90 amount is equal to 1:90 compression which is a batshit crazy number I put in just because my test field recordings were all over the place.  Feel free to adjust to taste.
	var baseRate = 0.8;
	var randRate = 0.4; //every time a sample is plays a random value between 0 and randRate is picked and added to baseRate.  I picked 0.4 and 0.8 as defaults, this gives you a rate between 0.8 and 1.2.  A rate of 1 is normal playback.
	/* End user values */

	var source, buffers;
	source = path.files.collect{|file| file.fullPath};
	b = buffers = source.collect{|source|, source)};
	p = ProxySpace.push(s);;
	~out = {
		var comp =,, compThreshold, 1, compAmount);
		var comb = * delayAmp, 3, delayLength, delayDecay, 1, comp);
		comb * amp;
		~samples= {
			var buffer = b.choose;
			var sliceSize = buffer.numFrames / numSlices;
			var offset = (sliceSize * numSlices.rand).round;
			var rate = randRate.rand + baseRate;
			if((debug == 1), {
				"Num: ".post;;
				" Rate: ".post;;
				" Frames: ".post;;
				" Offset: ".post;;
				" Channels: ".post;;
				" Sample Rate: ".post;;
				" Path: ".post; buffer.path.postln;
			if(buffer.numChannels == 2,
				{, buffer, rate, 1, offset, 0)},
				{, buffer, rate, 1, offset, 0)!2}