The inspiration of this project is our love for music. First, Apoorva heard the song, "Simarik" and fell in love with it (it's pretty catchy, you know). Then, Shantanu, Nikhil and Nancy joined in. Eventually, all the people in our housing block got hooked to that song. We wanted a way of enjoying it together across our laptops simultaneously. And hence, we came to HackCMU and built this!
What it does
Surroundify gives you an opportunity to convert your boring dorm room into a party without much effort! It gives you a platform to synchronize an MP3 file across your friends' computers and play it on all of their machines to create a surround-sound effect!
How we built it
We used Tornado, which is a Python WebSockets framework, to create a protocol which synchronizes audio across multiple machines. We also integrated Python with the VLC command line to be able to play songs and ensure that they are in sync across multiple machines. All our front-end used HTML5, CSS3, and Bootstrap. We wrote our own algorithm to synchronize the audio file across all machines by sending a "play" command using the VLC command line. In addition, we did a sinusoidal manipulation on the network latency to improve the quality of sync.
Challenges we ran into
It took us a lot of effort and whiteboarding to flush out the algorithm that would ensure that the audio is in sync. In addition, we ran into a multitude of bugs with WebSockets while implementing it.
Accomplishments that we're proud of
We're really proud that we could make a tool that would sync songs with very little lag. We knew it was a hard problem to solve when we took up this idea, but we're proud that we went through with it and made a cool project in the end.
What we learned
The first few hours of our project involved a lot of research into network latency which gave us a feel of what we had got ourselves into. It was undoubtedly a great learning experience for all of us. In addition, we also gained experience working with front end development in HTML5 and formatting with CSS.
What's next for Surroundify
We'd like to achieve continual interaction across different listeners to improve the reachability and the quality of user experience for our users, and allow for support of different user broadcasts.