Jam Box – Live DJ Music Making Tool (Full Documentation)

Jam Box is a self-contained music making device that controls midi signals sent to Ableton Live, a professional music mixing software. The device contains an arrays of music samples from three different genres mapped into each buttons as well as knobs to control volume, tempo and other parameters. The principle is to allow the user to create their own music and experience what it is like to be a DJ.

Context

While taking a DJ class this semester, I became very passionate about mixing different audio samples and layering sounds to create a whole new piece. I came across midi controllers which are devices (keyboards, pads…) that control notes from a particular digital instrument via Ableton live and other music making software.

 

Midi Keyboard Controller
Midi Controller Pad

Although the devices above require prior knowledge of music software and a basic understanding of DJ-ing jargon (BPM, midi mapping, filters etc.), I wanted to create a tool that allows mainstream people to experience the joy of composing music without worrying too much about the technicalities. Experiencing the same joy myself by DJ-ing live during a school gig was a unique opportunity that I really wanted to share with everyone. This device is therefore a way to invite people to walk in the shoes of a DJ and have a great time.

Concept 

The Jam Box holds music samples from three different genres — arabic music, electronic music and hip-hop. Each genre is mapped to 11 selected music samples arranged on Ableton Live. Whenever a genre is selected (corresponding button on Jam Box is pushed), Ableton Live activates the genre’s “group track” (see video below) in Solo mode. This means that all the 11 buttons (should be 12 but one is not working) on the audio samples keypad are music samples from that particular genre. Hence, when the user presses any button on the audio sample keypad with the Arabic genre selected for example, corresponding samples are triggered within the “Arabic” group.

The user can also select multiple genres at the same time which triggers samples from both genres to create a mix of tracks. The Jam Box also has knobs that control master volume, tempo, filter (removes or adds bass) and pan. The user can modify these parameters at any time during their session.

The Jam Box is also designed such that whenever a button is pressed for the first time, the LED underneath is turned on to signal activity. Whenever it is pressed for the second time, the LED turns off. This adds to the intuitiveness of the Jam Box to allow users to visualize which buttons (samples or genres) are active and which ones are not.

Overview

A 2-minute summary of the project. Excuse my video editing skills 🙂

Materials

Parts 

  • 1 4×4 Adafruit Trellis Monochrome Driver
  • 1 Silicone Elastomer 4×4 button keypad
  • 1 Arduino Redboard
  • 4 10k Potentiometers
  • 4 potentiometer covers (knobs)
  • 16 LEDs (size: 3mm)
  • 10 screws
  • 16 male jumpwires
  • Peel stick paper (for labels)

Tools

  • 3D printer
  • Soldering wire and iron
  • Screwdriver
  • Flush Diagonal Cutter

Software

  • Arduino.cc
  • Processing 3
  • Ableton Live 9

Building Process

Step 1

3D print each parts of the Jam Box‘s enclosure. Digital STL printing files can be found on http://www.thingiverse.com/thing:409733.

Step 2

  • Solder 3 mm LEDs onto Trellis PCB. The longer leg of the LED goes into the positive ‘+’ hole of the Trellis. Cut the excess legs using a flush diagonal cutter.

 

  • Solder 4 wires on the Trellis PCB SDA, SCL, GND and 5V which will connect the SDA, SCL, GND and 5V pins on the Arduino Redboard. 

Test LEDs to make sure each is working before proceeding with the rest. Arduino Code can be found in the “Code” section below.

Step 3

Wire up potentiometers and install them in the Jam Box’s enclosure cover. The potentiometers will be connected to pins A0-A3 on the Arduino Redboard and will share the 5V pin on the RedBoard with the Trellis PCB (Solder both together).

 

Step 4

Assemble all parts of the enclosure as well as the Trellis PCB, the keypad and potentiometers. Use screws to tighten everything together.

 

Code

Arduino

I use arduino to set a serial communication from the physical interactions to the processing sketch. Whenever a button is pressed, Arduino serial prints the number of the pressed button and turn on/off the corresponding LED. It then sends that information to Processing. Likewise, Arduino maps potentiometers’ values from 0 to 127 (following Ableton Live midi mapping directives) and sends that information to the Processing Sketch.

Some of the libraries used are the Adafruit Trellis Library and the Wire library.

Full Arduino Code can be found here: Jam Box Arduino Code

Processing

Processing receives information from Arduino and reads the communication to then trigger a set of actions. For instance, when Button ‘0’ is pressed, Arduino sends a ‘0’ to Processing, and through a series of ‘if’ statements, Processing sends a midi signal to Ableton Live to trigger the music sample corresponding to Button 0.

I used Serial and The Midi Bus libraries. The latter helps convert actions into midi signals sent on a specific channel in Ableton Live.

Full Processing Sketch can be found here: Jam Box Processing Code

Ableton Live

Ableton Live is a music making software designed to receive midi signals. To receive midi signals from Processing, we need to set Ableton’s input to “IAC driver (Bus 1)” which corresponds to the Audio Midi signal from our Macbook laptops and turn on the remote controlling option is Ableton preferences settings.

Following that, we click on Ableton’s MIDI mapping tool to assign each audio sample to a particular button on our Jam Box. By selecting the audio samples and pressing on any button on our keypad, a note is automatically assigned to the sample and represents the link between our box and Ableton’s sample. Likewise, our potentiometers can be mapped to the volume on Ableton’s master track, the tempo or BPM, the master pan and a filter using the same method (MIDI mapping).

NB: Audio samples have to be manually selected and placed in different scenes in Ableton. For simplicity, it would be best to group the audio samples by genres to avoid confusion.

Challenges and Improvements

One of the biggest challenges in realizing this project was on the software side. Creating the right communication between 3 different softwares — Arduino, Processing and Ableton turned out to be quite complicated. The process required creativity at different levels – first in setting up Arduino to print information for all buttons and potentiometers, second in programming Processing to decipher group information sent by Arduino and convert them into individual data to be communicated to Ableton. The most difficult part was navigating Ableton Live.

As this was my first time coming across midi mapping and using Ableton Live with a different perspective, I took this part as a personal challenge to really develop my skills. After getting a good grasp of midi mapping fundamentals thanks to Omar Shoukri, the next challenge was to confront concept with software programming. Questions I had to ask myself were: “What do would make sense for users to do?” “How to improve their experience through making a comprehensive Jam Box with intuitive midi mapping?” “How does what I know now and the limitations of Ableton affect my initial concept?” These questions were very useful in helping me put things in perspective and code my device accordingly. For instance, I had to map “genre” buttons to trigger a “Solo Mode” on Ableton to avoid confusion and unintentional mixes of samples. Because each button is in theory mapped to three different samples from three different genres, pressing a button theoretically triggers all three samples, following Ableton’s logic. Implementing such solutions only became apparent while navigating Ableton Live.

Overall, realizing this project was an amazing learning opportunity that still blows my mind to this very moment. I enjoyed putting together the pieces of the device and using tools that I never encountered before such as a Trellis PCB and 3mm LEDs. Seeing my concept evolve was also very enriching in terms of evaluating the extent to which I can push myself to incorporate features that I did not plan on adding and discovering the power of Ableton Live. It was particularly refreshing to see people impressed and excited about my project during the Interactive Media Showcase. A couple people even asked me if I was selling my product!!!! *mindblown*. Kid Koala himself really enjoyed playing with the device and posted a picture of it on his social media account! He also said that there’s a huge demand for portable midi controllers by DJ’s around the world and that this would sell pretty quickly!

DJ Kid Koala posted my project on his Instagram!!!

In terms of improvements, adding a record button on the pad to allow people to carry their own mixes home would be a great way to create a lasting memory. Adding more flexibility to the range of available sounds would also be a great way to allow people to pick genres or sounds that they like most and go from there. In terms of physical components, using an Arduino Leonardo or on that supports USB communication would cut down from using 3 to 2 different softwares. In theory, this can work by only using Arduino and Ableton Live. Future projects can explore that path perhaps.