Side Project: Jam-Sync
Happy to announce the launch of another side project: Jam-Sync.
Jam-Sync is a collaboration with my younger brother, Greg. It’s a simple web app that allows musicians to know what chord to play while jamming. It’s meant for multiple musicians in the same room, who can put their phone, tablet, or laptop in view while they play.
We got the idea during Dropbox happy hour this summer. It was a great party and late in the evening we found our way to Dropbox’s awesome music room. Greg plays piano and I play guitar. We picked up a drummer and bass player and started jamming. Slight problem: we kept forgetting what chord we should play as we went through the progressions.
Greg was living with me for the summer, doing an internship in the tech scene. He’s been teaching himself to code and we were looking to collaborate on a fun project. Soon after the Dropbox jam session we chose the problem from that night; we decide to build an app to help musicians stay on the right chord when jamming.
We built the first prototype in a few hours and have since added some key features such as editing the chords, changing the beats-per-minute, and having multiple ‘rooms’ a user can enter.
It was fun and easy to build. We used Angular for the front-end and Firebase to sync between clients. Depending on interest, there are a bunch of directions we can extend the app: longer chord progressions, different time signatures, suggested scales, and diagrams to show how to play the chords.
Check it out here and use it the next time you jam!
Geeky side-story: Clock Skew
Getting the starting time to sync between clients was no easy task. We thought we only had to worry about latency and aimed to get around it by syncing a start time far enough in the future. Latency was the least of our time problems.
We learned that most devices have different internal clock times - the deviation is known as clock skew. Lucky for us, Firebase can estimate the difference between local time and server time - check it out here. With the Firebase fix, it was easy to adjust for the skew and get multiple devices to start the chord progression at the same time - crisis avoided!