$ show Dimowner/AudioRecorder
An Android audio recording and playback application with two coexisting architectures: a legacy Java MVP system (V1) and a modern Kotlin Compose MVVM system (V2). The app supports recording in M4A/AAC, WAV, and 3GP formats with configurable sample rate, bitrate, channel count, and audio source. It features waveform visualization during recording and playback, file management (rename, bookmark, trash, import/export), broken-record recovery, and a customizable name-format builder. The V2 codebase uses Jetpack Compose, Hilt dependency injection, Room database, ExoPlayer, and coroutines, while V1 uses Android Views, SQLite, and manual DI. The dual-codebase design adds complexity and maintenance risk, but the V2 components are well-architected with a clean unidirectional data flow and reusable patterns for media handling and UI state management. The project has extensive localization (18 locales), fastlane metadata for Play Store, and a custom home-screen widget.
The LLM identified 4 files worth highlighting for reuse:
A self-contained pipeline for recovering interrupted audio recordings (WAV, 3GP/AMR, MP4/AAC). It implements multiple fallback strategies: direct MediaExtractor remux, ADTS header generation for AAC, AMR frame scanning, and mp4parser-based atom surgery with heap budgeting. This component could be extracted and reused in any Android app or server-side tool that needs to repair truncated media files.
A clean, minimal interface defining audio player operations (play, pause, seek, setSpeed) and callbacks (progress, completion, error). It abstracts away the underlying player implementation (MediaPlayer or ExoPlayer) and provides a simple contract that can be implemented independently. This pattern is reusable across any Android app needing swappable audio playback backends.
A serializable token system for constructing custom file names from date/time components, counters, and static text. The tokens are used in a drag-reorderable UI builder and can be combined into flexible naming formats. This pattern is reusable in any app that needs user-configurable file naming (e.g., camera, voice memo, document scanner).
A memory-efficient, thread-safe buffer that accumulates amplitude data during a recording session. It implements a uniform compression algorithm to limit memory usage while preserving the overall shape for later visualization. This component is self-contained and can be reused in any audio recording or signal-processing pipeline that needs to produce a fixed-size waveform preview from a variable-length session.