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.
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 |
The website for this course project has been created. You're looking at it now. Yay!
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.
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.
I have a rough outline of how I want my report to be structured, but I have yet to start working on a draft.
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.
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:
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.