MP3 Compression: How it Works and Why it Matters

by Morgan Zolob (V00823098) - mzolob@gmail.com

This is my website for my CSC 461 Project on MP3 compression. I will be updating it with information about the project from time to time.

For this project, I plan to investigate MP3 compression on a technical level, learning exactly how it is able to achieve such good compression ratios. I will also research the history of the technology, since it is probably the most widely used music format in the world today. Additionally, I plan to write an MP3 decoder for an Arduino to further help my understanding of the topic.

Planned Schedule

Date Goal
June 4 Have outline of report done and begin working on code
June 11 Have code mostly completed
June 18 Have code completed and running on Arduino, have rough draft of report
June 25 Have final draft of report completed
June 30 Have final version of report and code fully completed

Status Updates

May 28th

The website for this course project has been created. You're looking at it now. Yay!

June 14th

I have begun researching existing MP3 decoders. As they turned out to be more complicated than I initially thought, I have decided to port someone else's work to the Arduino instead of writing my own from scratch. Currently, I am looking into minimp3 by KeyJ as it uses fixed point math, which will be good for the Arduino, which has very poor floating-point performance due to it's lack of an FPU.

June 16th

KeyJ's minimp3 turned out to be very difficult to read and understand, and I have realized that I will need to do quite a bit of work if I want to get this running on an Arduino, due to the Arduino's limited memory. For this reason, I have decided to switch to lief's minimp3 decoder, which despite having the same name is a very different project. It does use floating-point math, which will impact performance on the Arduino, but I think the trade-off is worth it as the code is much easier for me to follow and modify to fit my needs.

June 18th

I have a rough outline of how I want my report to be structured, but I have yet to start working on a draft.

June 24th

I have come to the conclusion that implementing an MP3 decoder on the Arduino Nano/Uno (which is what I am using) is simply not feasable due to the very limited memory available on the devices (2KB of RAM and 32KB of program storage). I have ordered an Arduino with more memory (8KB RAM, 128KB program storage), but I doubt it will get here before this project is due. I may continue working on this just for fun after it arrives, so check back on this page in the future if you are interested.

June 28th

I have been working on my presentation for the past couple days and it is now complete. I will add a link here when it is uploaded.

Update! The video is now uploaded:



July 6th

My report is now completed! If you want to view it, click here.

All the code related to my project can also by downloaded here. I didn't upload it to github because it is kind of a mess and doesn't actually work on the Arduino, but I put it here for completeness. See the readme in that archive for more details.