JamDeck is an organic music production sketchpad that I designed and programmed to bridge the gap between making music with increasingly technical digital audio workstations and the immediacy of jamming with physical instruments like a guitar.
The software is an environment where producers and songwritings can instantly focus on making music (just like with a real instrument), but also be able to construct songs quicker by layering different melodies using a live looper. Additionally, the layers in each jam are captured as MIDI for easy export into digital audio workstations for further production.
JamDeck included the development of a new sampler engine, integration of SodaSynth, and creating a cutting edge hybrid C++ application architecture. This future-proof architecture eases porting to new platforms and greatly accelerates user interface design.
JamDeck was released in October 2012 and is available for Windows, Mac OS X, and Google Native Client (Chrome).
SodaSynth is a virtual synthesizer instrument created by Adam Davison and I that morphs distributions of oscillators to create interesting sounds. These synthesis parameters are controllable by the user, and combined with an additional bass mode synthesis technique. Waveform controls, a waveshaper, and an ADSR envelope round out the synthesis engine to create pristine sounds that morph in natural sounding ways.
Building on our cross-platform development experience from Mixxx, we simultaneously released SodaSynth for Windows, Mac OS X, WebOS, and Google Native Client. SodaSynth for Chrome was the world's first real Google Native Client application, allowing musicians to immediately play with SodaSynth in their web browser, without any downloads.
The SodaSynth VST and AU plugin for Windows and Mac OS X is available today on the official website.
Read more about SodaSynth at Create Digital Music.
Mixxx is free, open source DJ software that provides everything a DJ would need to replace turntables and a mixer, and a whole lot more. It's available for Windows, Mac OS X, and Linux, and is now downloaded more than a million times annually.
In 2006, Adam Davison and I started writing code for Mixxx and ended up inheriting leadership from Tue Andersen shortly thereafter. Initially, I was interested in producing a free vinyl control system, but I knew nothing about audio programming at the time. As I started working on Mixxx, I learned how to write high performance C++ for a real-time multithreaded audio application (which they didn't teach in school), and ended up making Mixxx the first free cross-platform DJ software that featured vinyl control.
Though I was content with my implementation, I found myself wanting to improve other areas of Mixxx. This slippery slope lead me to rewrite Mixxx's audio interface I/O code, external DJ MIDI controller code, and help port it from Qt 3 to Qt 4. In 2008, I began rewriting Mixxx's library to use SQLite, a feature which was released in Mixxx 1.8.0.
I've also been involved with dozens of subprojects as Lead Developer, including mentoring Google Summer of Code students in 2007, 2008, and 2010.
In early 2011, I worked to get Mixxx in the Mac App Store as one of the first major open source applications accepted. Within a few days, Mixxx became the #1 Top Free Mac App worldwide and still maintains a high ranking in the Music category to this day. This success was a testament to talent, effort, and dedication of the entire Mixxx Development Team.
In 2009, I wrote a cross-platform audio slicing application called BeatCleaver to help speed up my music production workflow. I later added an experimental sampler and live looper to it, so that I could jam and make loops with my Akai MPD24. Eventually, grad school and Mixxx put BeatCleaver on the backburner for a year before I finally decided to do something with it.
In early 2011, I distilled BeatCleaver to a small set of polished features, and released it commercially for Mac OS X and Windows.
In 2008, I worked on porting the shoot 'em up rRootage by Kenta Cho to the GP2X handheld. A partial OpenGL implementation that ran on the extra ARM 940T processor in the GP2X was developed by Cedric Cellier, and I wanted to see more games take advantage of his work. (At the time, there was only one other GP2X port using gpu940.)
I did the initial porting work that involved making OpenGL changes to accommodate gpu940, remapping buttons, and reducing resource usage to improve performance. I got the project to the point where it ran except for intermittent crashes, so I posted by source tarball for someone else to continue with, so I could focus my time on Mixxx.
In 2010, Dan Silsby released rRootage for GP2X based on my work, and was pleased to inform me that the crashes I had run into were due to gpu940's line drawing code, which I had suspected (vindication!). Dan also later released a port of rRootage for Wiz based on this work.
The K-Byte Zipit Wireless Messenger was a cool little embedded Linux device that let you send MSN, AIM, and Yahoo! instant messages through wireless 802.11b/g networks. The device cost about $100, years before netbooks or cheap smartphones, and consumer embedded Linux devices were just starting to appear. I learned to cross-compile Linux applications to ARM and about working on embedded devices, eventually producing a small graphics library to do basic raster drawing and text rendering on the device's 4-bit screen.
A collection of statically linked binaries for ARM that I compiled is available here, along with more information on my ancient Zipit page.
During high school and into my first year of university (2003-2006), I wrote several small 3D engines using DirectX 7 RM, Direct3D 9, and OpenGL.
The Direct3D 9 engine was used to demonstrate Newton's three laws in my Grade 12 physics class. In one demo, the player controlled a cannon that recoiled after firing a cannon ball across a landscape. I came up with per-triangle collision detection algorithm to detect where cannon balls hit the terrain mesh.
The last engine (OpenGL), was able to load texture-mapped Quake 2 MD2 models and animate them using linear interpolation.
I always felt Doom 3 could have used more outdoor segments, zombies, and open spaces. After learning D3Edit, I sat down and created Zombie Swarm, an outdoor map set on the surface of Mars. The map was a proof-of-concept that you could make zombie respawners in Doom 3 without modding, and also gave me another excuse to use scripted events to build atmosphere. As the wind howls across the martian surface, lightning strikes light up the sky, shake the ground, and will even take down zombies!
Download (357 kB)
I used the setting of a decimated alien ship to learn about scripting events in this single-player map I worked on in 2001. I ended up creating a map with a dark atmosphere aided by scripted events and lots of Borg!
I learned Valve's Hammer level editor while creating this small Left 4 Dead map, set in a city street above a subway. After working on this map for a week, I also learned to appreciate just how much effort and detail went into Valve's Left 4 Dead campaigns. Unfortunately, with the Left 4 Dead Authoring Tools released only a month before Left 4 Dead 2 came out, the motivation wasn't there to continue developing the map. In hindsight, it could have made a decent Survival map instead of a mini-campaign though.
I designed this map for a small LAN party I hosted with some friends in 2001. Though I had designed several small Quake 3 maps before it, the Urban Terror mod significantly changed the Quake 3 gameplay dynamics, and maps had to be designed accordingly. This map was designed around three central bottlenecks that were balanced so that each team would reach them at the same time.
If I had known that Urban Terror would still be around as a popular stand-alone game 10 years later, I probably would have finished and released this map.
I've been the website designer and maintainer for Mixxx since 2006. The site has seen several overhauls over the years as Mixxx has grown and as modernization has been required. I did all the website artwork other than the logo, which was designed by Paul Bloch.