Now playing: by

0:00 0:00

Set with speed:
Last updated:
(updates when a new song plays)
Jazz Preferences for this interval ():
  • Low Speed Preference: %
  • Medium Speed Preference: %
  • High Speed Preference: %

Last 50 songs played:

Time Name Artist Speed

Note
There is about a 7-10 second delay between when a new song is picked on the orchestrator and when you hear it on stream. This just comes down to stream delay.

What is this?
This is a custom music orchestrator used starting on my 2020 NORAD & Google Santa Tracker Live Stream to dynamically control the preference of jazz music throughout the stream. It goes beyond a normal jazz playlist, by subtly changing the types of jazz songs played to correspond with progress in tracking.

Why build this?
Although my streams have had a great jazz playlist year after year (so good people fall asleep to it, or just leave it on in the background), I wanted to control what type of jazz played on stream during certain parts of tracking.

Sometimes it's a bit jarring to hear a high tempo song at 3 AM after nearly a day of tracking. Sometimes, it's a bit out of place to have a trail of quiet, soft songs playing at 12 PM just as tracking is getting going. The music orchestrator helps solve this problem.

How are the jazz preferences selected?
The jazz preferences are generally based on sunrise/sunset on the East Coast (which go relatively in sync to the progress of tracking), with modifications to take into account the flow of stream viewers during certain times.

As the sun is rising during the early hours of tracking on the East Coast, a slow transition from slower jazz to faster jazz occurs. During the core of tracking in the mid-day, medium/high speed jazz with lyrics takes center stage. This transition is then slowly undone throughout the course of the night.

In the wee hours of the morning on the East Coast as tracking winds down, only slow, smooth jazz plays as this is when most viewers leave the stream on as they sleep from a long day of tracking. This continues into when tracking ends, with a hint of medium speed jazz between 5:30 AM and 6 AM.

For the 24 hours in the day, there are 48 intervals (covering 30 minute blocks) in which there are assigned percent chances for a low, medium, or high speed song to play.

How are the songs categorized?
Generally on their BPM and perceived speed. Low speed songs are basically smooth jazz with no lyrics, and are songs you could fall asleep to. Medium speed songs have a higher tempo, and is the cutoff for songs with lyrics. High speed songs are songs with a fast tempo, lyrics, and generally are songs you wouldn't want to fall asleep to.

What music are you using?
Epidemic Sound, alongside some tracks from the YouTube Audio Library.

What's the breakdown of the intervals?
This graph shows how the songs are selected per each interval, in 100% stacked bar chart form and line chart form. All times in Eastern Time.


The cutoff for when the frequency of songs really declines is around 15-20%. At that point, the frequency of a song can dip to once per hour.

Why limit the high speed songs to 25% of the time?
High speed jazz is definitely a lot to listen to. Especially for background listening, having less intense jazz helps a lot. Additionally, the jazz playlists use have about 10% high speed jazz songs, so keeping the percentage of high speed jazz low helps avoid repetition out of this category.

What's the technical setup for the orchestrator?
The orchestrator has three parts. The music client (using Python/VLC), the server (using Python/Flask/Socket.IO), and the frontend (using vanilla JS with Bootstrap/jQuery/Socket.IO).

Whenever a new song is going to be played, the client reaches out to the server, randomly generates a float from 0 to 1, and then using math figures out if a low speed, medium speed, or high speed song is to be played. This gets returned to the client, and then a random song from that category is played (unless it was in the list of 4 last songs played).

After that, the client posts up to the server the latest song info, which then emits a Socket.IO event to tell the frontend to update song details from the server.

Where can I find the source code for the orchestrator?
Right here: https://gitlab.com/o355/music-orchestrator
The music orchestrator is licensed under the MIT License.
Version 1.2.1 - © 2020-2023 owenthe.dev
Using preferences file v3.2