WhySynth Controller
Part 3 - Architecture

WhySynth controller architecture


The current architecture is very simple, a control panel that generates MIDI messages, WhySynth (hosted within jack-dssi-host) and a Ruby script to translate between MIDI and OSC messages.

WhySynth uses the DSSI interface. This means that all communication with its GUI takes place via OSC. Unlike the simpler MIDI interfaces provided by most soft-synths, this makes it easy to develop a new interface that has complete control over the synthesis engine. This allows the control panel to retrieve the current control values and display them on the control panel.

Due to the number of controls available in WhySynth, it wasn't possible to use a simple one to one mapping between physical controls and WhySynth controls. For this reason, the control panel has buttons that enable access to secondary controls. These consist of an extra set of oscillators and envelopes, and some less frequently accessed parameters.

The interface board (a Livid Instruments Brain) simply translates control voltages and button closures into MIDI messages, so the current 'state' of the control panel is defined entirely by the Ruby script. You can think of it as a stateless thin-client, similar to a web browser, that simply sends control updates to the Ruby script. The response from the script is a series of MIDI note on/off messages, updating the LEDs to reflect the current state.


This file contains the code that translates MIDI messages from the control panel into OSC messages for WhySynth, and maintains the current state of the control panel. The main functionality is contained within the ControlPanel class, with the handle_midi method being the entry point for MIDI messages. The result is a list of OSC messages for WhySynth and a list of MIDI note on/off messages to update the control panel LEDs.

For more detail see the Launchpad project. It depends on the osc-ruby and Portmidi gems.

WhySynth's architecture

WhySynth architecture

This diagram is simplified to emphasize the routing available when using the controller. This was done to both simplify the usage and reduce the number of controls required for filter routing. WhySynth is actually more flexible:

See this diagram for the full voice architecture.

Up Next

In the next post I'll talk in more detail about the controls, focussing on the features not typically implemented with hardware controls.

blog comments powered by Disqus