Inspiration

Inspired by Least Significant Bit steganography methods for images and the fact that one of our team members failed a hearing test so badly the test thought he was 50.

What it does

In short, it takes any audio file (the longer the better) and a message you want to encode. It turns the message into binary and produces high-pitched beeps (over 20 kHz, outside normal human hearing range) to combine with the base audio file. The output would sound just like the original to a human, but has inaudible beeping that can be picked up by a decoder to extract the original binary. Discreet but accessible.

How we built it

The frontend is largely React. Tailwind CSS was used for some visual effects, and various React libraries were used for media displays such as the spectrogram. The backend is a Flask server; the audio encoding is done in Python with the SoundFile and SciPy signal libraries. The decoding is done with a large number of Fast Fourier Transforms over short time samples.

Challenges we ran into

The bitrate (and thus information density) that can be stored in an audio file is limited by the accuracy of Fourier Transforms and the length of the file. We found that increasing the message signal frequency can assist with encoding/decoding accuracy and maximum bitrate. At higher bitrates, we also ran into the problem of audible static due to the rapid toggling of a high-pitched signal. We countered this with Zero-phase filtering to reduce unnecessary feedback.

Accomplishments that we're proud of

Very intuitive UI, brilliant name (think of the McDonald's beepers), relatively high information density, successfully encoded a 3kB picture of a cat into an audio file of "Arabesque".

What we learned

The importance of sample rates in audio processing, the importance of signal filtering when it comes to binary encoding, how to effectively implement a spectrograph in React.

What's next for Fries in the Bag

Time optimization on the encoding and decoding procedures, a user manual, and potentially deployment as a web app (or refinement for local usage).

Built With

Share this project:

Updates