Project 2: MP3 Frame Scanner & Parser

A command-line tool that reads an MP3 file, finds the first frame, and then correctly reads and prints the metadata from every subsequent frame header (sync word, version, layer, bitrate, sample rate). It must correctly identify and skip ID3 tags.

Quick Reference

Attribute Value
Primary Language C
Alternative Languages N/A
Difficulty Level 3: Advanced
Time Estimate 1-2 weeks
Knowledge Area File Parsing / Bit Manipulation
Tooling Hex editor, C
Prerequisites Strong C programming skills.

What You Will Build

A command-line tool that reads an MP3 file, finds the first frame, and then correctly reads and prints the metadata from every subsequent frame header (sync word, version, layer, bitrate, sample rate). It must correctly identify and skip ID3 tags.

Why It Matters

This project builds core skills that appear repeatedly in real-world systems and tooling.

Core Challenges

  • Skipping ID3v2 tags → maps to reading the ID3 header, calculating its size, and seeking the file pointer past it
  • Finding the first frame sync word → maps to reading byte-by-byte and checking for the 1111 1111 111 bit pattern
  • Parsing bit fields → maps to using bitwise AND, OR, and shifts to extract multi-bit values from a 32-bit integer header
  • Calculating frame size → maps to using the bitrate, sample rate, and padding bit from the header to calculate the exact size of the current frame in bytes, so you know where the next header should be

Key Concepts

  • MP3 Frame Header Spec: The official ISO spec or a good online breakdown (e.g., from mpgedit.org).
  • Bitwise Operations in C: & (AND), | (OR), >> (right shift), << (left shift).
  • File I/O: fopen, fread, fseek.

Real-World Outcome

Found ID3v2 tag, 8KB. Skipping.
Frame 0 @ offset 8192: MPEG-1 Layer III, 44100Hz, 128kbps, Stereo
Frame 1 @ offset 8448: MPEG-1 Layer III, 44100Hz, 128kbps, Stereo
...

Implementation Guide

  1. Reproduce the simplest happy-path scenario.
  2. Build the smallest working version of the core feature.
  3. Add input validation and error handling.
  4. Add instrumentation/logging to confirm behavior.
  5. Refactor into clean modules with tests.

Milestones

  • Milestone 1: Minimal working program that runs end-to-end.
  • Milestone 2: Correct outputs for typical inputs.
  • Milestone 3: Robust handling of edge cases.
  • Milestone 4: Clean structure and documented usage.

Validation Checklist

  • Output matches the real-world outcome example
  • Handles invalid inputs safely
  • Provides clear errors and exit codes
  • Repeatable results across runs

References

  • Main guide: LEARN_C_MP3_PLAYER_FROM_SCRATCH.md
  • A good online guide to the MP3 file format.