Inspiration
We'd just spent weeks in class studying Fourier Series on paper, theorems, proofs, problem sets. At some point it hit us that everything we were analyzing abstractly was just music. Every song is a sum of frequencies layered on top of each other. We wanted to stop doing it on paper and actually hear it. That was the whole idea: take a real song, pull it apart by frequency, and listen to the pieces.
What it does
FourierWaveAnalyser takes any WAV audio file and splits it into five frequency bands: sub-bass, bass, mids, highs, and air. Each band is exported as its own playable audio file so you can hear exactly what lives at each frequency range. You can preview every band in the app, select bands to merge back together, and manage multiple tracks in a session with adjustable time offsets for layering sounds on top of each other.
How we built it
The entire audio processing pipeline is written from scratch in Dart. No DSP library, no shortcuts. We implemented the FFT algorithm ourselves, built the bandpass filtering on top of it, and wrote our own WAV encoder and decoder. The app runs completely on-device, no server, no API call, nothing leaves your phone. The UI is Flutter, with custom-painted spectrum and spectrogram visualizers so you can actually see the frequency content of whatever you load.
Challenges we ran into
The biggest challenge was the one we set for ourselves: doing the math purely without leaning on a library or AI to handle the hard parts. Distinguishing frequencies cleanly is genuinely difficult. Getting the filtering to sound right, not just technically correct but actually listenable, took a lot of iteration. There were moments where the extracted bass track sounded like it had ghosts of the other frequencies in it, and fixing that meant going back to the fundamentals of windowing and understanding why it matters. The other challenge was Android build compatibility. We lost a few hours to Gradle plugin conflicts that had nothing to do with audio but blocked us from running the app at all.
Accomplishments that we're proud of
Writing the FFT from scratch and having it actually work on real audio was the moment everything clicked. The whole pipeline, from reading raw WAV bytes to filtering frequencies to writing the output file, is our own code. Hearing a song split into its layers for the first time, and recognizing the kick drum isolated in the bass band or the vocals sitting cleanly in the mids, made all the frustration worth it.
What we learned
That the gap between theory and implementation is smaller than we expected, but the details matter enormously. Understanding the math made the code feel natural to write. Not understanding the details of windowing made our first few attempts sound terrible.
What's next for FourierWaveAnalyser
Supporting MP3 and OGG input directly, letting users define their own custom frequency band boundaries instead of fixed presets, and building a proper multitrack timeline in the session view so layering extracted bands feels more like a real mixer.
Log in or sign up for Devpost to join the conversation.