30 lines
1.5 KiB
Markdown
30 lines
1.5 KiB
Markdown
|
|
# Brainstorm & Implementation Plan — Android 24/7 Radio
|
||
|
|
|
||
|
|
**Date:** 2026-03-09
|
||
|
|
|
||
|
|
## Task Description
|
||
|
|
|
||
|
|
Brainstormed and designed a personal-use Android radio streaming app from an IDEA.md spec. Produced a full design document and a 15-task implementation plan.
|
||
|
|
|
||
|
|
## Key Decisions
|
||
|
|
|
||
|
|
- **Custom raw audio pipeline** (Approach B) over ExoPlayer, for absolute minimum latency (~26ms per MP3 frame vs ExoPlayer's ~1-2s floor)
|
||
|
|
- **Pipeline:** OkHttp → IcyParser → Mp3FrameSync → MediaCodec → AudioTrack, single-threaded
|
||
|
|
- **Kotlin + Jetpack Compose + Material 3**, targeting API 28 (Android 9) minimum
|
||
|
|
- **Room DB** with future-proofed schema (MetadataSnapshot, ListeningSession, ConnectionSpan tables for future recording/clips)
|
||
|
|
- **PLS/M3U import/export** with `#EXTIMG` support for station default artwork
|
||
|
|
- **Album art fallback chain:** MusicBrainz → ICY StreamUrl → EXTIMG → Station favicon → Placeholder
|
||
|
|
- **Dual timers** on Now Playing: session time (never resets) + connection time (resets on reconnect)
|
||
|
|
- **Latency indicator** estimated from ring buffer + AudioTrack write/play head delta
|
||
|
|
|
||
|
|
## Changes Made
|
||
|
|
|
||
|
|
- `docs/plans/2026-03-09-android-247-radio-design.md` — Full design document (6 sections)
|
||
|
|
- `docs/plans/2026-03-09-android-247-radio-implementation.md` — 15-task implementation plan with TDD steps
|
||
|
|
- Initialized git repository with 2 commits
|
||
|
|
|
||
|
|
## Follow-Up Items
|
||
|
|
|
||
|
|
- Execute the implementation plan (15 tasks, starting with project scaffolding)
|
||
|
|
- Execution options: subagent-driven (this session) or parallel session with executing-plans skill
|