Set Explorer

About Set Explorer

Set Explorer is a project by about visualizing energy across DJ sets.

Inspired loosely by Fathom's Rocky Morphology project, it mines and combines data across multiple sources to make it easer to search, explore, and select sets to listen to.

For each set I have two styles of graph:

  1. Timeline
  2. Playlist

In the Timeline graph, height (↑↓) represents BPM, from about 50 BPM to 100 BPM, higher being faster. The horizontal (→) represents time, with bars (|) representing song changes.

The color represents energy, as follows.

So, in the above "timeline" graph, the BPM is relatively flat in the first half with an increase and then decrease in energy. In the second half there is a steady increase in BPM and energy before slowing down and dropping energy in the last few songs.

In the Playlist graph, time and BPM are not shown. Instead, songs are shown with their energy

How it Works

I create mixes using VirtualDJ (VDJ) and upload them to my Mixcloud account. I make it a point to be very organized within VDJ, cataloguing playlists for each set I've recorded and tagging songs with lots of metadata, like the energy and musical characteristics of each.

VDJ makes it really easy to export and view this data as XML, meaning it is trivial to query and operate on that data programmatically. I initially learned this writing scripts to automate some of my more repetitive DJ processes like updating cue sheet timestamps.

Initially, I was most interested in visualizing the change of energy across each mix. After playing with several ideas for how to source that data (e.g. searching from cue point titles, reading cue sheets) and how to display that data (e.g. Matplotlib, Plotly) I finally landed on an approach:

Since I have playlists for each set, I was able to use Python to get the songs for each playlist and look up their metadata (including a tag for energy). I also used Pandas for some simple data cleaning / joining along the way.

For data display, I used D3 to convert song data (in JSON format, output from the prior scripts) into a timeline of colored <div>s.

I wanted to also combine information from Mixcloud (particularly album art and titles) so, using Postman and Mixcloud's developer documentation, I was able to find commands to source that data. Joining these two sources of data required creating a mapping file to associate playlists with their respective Mixcloud uploads.

After all that, I'm left with:

  1. A set of playlists and associated song metadata.
  2. Mixcloud data for each uploaded mix.
  3. A mapping file to link Mixcloud mixes and playlists.
  4. Scripts to join and package this data for web.
  5. Code to display this data on a webpage.

Technologies

This project utilizes the following technologies:

Attributions

Gear icon by Thewolfkit in CC Attribution License via SVG Repo.

License

The data in this project is copyright of DJ Sprenk.

The project, however, is licensed under GPL v3.0. You are welcome to adapt the underlying processes with your own data under the terms in that license.

Support

If you enjoy my work and want to support, you can subscribe on Patreon or tip me on Venmo / PayPal.