Monday, September 27, 2010

Guitar controller – Part II

I got a used guitar hero controller for 10$ and hacked it to pieces… I salvaged the buttons and the strum bar and I temporarily hooked them up to the USB interface I previously gutted from an old keyboard. This allowed me to test everything and work out the software side of the system.

I’ll be using Bidule to interpret the signals from my guitar controller. I created the following patch to test out the concepts.

bidule-for-keys

Bidule recognized my controller as a keyboard, so I added a HID-Extractor and selected the keyboard as input and Bidule automatically assigned a MIDI note to each keyboard key. The first stop after the HID-Extractor is a midi note filter that lets through only the notes associated to my controller. This is required because Bidule doesn’t seem able to differentiate between keyboards and any stray typing on my main keyboard would otherwise pollute my MIDI signal chain.

After the Note Filter, I added a note remapper.  Since the HID extractor automatically maps each key to a midi note, this step is required to create a more meaningful association.  For this test, I only used four buttons and mapped them chromatically from C4 to D#4.  Later on, I intend to use a midi router to switch between different mappings.  For instance, I could have one that moves in thirds, or in fifths.  A button on the guitar body will allow me to select between these different mapping options.  The guitar frets on my controller will not be limited to chromatic playing and I’ll even be able to program various scales and arpeggios.

These midi notes are being fed to Pitchwheel, a pitch shifting plug-in that is effecting the playback from the Audio File Player.  For this test, I used an ambient drone loop.  Pitchwheel responds to midi notes by shifting the pitch of the audio input in steps corresponding to these midi notes, C4 being the origin.

I sent the output of this plug-in to a Stereo-Mixer to have a way of gating the output.  What I wanted to achieve was to hear playback only when I pressed on the strum bar.  I did this by muting track 1 and linking the mixer’s track 1 solo parameter to the appropriate keyboard key triggered by my controller.

The output of the mixer goes to a reverb effect before reaching the sound card to add a bit of realism to the sound envelopes.  When a note is played on an acoustic instrument, the sound doesn’t end abruptly after the player stops.  The note vibrates within the instrument and the room for a while before dying out.  The reverb plug-in allows short notes to sound more realistic.

Here is a little recording of a test I did with a similar setup.  Basically the same but with midi notes transposed down an octave to sound more bass-like and mapped to arpeggio instead of chromatically:

Bass drone test

There’s a latency issue on the strum bar that I’ll have to resolve, but otherwise everything is behaving as it should. 

Next steps: More guitar hero controllers will be destroyed.