$ show ZTFtrue/MonsterMusic
MonsterMusic is a full-featured Android music player application built with Jetpack Compose, Material3, and Media3 (ExoPlayer). It provides local music playback with extensive audio effects including a 10-band equalizer, echo/reverb, spatial audio (virtual surround), pitch/speed control, and real-time FFT visualization. The app reads audio metadata via a bundled copy of the JAudioTagger library, supporting ID3v2, MP4, FLAC, Ogg, WAV, AIFF, and WMA formats. It includes synchronized lyrics display (LRC/SRT), playlist management (M3U import/export), sleep timer, home screen widget, and a drawer-based UI for browsing songs, albums, artists, genres, and folders. The codebase is a hybrid of Kotlin (app logic) and Java (embedded library), with moderate architectural separation via ViewModel, Repository, and Room persistence. While feature-rich, the project shows signs of stalled maintenance; the embedded metadata library is large and may have drifted from upstream, and several Compose APIs are marked experimental. The app is functional but not production-polished, with some dry code and unfinished fragments.
The LLM identified 2 files worth highlighting for reuse:
Central hub managing all audio effects (equalizer, spatial, echo, pitch/speed) for the player. It wraps custom AudioProcessors (EqualizerAudioProcessor, SpatialAudioProcessor, DelayEffect) and coordinates their parameter updates via coroutines. Persists settings to Room and exposes state as Flows. Demonstrates a clean separation of audio effect logic from UI and playback, and could be extracted as a reusable audio effect pipeline for any Android media app.
Composes a scrollable, synchronized lyrics view that parses LRC/SRT/VTT formats and renders timed lines with current-line highlighting. Supports CJK character detection, custom text styling (links, spans), and text selection via a custom toolbar. Uses nested scroll and offset calculations for smooth auto-scrolling. The pattern of wrapping a scrollable text display with time-based state updates and selection handling is reusable for any karaoke or subtitle component.