SongMaps => Steven's Final Project
For my final project, I wanted to make an instrument that used my MIDI foot selector to alter certain parameters of an electric guitar that was running through the computer. The effects that I wished to implement on the guitar were: a voice-controlled reverb, an expression pedal-controlled pitch shifter, and a voice-controlled low pass filter. For my audio input source, I used an Alesis iO|26 audio interface for my microphone and electric guitar input channels. For the audio output, I used the PLOrk U46 hemi speaker. I wrote a code that would take the signal from the electric guitar coming into the Alesis and amplify it out of the hemi speakers. Then, an FFT was performed on the channel of the Alesis corresponding to the microphone input, and the RMS value was extracted from the microphone input. This RMS is then used to control the reverb mix of the guitar sound or the maximum frequency for the LPF. Therefore, as one sings louder into the microphone, the dry/wet mix of the guitar reverb increases, or higher frequencies are allowed through the LPF. The other effect was a pitch-shifter that was controlled by one of the expression pedals on my MIDI foot controller.
Originally, I had set out to create a controller that would only allow me to take the sound of my electric guitar and manipulate it using extracted data from the audio input signal (microphone) and expression pedal on my MIDI foot controller. However, when I began to compose a “mini song” for the demonstration of this instrument, I began wanting to add more features that would allow me to use MIDI foot pedals to change drum beats, activate the effects, etc. Eventually, I became interested in writing a code that would allow me to perform various songs that I had written previously using Ableton Live. A separate public class was created that had a number of “presets” that could be set for MIDI beat mappings. In this way, without loading any presets, the effects pedal worked alone...it could be implemented in any sort of song and it wasn’t quantized to a particular tempo. However, upon loading a preset for a particular song, the effects were then linked to various beats or parts of a song.
What made the ChucK performance code unique from playing the piece in Ableton was the ability to link vocal volume swells to certain effect swells that I had to automate in Ableton after recording a dry guitar part. This gave a more convincing sound of “swelling,” since I didn’t have to go back to the recorded part in Ableton, only activate the vocal and guitar tracks, and try to match reverb swell levels between the two tracks using automation. Additionally, this instrument provides the performer with a permanent effect processor that has the capacity to load different songs to it. With other effects software (Guitar Rig, Ableton, etc.), the same guitar effect presets are saved and loaded into each new song file so performers can use the same effects among a range of songs. However, using ChucK, one can instead have a functioning, static effects pedal that could load a number of preset song structures.
Additionally, instead of just guitar, one can really attach anything into the second input channel of the input interface (connect a sampler, a digital music player, etc.), and the controller can then affect the reverb level, pitch, and the low pass filter cut off frequency of that sample’s/song’s output. Additionally, instead of using a microphone in the first input channel of the interface to affect reverb level and maximum LPF frequency cut off in proportion to volume, one could use the gain knob on the input channel (assuming that there is a constant noise being input to the channel...such as a steady sin wave).
The ChucK files as well as the samples for the demo songs in the video (see below) are all in the .zip file.
HOW TO PLAY/DEMO
Here is an instructional video that shows you how to use the MIDI foot selector to activate different effects, load different song structures using the laptop keyboard, and perform pieces using this instrument.
You can use the "MIDDYTESTING.ck" file (in the .zip file above) to see what values are being sent by your own MIDI selector.