Introduction: Effecter: a Simple Guitar Effects Processor

In this Instructable, we will be building a simple sound effects processor. The setup is very similar to my previous Instructable.

The Edison is at the center of this build. It does all the sound processing and manipulation of the sound.

I plan to make this as an ongoing project in the sense that, I'll be adding more effects as a learn about them (depending how much interest is around this project).

Currently, following effects are supported:

  1. Ring modulator
  2. Amplitude modulator
  3. Overdrive distortion
  4. Overdrive ver 2 distortion
  5. Reverb
  6. Sine vibrato
  7. Sawtooth wave vibrato
  8. Square wave vibrato
  9. Fuzz box distortion

The main user interface consists of a button, LCD and a potentiometer (Grove Rotatory sensor).

Following are the things you'll need to complete this build:

  • Intel Edison (with Arduino base board)
  • USB audio card
  • Grove starter kit
    • Grove button
    • Grove Rotatory angle sensor
    • Grove I2C LCD
  • Audio to Audio cable
  • Instrument or mic to be used as input

In the video, you can see me use the build to modify the way voice and an online piano program sounds using various sound effects. The output from the online piano being played is input to the sound card connected to the Edison which processes the incoming audio depending on effect selected and outputs it onto the sound card (connected to Edison) output connected to speakers.

In this project, a rotatory angle sensor (potentiometer or pot) is used to changes aspects of selected effect in real time. Except for overdrive and fuzz box effect all other effects can be controlled this way.

Even though this project uses pot to control effects, you an use an analog ADC module to control effects and thereby, adding more expressiveness to your performance.

Step 1: Configuring Edison

First thing to do is to setup the USB audio card. To connect the USB sound card, you'll need to move the switch near the USB port towards the USB host port as in the attached picture. In this mode, you will have to power the base board with a DC power supply adapter (7V-15V, I used the power adapter that came with Intel Galileo Gen2) .

In the Linux console (refer to this getting started guide if you want to know how you can gain access to the Linux console), type the following command:

aplay -l

Note down by what name your device got recognized.

In my setup as "U0xd8c0x13c".

Open up the file "/etc/asound.conf" for editing using "vi"

vi /etc/asound.conf

Press 'i' to start editing the file and enter the following text with replaced by your actual USB audio card name.

pcm.!default sysdefault:<your_device_id>

In my case, that would be:

pcm.!default sysdefault:U0xd8c0x13c

This should setup the audio card. To test if your USB audio card gets used as the default audio card, connect external speaker or headphone to the USB sound card. When you execute the following command you should hear some one speak:

aplay /usr/share/sounds/alsa/Front_Center.wav

Now that the audio card is setup, you'll have to install the port audio.

wget http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz
tar zxvf pa_stable_v19_20140130.tgz 
cd portaudio/ 
./configure
make 
make install

Hardware connections:

You need to mount the Grove base shield on the Edison and make following connections:

Grove button -----> D6

Rotatory angle sensor ------> A0

I2C LCD ------> I2C port (any)

Step 2: Compiling and Running the Application

Get the archived source for the application from the github:

wget https://github.com/navin-bhaskar/Effecter/archive/master.zip
unzip master.zip
cd Effecter-master/
make

Connect the "mic in"/"audio in" on the USB sound card connected to Edison to any musical instrument or a microphone also connect speakers to USB sound card.

You can run the application using following command:

./effecter

If the application fails with "Invalid sampling rate" then the default sampling rate used by this application is not supported by your audio card. In that case, you'll have to first check for the supported sampling rates for your device.

You can run the following command to know what sampling rates are supported:

cat /proc/asound/card2/stream0 

Check for "rates" filed and note it down. Note that in the above command, I know my sound card is card2 from the "aplay -l" output.

Change the sampling rate in "config.h" line 8 using vi. vi config.h. Navigate to line number 10 and replace the number in "#define SAMPLING_RATE (your_sampling_rate)".

You will have to run "make" again for these changes to take place

make clean
make

Step 3: Using the Gadget

When the application starts, the default mode will be "plain" In this mode whatever audio is input, it is played without any modifications.

The effect is changed using the button. Click button to cycle the effects in following order (starts with plain mode):

  1. Ring modulator
  2. Amplitude modulator
  3. Overdrive distortion
  4. Overdrive ver 2 distortion
  5. Reverb
  6. Sine vibrato
  7. Sawtooth wave vibrato
  8. Square wave vibrato
  9. Fuzz box distortion

The current effect that is being applied is displayed on the LCD also each effect has it's own LCD back light profile. This feature lets you know what effect is being applied from a distance (that is if you can remember the color associated with each effect).

The rotatory angle sensor (or the pot) controls at least one aspect of the effect in most of the above mentioned effect. For example, in ring modulation effect, the pot controls the carrier frequency of the sine wave used in modulating the input signal.

Step 4: Ring Modulator

Ring modulator effect can give robotic voice kind of effect to human voice. This was used in old sci-fi TV shows as a means of generating robotic voices.

This effect is simply achieved by multiplying the incoming audio signal with an internal LFO (low frequency oscillator).

In this build, the pot controls the frequency for the LFO.

Step 5: Amplitude Modulation

In amplitude modulation, the amplitude of internally generated "carrier" signal is changed in accordance to the input signal. Needless to say, this can cause clipping in higher volume inputs.

In this build, the pot controls the frequency of carrier signal and also the amplitude of th carrier signal.

Step 6: Overdrive Distortion

There are two variants of distortion.

In the first variant, symmetrical soft clipping is used to achieve distortion. There is no variable parameter in this effect hence pot does not affect any aspect of this effect.

In the second variant which is a more softer distortion, the pot controls the amount of distortion. Rotate the pot in rapid succession for some interesting effects.

Step 7: Reverb

Reverberation effect is meant mimic the sound that can be heard in music hall when an instrument is played. Theoretically, this means that sound that reaches the observer consists of music that is being played and it's infinite number of echoes.

In this build however, a simple reverb effect is implemented which uses a delay buffer to record the incoming audio and used as "echoes".

The pot controls the rate of decay of the gain used on the previous samples (from the delay buffer) that along with the current sample is played out.

Step 8: Vibratos

This gadget supports three types of vibratos: sine, sawtooth and square.

In this effect, a function is used to determine the amount of delay that is to be used based. In case of sine vibrato, a sine wave is used to determine the delay amount and similarly in sawtooth a sawtooth wave is used.

The pot controls the frequency of the sine wave in case of sine vibrato; in case of sawtooth the maximum peak value of the sawtooth is controlled and in square wave, the period of the square wave gets controlled

Step 9: Fuzz Box

This effect implements a cubic amplifier and the effect sounds as if an instrument is played through a guitar amp.

This is a type of soft distortion and there are no user variable parameters in this implementation.

Intel® IoT Invitational

Participated in the
Intel® IoT Invitational