mpeg-audio 0.1.0

Sans-IO MPEG-1/2/2.5 Layer III ("MP3") elementary stream mux and demux (freestanding)
Documentation
# mpeg-audio — roadmap

Sans-IO MPEG-1/2/2.5 Layer III mux + demux (unprefixed). Workspace index: [`docs/roadmap.md`](../../../docs/roadmap.md).

## Stages

### 1 — Layer III mux + demux (this session)

- [x] Crate + naming (ADR-0012) + [`adr/0001`]../adr/0001-mpeg-audio-freestanding-core.md
- [x] `Muxer::write_frame`: 4-byte Layer III header + already-encoded body, per-call padding
- [x] `Demuxer`: incremental `push_bytes`/`poll_frame`, waits on partial frames,
      reads both no-CRC and CRC headers
- [x] MPEG-1, MPEG-2, MPEG-2.5 sample-rate/bitrate tables
- [x] Frame-length formula cross-checked against the standard reference value
      (128 kbps/44100 Hz/no-padding → 417 bytes)

### Deferred (tracked, not silently dropped)

- [ ] Layer I / Layer II — rejected via `Error::UnsupportedLayer`, not implemented
- [ ] Muxer-side CRC support — demux already reads it, mux only ever writes no-CRC
- [ ] ID3v1/ID3v2 tag skip on demux — assumes frame-aligned input, no resync scan
- [ ] Xing/VBR header recognition (first-frame side metadata, not a real audio frame)
- [x] `mediaway-container` facade wiring — `mediaway-container::mp3` (`Demux`
      only; no `Mux` trait fit — real streams need an explicit per-frame
      `padding` bit the generic `Packet` has no slot for) — 2026-07-29