I had watched numerous videos on Youtube of people using these things as MIDI devices. I found them somewhat unsatisfying because they only seemed to being using them in a limited capacity. One common comment I took note of was that people didn't like the buttons being used like keys on a keyboard (which is often how they get automatically mapped with MIDI translating programs). I actually did want the buttons to send note data, but with some changes to make it more playable. Here is what I wanted to do with the controller to make it into an actual instrument that I would feel comfortable with:
- All of the buttons must somehow be programmable to send different types of MIDI data like Note on, Continuous control, Pitch bend, Program change, etc.
- The two analog joysticks need to be configured to act as X-Y pads, with each axis corresponding to a CC#.
- Pressing the joystick button down freezes the X-Y axis in its current position, while pressing it again resets the data to its default value, (coordinates 0,0 or typically a value of 64 for each CC# on a scale of 0 to 127).
- The D-pad Y axis shifts the pitch of a note up or down an octave. The D-pad X axis shifts the pitch of a note up or down a semitone. The diagonal directions should combine both of the functions.
- The "start" and "select" buttons should be configured to globally transpose all notes up and down a semitone to play in different keys.
The first task was to get the controller to be recognized as an input device capable of sending MIDI. My digital audio workstation, REAPER, has native support for joysticks. This is an awesome functionality that I haven't seen elsewhere. However, to get the controller to send the data you want, you have to use its proprietary programming language which has no documentation. It's powerful, but I am not a programmer and couldn't figure out the text files used for programming the input data. Therefore, I found a handy program called Fergo JoystickMIDI. It takes standard joystick input and lets you map all of it to MIDI data. This would've met all of my needs, however I needed some extra functionality. For example, the program didn't recognize the D-pad's POV data.
Once the controller data was rerouted into REAPER from JoystickMIDI, I needed to do further processing. I loaded the fabulous modular sequencer EnergyXT into REAPER to allow me to create a more complex signal path for processing MIDI data. I also had to turn to the old warhorse Synthedit in order to program custom VSTs to do the processing outlined above.