Music isn't something meant to be enjoyed alone; music is meant to be shared by everyone. That's why people have come up with arcane ways of sharing music such as splitting ear buds so each person only hears half of the total sound. We wanted to solve this issue because we wanted to share our music without degrading the quality for anyone...and we didn't want distance to be a factor.
What it does
Hymn is a music synchronization platform built upon the music platform we all know and love: Spotify. Hymn works using the concept of "spaces". Let's say Bob wanted to share his favorite song, Hymn for the Weekend, with his friend Joe. He could go onto our app and create a space. A space is the centerpiece of the Hymn experience. A space has a master––in this case Bob. Bob can pick whatever song(s) he wants to play and it plays at the exact same time on everyone's phone. The second Bob changes the song, the song changes on everyone else's phone. The entire process is completely synchronized. And this can take place anywhere. Bob can show Joe his music from 10,000 miles away (so long as both Bob and Joe have an internet connection. But, spaces aren't just limited to Bob and Joe. Bob can invite as many people as he wants to the space by simply sharing his space's identifier (which is always easily pronounceable) or the accompanying scannable QR code. For the first time ever, Bob, Joe, Fred, and up to millions of others can listen to the exact same song at the exact same time.
How we built it
The Hymn platform involves a centralized server running on Linode and an iOS app. The magic of the app is done on the server. Using a combination of websockets and intricate timing techniques, we've managed to almost perfectly synchronize streams without much delay or hiccup. Our server is able to instantly update huge numbers of devices to keep on the proper timing standard.
The other component, the iOS app, serves as an advanced client. Because even a delay of a quarter of a second is so noticeable, we handled certain algorithmic portions of the app client side to maximize speed and stability.
Challenges we ran into
The hardest part was the balancing act of speed and accuracy vs hiccups. The more we forced each device onto the exact same timecode, the more hiccups we experienced. We spent hours finding the exact right combination (and incorporated other techniques to lessen the impact of the downsides of certain strategies) of refresh times, bit rates, and buffer zones from the central clock.
Accomplishments that we're proud of
When we started, we weren't exactly sure if we could get the system to actually work well. When it did, we were thrilled.
What's next for Hymn
We'd like to add more client side features just as handing off the admin privilege of a space, a detailed history, and collaborative queuing system.