Audio Hacker Drum Machine


This project really pushes the limits of what you can do with audio sampling on an Arduino! It is almost the same as the 3-Track Looper project so I recommend you read that first. Now instead of controlling a loop delay with a potentiometer, we can lay down a track by tapping out a rhythm that plays a sample. This project really works best if you use very short samples like drum sounds or words you say with your voice. Just as before, the tracks can be played back and mixed together.

Load the Audio Hacker example sketch File->Examples->Audio Hacker->DrumMachine. For this project, I used the DJ Shield because it provides all the buttons.

djShield-drumMachine


You can build it on a breadboard if you want:

Record button = D5
Loop button = D6
Track 0 button = D4
Track 1 button = D3
Track 2 button = D2
Track 0 volume = A0
Track 1 volume = A1
Track 2 volume = A2

When the record button is tapped (pressed and released), it toggles the “passthrough” mode for the input. That is, when the sketch starts, the input is passed through to the output so you can hear it, but you can enable/disable the passthrough by tapping the record button.

To record a track, first enable the audio passthrough so you can hear the audio signal. Now press and hold the record button down, then hold down a track button to record the track. Release the track button when done recording, or if you exhaust the memory size for that track, the output will stop. To play the track (just once), press the track button. Like I said before, this project works best with very short samples.

Before you set up any looping, record more sounds onto the other track buttons using this same technique. You can play your samples by simply pressing the track buttons.

Now it’s time to create some loops. To lay down a looping track using the sampled audio, first press and hold the loop button. Now tap out a rhythm on a track button. When you want your tapped rhythm to start repeating, release the loop button. Now while this track is looping, hold the loop button and tap out another rhythm on another track. Release the loop button to start that rhythm looping. The two loops will be mixed together, each playing the rhythm you tapped out. To stop the looping of a track, tap the track button. You can control the playback volume of each track with the potentiometer above the track button. This is an example of controlling volume digitally by changing the level of the output signal in code. It’s crude but needs to be fast.

If the controls are confusing, just play with it for a while until you get the hang of it. You can enable debugging by uncommenting the line #define DEBUG and open the Arduino serial monitor with speed 115200. This will show you information about what is going on in the sketch.

Performance Notes

This sketch is rather complicated so there are some performance compromises. The sample rate is 16 kHz and the samples are 8-bit audio.

The memory is divided up as follows: track 0 is on the first SRAM chip (128K) and can hold about 6 seconds. Tracks 1 and 2 split the second SRAM chip and are about 3 seconds each.




Published by Michael, on July 5th, 2013 at 8:25 am. Filed under: Audio. | No Comments |





MIDI Triggering for Audio Hacker


This project shows you how you can use your Arduino+Audio Hacker as a MIDI instrument. The Arduino MIDI library makes it easy to read the MIDI commands that arrive on the Arduino serial port. I used a Rugged Circuits Flexible MIDI Shield for this project because it is, well, flexible. It allows you to specify which pins are used. Other MIDI shields are not likely to be pin compatible with the Audio Hacker, so I don’t recommend anything but the Rugged Circuits shield for this project. The MIDI shield stacks nicely with the Audio Hacker. I didn’t use the DJ Shield in in this project but I wanted to show this huge stack!

midiShield


An external device like a digital piano or drum machine is the MIDI controller that sends MIDI commands to the Audio Hacker. So a MIDI cable runs from the controller’s MIDI OUT to the MIDI shield’s MIDI IN connection.

You will need the Audio Hacker library and the Arduino MIDI library installed in your sketchbook libraries folder. Load the Audio Hacker example sketch File->Examples->Audio Hacker->Sampler_MIDI.

The Audio Hacker is used to sample audio input from a computer or MP3 player, or whatever by holding down the S1 button on the shield. This sample can be played back with the S2 button, just as with the normal Sampler_12bit example sketch.

But when a note is played on the MIDI controller (e.g. piano) a MIDI message is received by the Audio Hacker sketch and the sample is played at a speed proportional to the note played. For example if a middle C note on a digital piano is pressed, then a “noteOn” message with value “60” will be sent to the Arduino and the sample will be played normally. If you play a higher note, the playback speed will be faster, raising the pitch. A note below middle C will slow down the playback and play a lower note.

Here it is in action:




Published by Michael, on July 5th, 2013 at 8:11 am. Filed under: Audio. | No Comments |





3-Track Looper with Audio Mixing


This Audio Hacker project is similar to the Four-Sample 12-bit Sampler project but now we can loop the samples and mix them together. Now we call them “tracks” instead of samples. It demonstrates how audio samples can be combined so that they are mixed at the output.

Load the Audio Hacker example sketch File->Examples->Audio Hacker->Looper. With this sketch you can record 3 different tracks and play each of them back in a loop. You can adjust the loop delay by using a potentiometer associated with the track. The loop delay is the time delay before playing the sample again. A delay of 0 just plays the sample over and over again with no delay.

For this project, I used the DJ Shield because it provides all the buttons and pots.

djShield-looper

You can build it on a breadboard if you want:

Record button = D5
Loop button = D6
Track 0 button = D4
Track 1 button = D3
Track 2 button = D2
Track 0 delay = A0
Track 1 delay = A1
Track 2 delay = A2

When the record button is tapped (pressed and released), it toggles the “passthrough” mode for the input. That is, when the sketch starts, the input is passed through to the output so you can hear it, but you can enable/disable the passthrough by tapping the record button.

To record a track, first enable the audio passthrough so you can hear the audio signal. Now press and hold the record button down, then hold down a track button to record the track. Release the track button when done recording, or if you exhaust the memory size for that track, the output will stop. To play the track (just once), press the track button. To cause the track to play in a loop, first press and hold the loop button, then press the track button. Now you can release the loop and track button, but the track will continue to play in a loop. Adjust the loop delay by adjusting the track’s potentiometer. To stop the looping of the track, tap the track button.

Now let’s record another track. Enable the input passthrough by tapping the record button. Now hold the record button and hold a new track button (like track 1) to record onto that track. Hold the loop button and tap the track button for your new track. Now tap the track button for the other track you recorded. They will both loop and will mix together. Go ahead and record a third track and loop them all together.

If the controls are confusing, just play with it for a while until you get the hang of it. You can enable debugging by uncommenting the line #define DEBUG and open the Arduino serial monitor with speed 115200. This will show you information about what is going on in the sketch.

Mixing Signals

Audio signals in this 8-bit project are represented as a series of 8-bit values in the range of [0,255]. Real audio signals are best described as waves that can have both positive and negative values, oscillating around a midpoint of zero. Audio signals mix together in an additive manner, where positive and negative values “cancel” each other out. Before we mix two signals together, first we normalize them so that the midpoint is 0 instead of 128. So 128 is subtracted from each value to give it a range of [-128,127] and we store the result in a signed integer. Now we add the values together to get the mixed signal.

It’s possible that two signals mixed together have exceed the maximum value of 127 or gone below the minimum value of -128. In this case we need to “clip” the value to the maximum or minimum. This will sound like distortion/noise when this happens. Read this for a better understanding of clipping.

After mixing signals together, we adjust the final value upward to the range of [0,255].

Performance Notes

In order to do all this mixing quickly, there are some compromises. The sample rate is 18 kHz and the samples are 8-bit audio.

The memory is divided up as follows: track 0 is on the first SRAM chip (128K) and can hold about 6 seconds. Tracks 1 and 2 split the second SRAM chip and are about 3 seconds each.




Published by Michael, on July 5th, 2013 at 6:18 am. Filed under: Audio. | No Comments |





Four-Sample 12-bit Sampler


This Audio Hacker project is similar to the 12-bit Sampler, but divides the Audio Hacker SRAM into 4 banks so that you can record and play back 4 different samples. To make the hardware setup easy, we’re using the DJ Shield because it has 5 buttons. The 4 memory banks are assigned to the 4 samples like this:

djShield-4track-sampler


You don’t have to use the DJ Shield if you put 5 buttons on a breadboard. The assignments should be:
Record button = D5
Sample 0 button = D6
Sample 1 button = D4
Sample 2 button = D3
Sample 3 button = D2

Load the Audio Hacker example sketch File->Examples->Audio Hacker->MultiSampler_12bit.
To record a sample, press and hold the record button down, then hold down a sample button to record it. Release the sample button when done recording, or if you exhaust the memory size for that sample, the output will stop. To play a sample, press and hold the sample button on which the sample was recorded. Now you can record and play back 4 different audio samples in the SRAM!




Published by Michael, on July 5th, 2013 at 6:15 am. Filed under: Audio. | No Comments |