Tuning the Infinite Jukebox

The Infinite Jukebox works hard to find the best way to make a song play forever.  This is a balancing act.  The jukebox needs to add branches to a song that will allow it to hyper-jump from one section to another.  If the destination of the branch sounds similar to the starting point of the branch, the listener won’t notice the jump (which is good), so we only want to pick branches that are between two very similar sounding beats. However,  if we restrict ourselves to only adding branches between very similar sounding beats, then, for some songs, there may not be enough branches too allow the Infinite Jukebox to really play the song forever.  So the Infinite Jukebox must weigh similarity against branch density. Most of the time it does a good job, but sometimes it gets it wrong.  Until now, if the Jukebox got it wrong, you had no option but to try another song, but today I’ve just released a new tuning feature that will allow you to optimize the balance between similarity and graph density, so when the Jukebox can’t get it exactly right, you can finish the job.

The new tuning feature allows you to delete offending branches, and to help determine the proper balance between similarity and branch density.  Here’s what you can do:

Delete branches – sometimes the Jukebox gets everything right except that a few of the branches give a jarring audio transition. This can especially occur with lyric heavy music.  If there’s a particular branch that you want to get rid of, you can now just delete it. To delete an edge, click on it. It will turn red. Then hit the [delete] key and the edge will be removed from the graph. (You can restore deleted edges by hitting the reset button in the Tuning dialog).

For more detailed tuning, press the new Tune button.  This button will bring up a dialog that will let you adjust a number of parameters.   You can drag the dialog around so you can see the song visualization, and you can play the song while you are tuning it, to get real-time feedback as to how your tuning is affecting the song.   The tuning options are:

Branch Similarity Threshold –  this is a slider that determines the similarity threshold between two beats.  A branch between two beats will be created only if the sim-distance between the beats is less than this  threshold. Lower values will yield higher quality (but fewer) branches.   So, if your song has lots of  jarring beat transitions, move this slider to the left.  In general, branches with a sim-distance less than around 55 sound pretty good, and below 40 are usually inaudible.

Branch Probability Range –  when the Jukebox is about to play a beat that has branches to other beats, there’s a random chance that the Jukebox will follow one of the branches to play the similar beat.  This slider, along with the Branch Probability Ramp-up Speed  slider control the probability that the Jukebox will take a branch.  The branch probability will start at the low end of the given range, and will gradually heat up until it reaches the high end of the range.  The speed of the heating is controlled by the Ramp-up speed.  Once a branch is taken the probability is reset to the low end of the range.  The effect is, that over time, the chance that the Jukebox will follow a branch increases at the ramp-up speed, until a branch is taken at which point the process starts over again.

Loop extension optimization – the Jukebox will try to add in some extra paths in the song that may go above the branch similarity threshold in order to increase the amount of the song that is will be included in the infinite play.  If you want total control, you can turn this feature off.

Allow only reverse branches:  To increase song variety the Jukebox normally allows for jumps that go forward and backwards. Click this checkbox if you only want backward branches.

Reset – Click the reset button to restore the song to the ‘factory’ settings.

The tuning dialog also shows some data that you can use to help you tune the song:

  • Branch chance:  this is a dynamic value that shows the current percentage chance of taking a branch.
  • Last Threshold  – this shows the sim-distance of the last branch that was taken.
  • Total Beats –  the total beats in the song
  • Total Branches –  the total branches in the song
  • Longest loop –  the longest loop in the song, this is given both in terms of beats and in total percentage of the song.
  • Deleted Branches –  the number of branches that have been deleted.

Sharing your tuned songs All of the tuning that you apply to a song is captured in the URL for the song, so if you bookmark, tweet or share the URL for the song, you are also sharing all of your tuning and edits.  For example, here’s a version of Skrillex’s Scary Monsters that has been tuned to have very frequent branching between only the best branches.

In the last two weeks, there have been a million visitors to the Infinite Jukebox, with many thousands of songs uploaded.  With the new tuning feature, I’m looking forward to seeing (and hearing) better sounding infinite songs.



  1. #1 by Jarrod Lombardo on November 27, 2012 - 4:12 pm

    There’s two requests I have for tuning:
    1. Create a slider for minimum jump size. Many of the songs I’ve uploaded have many jumps in the 3-5 beat range; these often don’t sound very good, so a way to have the tuning pane remove the really short jumps would be useful.
    2. Set a limit on number of sequential jumps of equal length. Many songs will have a bunch of jumps of the same length for a few consecutive beats, e.g. 4 jumps in a row of 10 beats. Being able to filter these consecutive jumps down to just 1 without having to carefully delete them one by one would also be useful.

  2. #4 by Daniel Safari on December 3, 2012 - 10:00 am

    Could you elaborate a bit on the exact numbers behind “Branch Probability Ramp-up speed”?
    While I get what it does, I can’t quite figure out the exact way it does it.

    • #5 by Paul on December 3, 2012 - 10:12 am

      Daniel – The branch probability ramp-up speed controls the rate that you will move from the low range of the branch probability to the high range of the branch probability. Here’s how it works:

      Every time a beat that has branches to other beats is played, we may randomly branch to one of the similar beats. Let’s call this probability of taking a branch the ‘current branch probability’. If we take a branch, this current branch probability is reset to the low end of the probability range. If we don’t take the branch, the probability that we will branch is increased. The rate of increase is controlled by the ‘branch probability ramp-up speed’. If you set the the ramp up speed to 100, you will get the maximum ramp up speed, which is 10%. This means, that if you set the slider to 100, every time we play a beat with branches and no branch is taken, we will increase the chance that we will branch on the next beat by 10% up to the maximum probability range. If you set the slider to 50%, the ramp up speed will be 5%. If you set it to 0, there will be no ramp up.

      Hope this rather convoluted explanation helps.


%d bloggers like this: