Android Rust music player with modern features
  • Kotlin 49.2%
  • Rust 27.5%
  • C 21.9%
  • CMake 1.3%
  • Shell 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-16 15:42:02 +03:00
.cargo Add .cargo/config.toml 2026-08-12 20:57:24 +03:00
android Untrack audio tracks, database, logs and scratch scripts 2026-08-16 15:42:02 +03:00
native/opus/aarch64-linux-android Add WebDAV support with recursive scanner, streaming, and UI integration 2026-08-14 06:47:16 +03:00
src Fix clear_shared_tracks field accesses in player.rs 2026-08-15 20:41:24 +03:00
tests Add unit test verifying Opus duration parsing 2026-08-14 07:15:04 +03:00
.env.example Add .env.example template for WebDAV test harness 2026-08-15 06:53:04 +03:00
.gitignore Add log, dump, fix scripts and native exception rules to .gitignore 2026-08-16 15:41:58 +03:00
architecture.md Add architecture.md 2026-08-12 20:57:25 +03:00
build.sh Add WebDAV support with recursive scanner, streaming, and UI integration 2026-08-14 06:47:16 +03:00
Cargo.lock Update Cargo.lock with tiny_http dependencies 2026-08-14 20:53:59 +03:00
Cargo.toml Add tiny_http, serde, and serde_json dependencies for Shared Library server 2026-08-14 20:51:59 +03:00
README.md Expand Architecture Refactoring and Code Simplification TODO in README.md 2026-08-15 20:38:19 +03:00
test_audiopus.rs Fix race condition in start_at causing phantom background tracks, ensure safe stream handling 2026-08-12 22:00:25 +03:00
test_collate.rs Add test_collate.rs 2026-08-12 20:57:33 +03:00
test_lofty.rs Add test_lofty.rs 2026-08-12 20:57:33 +03:00
test_opus.rs Fix race condition in start_at causing phantom background tracks, ensure safe stream handling 2026-08-12 22:00:25 +03:00
tests_moosic.rs Fix race condition in start_at causing phantom background tracks, ensure safe stream handling 2026-08-12 22:00:25 +03:00
TODO.md Mark WebDAV sync, metadata, and sorting tasks as completed in TODO.md 2026-08-14 06:55:17 +03:00

RS Music Player

A fast and modern music player with a Rust core and a beautiful Jetpack Compose UI.

TODO (Ordered from Simple to Complex)

🟢 Easy

  • Notification Close Button: Add a stop/close button directly in the Android media notification.
  • Marquee Text: Make long track titles/artists smoothly scroll back and forth (marquee) if they don't fit the screen.
  • Clear Grouped Queue: Add a button to delete a specific grouped queue entirely (rather than removing all queues/tracks).
  • (Low Priority) Quick Settings Tile: Add a tile in Android's quick settings shade for rapid player access.

🟡 Moderate

  • Independent Volume Control: Add a dedicated volume slider (0-100%) independent of the system volume (like Namida).
  • Bluetooth Auto-Reconnect: Seamlessly reconnect and re-initialize audio streams when Bluetooth headphones connect or disconnect.
  • Sleep Timer: Allow setting a timer to automatically pause playback.
  • Queue End & Playback Behaviors: Add flexible settings for what happens when a track/queue ends (Loop queue, Stop playback, Remove played tracks from queue).
  • Smart Playlists (Rules-based): Auto-updating playlists based on rules like "Added recently" or "Most played".
  • Local Statistics & Scrobbling: Built-in listening stats (like Wrapped) and Last.fm/ListenBrainz scrobbling.
  • Built-in Tag Editor: Edit track titles, artists, and cover art directly from the app (saving to the file).
  • (Low Priority) Android Auto & WearOS: Extend support to cars and smartwatches.
  • Dedicated Shared Library Browser: Browse, search and play tracks from connected P2P/LAN shared servers inside the dedicated Shared Library screen instead of polluting local explorer tree.

🟠 Hard

  • Lockscreen Player: Full integration with Android's lockscreen via MediaSession.
  • Pitch & Speed Control: Add a modal for playback speed and pitch adjustment, with an option to link/unlink their coefficients (requires Rust DSP/resampling).
  • Playlists & Library Grouping: Create a dropdown menu for Playlists, and implement grouping by Artists, Genres, etc. (Requires DB schema and UI updates).
  • Lyrics (.lrc) Support: Support parsing external .lrc files and embedded lyrics tags, with a synchronized UI view.
  • Translated & Multi-language Lyrics: Side-by-side synchronized translation support for foreign tracks.
  • ReplayGain (Loudness Normalization): Read ReplayGain tags and normalize perceived volume across tracks via Rust DSP.
  • Gapless Playback: Perfect, sample-accurate gapless transitions for live and concept albums (Audio pipeline enhancement).
  • Crossfade & Silence Trimming: Configurable crossfade blending between tracks and automatic silence removal at the start/end of songs.
  • Bluetooth Lag Compensation: Detect audio dropouts or high latency with Bluetooth devices and dynamically adjust buffer sizes to compensate.
  • Parametric EQ & Bit-perfect Output: Beyond a simple 5-band EQ—a full parametric equalizer and a bit-perfect output mode bypassing Android's resampler.
  • Architecture Refactoring & Code Simplification (High Priority):
    • Decompose Monolithic PlayerViewModel: Split the god-object into separate, focused ViewModels/StateHolders:
      • PlaybackViewModel (Playback controls, queue management, volume, speed/pitch DSP).
      • ExplorerViewModel (File tree generation, folder navigation stack, local directory browsing).
      • SharedLibraryViewModel (mDNS service discovery, remote P2P sync, heartbeat, and remote connection states).
    • Lifecycle & Coroutine Hygiene: Eliminate race conditions from multiple uncoordinated LaunchedEffect(Unit) blocks and delay(50) polling loops across MainActivity, PlayerScreen, and PlayerHolder.
    • Single Source of Truth: Unify track queries and SQLite database operations through a clean repository layer, preventing stale in-memory state and ghost folders.
    • UI Component Extraction & Reuse: Extract universal components (TrackRow, FolderRow, MediaDropdownMenu, HeaderTopBar) into modular composables instead of duplicating markup and logic across screens.

🔴 Very Hard / Architectural

  • Giga-Fast Background Parsing: Radically speed up library indexing by initially scanning just filenames/.nomedia, while parsing rich metadata (tags) in a background thread.
  • Network/Cloud Streaming Protocols: Support remote playback via:
    • WebDAV / WebDAVS
    • JellyFin
    • SFTP
  • Smart Audio Caching: Implement a configurable caching mechanism for frequently played network/cloud tracks.
  • UI Plugin System & Customization: Support extreme customization through community UI plugins. How is this possible in Kotlin/Compose?
    1. Theme Engine (JSON/DSL): Allow users to load JSON files overriding colors, paddings, typography, and component order (e.g., swapping the position of the slider and buttons).
    2. Server-Driven UI (SDUI) approach: Build a declarative JSON parser for Compose. A plugin provides a JSON tree (e.g., {"type": "Row", "children": [...]}) which Kotlin dynamically maps to native Compose composables.
    3. Embedded Scripting (QuickJS / Lua): For logic-heavy plugins, embed a lightweight JS/Lua engine. The script can react to Rust player events and return updated UI states or formatted strings to the Compose layer.