Supa



Motivation

A great amount of today's music involves the use of audio loops. The modern music maker is often faced with the problem of needing to cut out a specific part of a song which they intend to use as part of another. To create a composition out of a number of loops taken from a variety of sources, the user often faces the problem of making all of the loops match temporally and harmonically. Supa is an attempt to provide a simple toolkit to aid in this process.

System Design

Supa provides an interface for isolating a portion of an audio file and adjusting its tempo and pitch. When an audio file is dropped onto Supa, its waveform is displayed on two separate graphs. The top graph always shows the entire waveform, and the bottom shows the portion selected by the two sliders bordering the top waveform. Finally, the two sliders on the bottom waveform select the portion of the audio file which is actually being looped. The tempo and number of bars (measures) of the selected audio is automatically calculated and displayed at the top right. At the top left, the "global tempo" is displayed - the audio loop will play back at this tempo. At the bottom of the screen are a few other controls. The upper slider controls the pitch shifting of the loop, which allows the user to change the loop's key independent of time. The "Stretch" button next to this slider determines whether a temporal change causes a pitch change or not (eg, whether the audio is "time-stretched" or just interpolated). Below this slider is a volume/gain slider, which is at unity by default. To the right of the volume slider is a button which allows the audio loop to be reversed.

Software Design

The astute programmer will already know that I used Juce for the UI component. Juce is a pretty invaluable framework for creating cross-platform applications and takes the headache out of C++ programming, as long as you're willing to get a headache integrating your code into its framework! The audio portion of the program is done with the Synthesis Toolkit, which is also a similarly invaluable library for audio processing. I'm using a modified version of STK's FileLoop class which allows for arbitrary loop start and end points. Aside from being a somewhat useful tool, Supa was really a way for me to learn object-oriented programming in a serious way.

To do!

- Short-form tempo changing within a loop (a la Ableton Live)
- Augmented beat detection with user input, mapped to tempo changes
- Audio file export or VST wrapping
- MP3 import
- MIDI/OSC input

Source/Download

You can download a binary for Mac OS X ~10.5 here. I'd be very interested to know how/if it runs on your system! The source code, including all necessary Juce and STK files, is here, in the form of an Xcode project. I'd also be interested in any attempt to compile the code on another system/platform! Supa is released on whatever license is required by its dependent files (eg, Juce).