Week 11: Interface and Application Programming


Due to the Thanksgiving break, this week was slightly special since it was a programming-only week. Our assignment was to create an interface for a device. I therefore decided to expand the range of possibilities that my synthesizer from the previous week could offer by creating a MIDI interface that could allow me to keep track of my creative ideas. I had already explored such an idea in a previous class, but I wanted to expand it and adapt it to my new synthesizer.

The motivation for this work comes from the fact that keeping track of creative ideas when playing music is a constant challenge. Say that you are currently learning a jazz standard on piano and are practicing playing the melody, learning some voicings, and practicing some solos. While you are playing and keeping track of the score through a Real book or an app like iRealPro, you noodle some ideas on your piano when suddenly: you just played an amazing line. But it's too late to remember it! You could record your ideas through a voice note, but anyone who went through this knows that it is impressively cumbersome to know after a while where all of your best ideas are. The idea was therefore to create an interface that could: (1) listen in to MIDI notes while a backing track keeps playing, and (2) keep track of all of your lines and order them using a few select metrics.

I therefore started the work with my fellow Max4Live tool, which is a version of Max MSP that is particularly adapted to Ableton Live. I created a patch that would spin up a webserver using Express.js, and communicate with Ableton Live through websockets. In this architecture, Ableton Live would listen in to the MIDI input, and, after every bar, send the MIDI signal to the web client to register it.

Finally, I got an interesting result that allowed me to play along a specific standard, here There Will Never Be Another You, while keeping track of my musical ideas. After a performance, clicking on the different musical ideas will play them again by sending the MIDI signal back to Ableton Live. Apologies for my simple playing and my broken F key.

I also tried another version of the interface, which would show up the different musical ideas as nodes on a 2D plane.

Notes to a future me (learning outcomes):

  • Managing Node.js environments can get messy, use NVM.
  • Max4Live is incredibly powerful.