Inspiration
AirDrop for iOS is an outstanding way to quickly share files with nearby devices. This inspired my team and I to create a universal application that achieves a similar goal.
What it does
Uses sinusoid generation and Fast Fourier Transform (FFT) algorithms to encode data as sound waves on one device, project the sounds to another device, and reconstruct the original message.
How I built it
NodeJS is our primary language for easy integration into a website. The p5.js library was our saving grace, as it did lots of the heavy lifting in regards to the FFT algorithm, as well as displaying and manipulating our data.
Challenges I ran into
Choosing appropriate frequencies was very difficult. Without enough time to integrate filtering algorithms for background noise, we were only able to effectively transmit data via high-frequency (and ear-aching) pitches. We also had lots of issues with fine-tuning our listener to ensure it stayed as accurate (and fast) as possible. This is what majority of our time was spent doing.
Accomplishments that I'm proud of
I feel much more confident in JavaScript than I did before. I can't recall the last time I've felt so stoked to see my code work. I practically jumped out of my seat when I saw the message perfectly reconstructed for the first time.
What I learned
What's next for SoundDrop
Making it faster. Currently, we use base 16 with 16 different frequencies. We plan on using chords, which allows for 16 * 15 = 240 different "digits" to work with (we would implement a custom base-264 encoding). At the same transfer speed, this would increase our data transfer rate by a factor of 15! We also plan on redoing our algorithm to allow for emoji to be sent, because, well, who doesn't love emoji?
Built With
- html
- javascript
- p5js

Log in or sign up for Devpost to join the conversation.