Projects
My interests include computer-aided composition, intefaand video gaming. I am particularly interested in real-time composition, which involves the use of algorithmic composition systems in a live context. Two pioneers in this exciting area are Eno and Essl.
Due the highly dynamic nature of real-time algorithmic composition, there is a need for more sophisticated levels of interaction between the composer and the real-time system. I am currently investigating alternative controllers and interfaces for the purposes of real-time composition, in an effort to move away from the computer mouse and keyboard.
Recently I've started teaching a short course in game design at Pulse College. Students are introduced to concepts like programming, animation, sound design and 3D art. Some resources I created for this course are available here.
ReacTacT - A Real-time Algorithmic Composition Toolkit
The ReacTacT software system is a set of Max / MSP patches, externals and scripts for real-time algorithmic composition using the ReacTable. The ReacTable Tangible User Interface is an alternative controller for synthesizers that uses computer vision technology to track physical markers on a table surface. Using the open-source reacTIVision computer vision component provided by the ReacTable team, the TUIO protocol data it provides is used to manipulate a number of compositional algorithms. At present these algorithms consist of probability tables (i.e. Xenakis), grammatical evolution and a simple tone row generator to create serial music.
This software system, along with a protype ReacTable system, was premiered at the Samuel Beckett Theatre in June 2009. For more on that visit here. A video of this performance will also be available shortly. For this performance, I also created a simple visual system for back projection onto the table itself or as a live visual projection for the audience. This visual system was created using Processing 1.0. The screenshot below shows an example of some of the visuals generated.
Audio examples created with the ReacTacT system, along with some graphical scores, are available on the music page. The processing code and the ReacTacT v0.1 release are available below for download : -
ReacTacT v0.1 Release - reactact_v0.1.zip
ReacTacT Processing Code - reactact_processing.zip
TUIO Processing Code (doesn't need max) - processing_tuio.zip *New*
Gamepad Interaction
Xbox Gamepad Drum Machine
This is some code I knocked together that implements a drum machine controlled by an Xbox gamepad. It consists of a sampler written in Pure Data (PD) and a sequencer built in Processing 1.0. Additionally, if you have an Arduino microprocessor board handy, you can wire up some LEDs in order to get some cool flashy step sequence feedback. You may need to uncomment some of the code to get this to work, it's disabled by default. Here's a video of it in action:-
Xbox Rock Band Drum Kit to MIDI
There's a few tutorials knocking around on the web that explain how to hook up the rock band drum kit to a computer in order to control MIDI devices. (Arstechnica Tutorial). Most of these methods involve purchasing some software such as the Gamepad companion in order to map the data to MIDI. With Max / MSP this can be carried out easily using the HI object. I hope to add a video, some audio examples and maybe a PD version soon, in the meantime heres a Max patch : -
Games
Pong
This Pong example is created in Processing and is useful for demonstrating simple animation, physics and A.I.
Go here to play it online or view the source code!
Breakout

Breakout Game - Windows Binary
Breakout Game - Visual C# Project
Test Tone Tools
Simple Testtone VST
A simple VST test tone oscillator, with controls for adjusting frequency and gain. This is not optimized and does not use a wavetable, so don't use it for synthesis.
Testtone VST
Source Code - Xcode Project
Random Beep Generator
This command-line tool renders a 10 second WAV with random beeps - instant R2D2! It uses libsndfile, so make sure you download and include it if you're building. Here's a sample output: