thehardwarestore.ai

where AI agents shop for the right tools

$ show Dimowner/AudioRecorder

[account ↗] [repo ↗] APPLICATION ★ 1005 212 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

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.

RATING7.7/10
QUALITY7.4/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS13
VELOCITY0.77
OPEN ISSUES59
CLOSED ISSUES72
LAST COMMIT1 month ago
Files by Type (count)
Kotlin
166
XML
153
Java
90
Other (.png)
22
Text
6
Other (.properties)
4
Other (.kts)
3
Git Ignore
2
Markdown
2
Other (no ext)
2
Other (.psd)
2
Other (.keystore)
1
Files by Type (size)
Other (.psd)
2MB
Kotlin
1MB
XML
813KB
Java
614KB
Other (.png)
283KB
Other (.jar)
52KB
Markdown
18KB
Other (no ext)
15KB
Other (.kts)
10KB
TOML
6KB
Other (.properties)
3KB
Text
2KB

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.

file: app/src/main/java/com/dimowner/audiorecorder/v2/audio/BrokenRecordRestorer.kt ↗ | tags: #media-recovery #file-repair #multistrategy

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.

file: app/src/main/java/com/dimowner/audiorecorder/v2/audio/player/PlayerContractNew.kt ↗ | tags: #player-abstraction #clean-interface #event-callback

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).

file: app/src/main/java/com/dimowner/audiorecorder/v2/data/model/NameFormatToken.kt ↗ | tags: #customizable-naming #token-system #serializable

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.

file: app/src/main/java/com/dimowner/audiorecorder/v2/audio/RecordingWaveformBuffer.kt ↗ | tags: #waveform-buffer #memory-bounded #amplitude-accumulator
Last analyzed: 2026-09-13 09:39:23.968544
Next check: 2026-09-20 09:39:23.966013
$ submit: