I mainly develop audio and music software for Linux. I am a maintainer of, and long-time contributor to, the DSSI project:
- The DSSI Soft Synth Interface is an API for soft synth plugins with custom user interfaces. I have contributed to the development of the standard, and written parts of the example code, including parts of the jack-dssi-host and most of FluidSynth-DSSI, a wrapper for the FluidSynth SoundFont synth.
I am the principal author and maintainer of the following projects:
- WhySynth, a DSSI softsynth plugin featuring subtractive, wavecycle, granular, FM, waveshaping, and PadSynth synthesis in a flexible-but-efficient non-modular design.
- hexter, a DSSI plugin which emulates the sound generation of a Yamaha DX7 (some demonstration sounds are available below).
- Xsynth-DSSI, a classic-analog style DSSI softsynth based on Steve Brooke's Xsynth code, that has since aquired operation as a DSSI plugin, polyphonic operation, band-limited oscillators, a better filter mode, and velocity-sensitive envelopes.
- ghostess, a rough start at a graphical DSSI host, based on jack-dssi-host, but capable of saving and restoring plugin configuration, as well as specifying MIDI channels and layering synths. ghostess includes three MIDI drivers: an ALSA sequencer MIDI driver, a (clumsy but functional) CoreMIDI driver (which allows ghostess to be used on Mac OS X), and a JACK MIDI driver for use with the MIDI transport in recent versions (>=0.105.0) of JACK. ghostess also comes with a universal DSSI GUI, which attempts to provide GUI services for any DSSI or LADSPA plugin, and may be used with any DSSI host.
- libwhy, a library for developing applications using Lua and GTK+. This contains several custom GTK+ widgets, and has become the foundation of all my new graphical Linux applications.
- sfxr-dssi, a port of the famous sound effect generator sfxr. sfxr-dssi is a very simple but functional example of the use of libwhy.
- libdssialsacompat, which is simply an extraction from and repackaging of alsa-lib 1.0.8, providing the necessary declarations and code to run DSSI on non-ALSA platforms. (No, it doesn't emulate ALSA devices, it just provides handling of snd_seq_event_t structures.)
- blepvco, a LADSPA plugin library containing three anti-aliased, minBLEP-based, hard-sync-capable oscillator plugins. The oscillators are intended to be used with modular synthesis systems, such as Alsa Modular Synth.
Some demonstration MP3s comparing my hexter DSSI plugin and a Yamaha TX7
Here are some quick examples I threw together of how close (or not) hexter comes to a real DX7. In each one, hexter is panned hard right, and my TX7 (a DX7 in module form) is panned hard left. These were done using hexter 0.5.7; all but the last example will sound much the same with the current (1.0.1) version.
This is some Chopin with random patch changes thrown in. Both the TX7 and hexter are running with 16 voice polyphony. You can hear that both hexter and the TX7 click a bit when stealing voices. Also, hexter's quite a bit more graceful when receiving a patch change via sysex -- the TX7 twangs here transitioning into the "acoustic piano" patch.
This is actually two TX7s in the left channel, and two instances of hexter in the right channel.
Here you can hear that while hexter is pretty close to the TX7, it doesn't quite get the modulation right, resulting in a slightly brighter or more midrangy sound.
A couple more examples.
This shows some of the patches that hexter 0.5.7 had the most trouble with (thanks to Frank Neumann for collecting these). Many effects patches depend on amplitude or pitch modulation, LFO, and unusual envelope generator timings. As of version 0.5.7, hexter lacked the DX7's AM and PM and LFO, and the odd envelope timings have so far resisted all efforts at prediction. Version 0.6.0 added many of these missing features, so hexter's emulation of these effects patches is much more accurate now.
All of the examples were generated from the same MIDI stream (both sys-ex patch dumps and notes). The TX7 was connected directly to my Delta 44, and both it and hexter were recorded simultaneously at 44.1kHz using ecasound and JACK. Audacity was used to trim and normalize the recordings (no effects other than fade-in and fade-out were used), and lame with '-h -b192' was used to encode the MP3s.