Inspiration
Whenever we are at a party and want to play music, we always find that no one person's phone/laptop is loud enough to fill the room. We wanted to make a service that can help us fill the room with sound through people's devices.
What it does
The service detects music stored locally on each device, and has a shared synchronized playlist between devices. Every device can add and remove songs from the playlist (even those not available locally on other devices), and control the music. This allows many devices to be synced together and play the same music at the same time, effectively creating a distributed speaker network in the room.
How we build it
Airwaves consists of 2 parts, the client and the server. The server manages the synchronization of playback and files. The client runs locally in a native app and reads local music files and communicates with the server to handle playback. We also made an Android client app.
Main tech used:
- node.js - evented I/O for the backend
- electron - framework for building desktop GUI applications
- jQuery - javascript library for ease of development
- handlebars - templating engine
- howler - javascript audio library
- Socket.IO - real-time communication framework
- Minio - files storage DB
- Redis - synchronization of groups
Challenges we ran into
Browsers on mobile devices only allow audio to be played as a result of an user interaction like a touch gesture. Thus, a purely web client is not feasible and an android app had to be built. Furthermore, timing is sensitive to even the littlest of prior processing.
Accomplishments that we're proud of
Figured out how to use electron to create native desktop apps, which will definitely be useful in the future. We overcame most of the difficulty in multi-device synchronization and managed to implement syncing.
What we learnt
- Android development
- RESTful apis
- electron
- Handling audio in javascript
- How difficult synchronization really is
What's next for airwaves
We need to make the synchronization more reliable, and add in more music management and playback control features.
Log in or sign up for Devpost to join the conversation.