Releases: TUSHAR91316/Void-Player
Release list
Version 2.3 — Convergence & SML Audio Intelligence Release
What's New in Version 2.3 — Convergence & SML Audio Intelligence Release
Welcome to Void Player 2.3! This release marks the convergence of the mobile and desktop platforms, featuring an on-device Small Machine Learning (SML) audio intelligence engine, upgraded Android 16 support, LRCLIB synchronized lyrics auto-fetching, hardware DSP audio controls, and the brand-new native Windows 11 WinUI 3 desktop client.
Highlights & New Features
1. Embedded Small Machine Learning (SML) Vector Engine
- Multi-Feature Vector Space Modeling: Categorizes local tracks across 12+ genre semantic centroids, acoustic energy vectors, tagged tempo (BPM) closeness, and lexical title/album token matching.
-
Continuous Acoustic Energy Extraction: Computes normalized intensity scores (
$0.08 \dots 0.98$ ) combining genre baselines, embedded ID3/FLAC tempo (BPM), and track duration dynamics. -
Temperature-Scaled Softmax Calibration: Normalizes feature distance scores through temperature-scaled softmax (
$T=12.0$ ), yielding calibrated confidence ratings ($45% \dots 99%$ ) and eliminating unclassified fallback buckets. - 100% On-Device & Private: Runs entirely in local background coroutines. Zero cloud inference, zero network dependencies, and zero telemetry.
2. Harmonic DJ Smart Flow Progression
-
Acoustic Transition Scoring: Intelligently sequences continuous playback by evaluating mood continuity, acoustic energy delta, and tempo variance:
$$\text{FlowScore}(A, B) = \text{MoodContinuity}(A, B) \times 0.45 + (1 - \Delta\text{Energy} \times 1.5) \times 0.35 + \left(1 - \frac{\Delta\text{BPM}}{60}\right) \times 0.20$$ - Prevents abrupt energy jolts or tempo collisions during continuous playback sessions.
3. Void AI Insights ("My Vibe Wrapped")
- Computes your library's musical persona (The Midnight Wanderer, The High-Drive Dynamo, The Deep Focus Architect, The Neon Cruiser, The Acoustic Vagabond, The Heavy Sonic Titan).
- Detailed vibe breakdown percentages, library-wide acoustic energy averages, total listening duration, and recommended hardware equalizer presets.
4. Dual-Engine Synchronized Lyrics (Local LRC + LRCLIB)
- In addition to local
.lrcfiles, Void Player now queries the open-source, privacy-friendly LRCLIB database when local lyrics are absent. - Fetched lyrics are permanently stored in local offline cache (
lyrics_cache/) for seamless offline replay.
5. Hardware Audio DSP & Equalizer
- Native integration with Android
android.media.audiofx.BassBoost(0-1000 strength) and 5-bandEqualizer. - Full persistence for custom EQ presets (Flat, Bass Boost, Vocal Pop, Electronic, Rock, Acoustic), custom band levels, playback speed, and dynamics processing.
6. Android 16 (API 36) Modernization
- Target and compile SDK upgraded to Android 16 (API Level 36, Baklava).
- Removed floating overlay
SYSTEM_ALERT_WINDOWpill island in favor of native system media controls and notification pills. - Asynchronous background artwork extraction on
Dispatchers.IOwith safe 512x512 downsampling to eliminate Android Binder IPCTransactionTooLargeException. - Migrated AI Hub UI from decorative emojis to clean Material vector icons (
Bolt,Headphones,GraphicEq,Favorite,AutoAwesome,MusicNote). - Isolated release signing keystores into
local.propertieswith expanded wildcard gitignores.
7. Native Windows 11 WinUI 3 Desktop Client
- Built with Windows App SDK 2.4, WinUI 3, C#, and .NET 10 (Windows 11 SDK 10.0.26100.0).
- Modern Mica material backdrop, collapsible left navigation rail, Spotify-style bottom player bar, and split-pane 3-column layout.
- Full ID3/FLAC metadata parsing with TagLibSharp and native folder scanning.
- Distributed via Microsoft Store MSIX (
Byte-Labs.VoidPlayer, Store ID:9PCPXRSJ02RS).
Void Player v2.2 — The Flagship UI & AI Update
🎵 Void Player v2.2 — The Flagship UI & AI Update 🚀
Welcome to Void Player Version 2.2! This milestone release completely transforms the interface with a sleek Bottom Navigation Bar, introduces a dedicated full-screen Now Playing screen, and brings cutting-edge AI music intelligence directly to your local audio library with zero telemetry or tracking.
✨ What's New in v2.2
🧭 1. Modern Bottom Navigation & Mini-Player Pill
- Bottom Navigation Bar: Redesigned navigation featuring 4 persistent destinations:
- 🎵 Library: All tracks, favorites, quick sorting, search, and folder picker.
- ✨ AI Hub: Void AI insights, AI DJ Flow, and smart mood collections.
- 📁 Playlists: Custom playlist creation, addition, and playback.
- 💿 Now Playing: Dedicated full-screen player experience.
- Floating Mini-Player Pill: Sits gracefully above the bottom navigation bar with real-time progress line, quick play/pause, next track, and 1-tap expansion.
💿 2. Dedicated Full-Screen Now Playing Screen
- Dynamic Palette Background: Immersive vertical gradient smoothly extracted from the album artwork.
- Hero Artwork with Gestures: Swipe left/right on cover art to skip tracks; swipe down or press back to minimize.
- Interactive Multi-Mode Drawer:
- 💿 Cover: Large high-fidelity album art.
- 📜 Synced LRC Lyrics: Real-time synchronized lyrics with auto-scroll and tap-to-seek.
- 📋 Live Queue: Next-up track list with tap-to-jump.
- ⚡ Speed & Timer: 0.5x to 2.0x playback speed and Gentle Sleep Timer.
🧠 3. Void AI Hub & Smart Music Intelligence
- 📊 Void AI Insights ("My Vibe Wrapped"):
- Automatically determines your musical personality ("The Midnight Wanderer", "The High-Drive Dynamo", "The Deep Focus Architect").
- Breakdown of your listening vibe percentages and total library playback time.
- AI-recommended hardware equalizer curves.
- 🎧 AI DJ Smart Flow:
- Intelligently calculates acoustic energy and mood vectors of the active track to automatically queue the smoothest transitioning next song.
- ✨ AI Smart Categorization:
- Auto-groups your songs into mood/vibe collections: Night Vibes & Lo-Fi, High Energy & Workout, Deep Focus, Romance & Melodic, Quick Hits, and Artist Spotlights.
🎚️ 4. Hi-Res Audio Codec Badge & Inspector
- Lossless & Hi-Res Detection: Automatically identifies
✨ Hi-Res FLAC(24-bit/96kHz),✨ Hi-Res WAV,🎵 AAC HD,🎵 OPUS HD, and🎵 320 kbps MP3. - Interactive Codec Inspector: Tap the badge to inspect sample rates, bitrates, lossless status, and file paths.
💾 5. Persistent Playlists & Favorites
- Custom playlists and favorite tracks are saved to local persistent storage and auto-restored across app restarts.
- 1-tap "Add to Playlist" from any song's options menu (
⋮).
🔙 6. Smart Back Navigation Stack
- Pressing the Android back button or gesture intelligently closes open dialogs, clears active search, or returns to previous tabs/Library rather than abruptly closing the app.
🖥️ 7. Desktop Native Builds (Windows)
- Added Windows Desktop support with standalone portable executable (
VoidPlayer.exe) and MSI installer (VoidPlayer-2.2.0.msi).
📦 Release Assets & Verification
| Platform | Format | Description |
|---|---|---|
| Android | .apk |
VoidPlayer-2.2-release.apk (Signed Release APK) |
| Windows | .msi |
VoidPlayer-2.2.0.msi (Windows Desktop Installer) |
| Windows | .zip |
Standalone portable executable with embedded runtime |
📄 Full Changelog
Full Changelog: v2.1...v2
VoidPlayer Version 2.1 Release Notes
VoidPlayer Version 2.1 Release Notes
Welcome to VoidPlayer 2.1! This update brings critical stability fixes, crash hardening across all components, and adaptive memory improvements to make the player run flawlessly on any device.
Warning
Important Installation Note: Because we upgraded to a new signing key for this release, you must completely uninstall Version 2.0 before installing Version 2.1. If you try to update directly, Android will block the installation with a "Signature Mismatch" error.
What's New in 2.1 🚀
🧠 Architecture & Performance
- Adaptive Memory Architecture: Intelligently queries your device's exact RAM capabilities. Flagship phones get high-fidelity album art; budget devices get downscaled images to maintain speed.
- Bounded Image Cache: A hardware-aware LRU cache for decoded album art bitmaps prevents memory exhaustion when scrolling large libraries.
🎧 Audio Engine
- Proper Audio Attributes: ExoPlayer is configured with
CONTENT_TYPE_MUSICandUSAGE_MEDIAfor correct audio focus behavior and best DAC routing. - Auto-Pause on Headphone Disconnect: Full
AudioManager.ACTION_AUDIO_BECOMING_NOISYintegration — music pauses automatically when you unplug headphones or disconnect Bluetooth. - Real-Time Dynamic Normalization: Android's
DynamicsProcessingDSP chip is used for multiband compression and normalization (API 28+ only). Fully guarded and safe. - Equalizer: Full hardware equalizer bands exposed in Settings, initialized safely after audio session is ready.
🐛 Critical Crash Fixes
All seven confirmed crash causes have been fixed:
-
ForegroundServiceStartNotAllowedException (ANR on Android 12+)
PlaybackServiceis aMediaSessionService. Manually callingstartForegroundService()on it crashes the app on Android 12+ if the service doesn't post a notification within 5 seconds.- Fix: Now uses
context.startService()only. Media3 handles foreground elevation internally.
-
Native SIGSEGV crash in
libeffect(Equalizer / DynamicsProcessing)EqualizerandDynamicsProcessingwere initialized whenaudioSessionIdwas still0. Passing0to native audio effects causes an uncatchable C++ crash.- Fix: DSP initialization moved to
onAudioSessionIdChanged()callback with a non-zero guard.
-
DSP unavailable on device / custom ROM
DynamicsProcessingrequires API 28+ and may be absent on custom ROMs even when the SDK is satisfied.- Fix: API check +
catch(Throwable)on all DSP code (not justcatch(Exception)).
-
SecurityException from undeclared WAKE_LOCK permission
WAKE_MODE_NETWORKandWAKE_MODE_LOCALboth requireandroid.permission.WAKE_LOCK, which was not declared in the manifest.- Fix: Changed to
WAKE_MODE_NONE— correct for local file playback.
-
NullPointerException from
BitmapFactory.decodeByteArray()returning null- Songs with missing or corrupt embedded album art cause
BitmapFactory.decodeByteArray()to returnnull. Calling.asImageBitmap()on null throws NPE inside a ComposeLaunchedEffect, crashing the entire app. - Fix: Added null fallback (
1×1 transparent bitmap) and wrappedtoImageBitmap()intry-catch(Throwable).
- Songs with missing or corrupt embedded album art cause
-
OutOfMemoryError in
loadArt()from large embedded artwork- Very large album art (3000×3000px) can cause
OutOfMemoryErrorwhen loaded viaMediaMetadataRetriever.OOMis anError, not anException, socatch(Exception)missed it. - Fix: Changed to
catch(Throwable)with saferetriever.release()in nested try-catch.
- Very large album art (3000×3000px) can cause
-
OOM / Codec crash from aggressive ExoPlayer configuration
- Custom
DefaultLoadControlwith 50–100MB buffer +EXTENSION_RENDERER_MODE_PREFERcaused OOM on low-RAM phones and codec crashes on devices without extension libraries. - Fix: Removed all custom ExoPlayer configuration. Using clean
ExoPlayer.Builder(context).build().
- Custom
🛡️ Additional Hardening
- OverlayService —
windowManager.updateViewLayout()guarded: Wrapped intry-catchto preventIllegalArgumentExceptionif the overlay was detached before theLaunchedEffectfired. - OverlayService — Album art rendering guarded: Both
toImageBitmap()calls inside the overlay are now wrapped intry-catchfor safe rendering. - PlaybackService — instance null-safety:
VoidPlayerApp.instanceaccess is guarded withtry-catchin case Android restarts the service process without callingApplication.onCreate()first. - OverlayService — instance null-safety:
onStartCommandis guarded withtry-catchfor the same edge case. - Dynamic Island: Fixed permission prompt appearing on every launch. Now shown exactly once.
- Settings Layout: Fixed "Audio Normalization" text pushing the toggle off-screen on narrow displays.
⚙️ Under The Hood
- Minimum SDK raised to Android 8.0 (API 26).
- Added
commonTesttest source set with Kotlin test dependency. - Strengthened
.gitignoreto prevent keystore and APK files from being committed.
Quick summary of all-time crash causes:
| # | Crash Type | Location | Fixed In |
|---|---|---|---|
| 1 | ForegroundServiceStartNotAllowedException |
AndroidAudioPlayer.startPlaybackService() |
v2.1 |
| 2 | Native SIGSEGV (libeffect) |
AndroidAudioPlayer.ensureEqualizer() |
v2.1 |
| 3 | DSP RuntimeException / NoClassDefFoundError |
AndroidAudioPlayer.ensureNormalization() |
v2.1 |
| 4 | SecurityException (WAKE_LOCK) |
AndroidAudioPlayer ExoPlayer init |
v2.1 |
| 5 | NullPointerException (null bitmap) |
ImageUtils.toImageBitmap() |
v2.1 |
| 6 | OutOfMemoryError (large art) |
AndroidSongRepository.loadArt() |
v2.1 |
| 7 | OOM / Codec crash | ExoPlayer LoadControl + RenderersFactory |
v2.1 |
Thank you for using VoidPlayer! This release marks a major stability milestone.
V2.0
VoidPlayer Version 2.0 Release Notes
Welcome to VoidPlayer 2.0! This major update brings a massive overhaul to the user interface, significant user experience enhancements, and important under-the-hood memory optimizations.
What's New in 2.0 🚀
🎨 Complete UI/UX Overhaul
We've moved away from the basic interface to a much more premium, modern, and immersive design.
- Dynamic Gradient Theme: The application no longer relies on static colors. VoidPlayer now extracts the dominant color from the currently playing track's album cover and dynamically applies it to the app's background and player controls.
- Solid Modern Dark Mode: The old glassmorphism effects have been replaced by a sleek, elevated dark surface design that feels significantly faster and looks more professional.
- Redesigned Player Island: The full-screen player has been completely redesigned with a much larger, more prominent album cover display and refined play controls. The compact island also received visual polish.
- Polished Song List: Song items in your library now show visual indications of the currently playing track, complete with an animated waveform that matches the track's dominant accent color.
🧠 Performance & Memory Management Improvements
Behind the beautiful new interface, we've rewritten how the app handles resources.
- Smart Image Caching: We introduced a new, highly efficient LRU (Least Recently Used) cache for album art.
- Smoother Scrolling: By caching
ImageBitmapsinstead of raw byte arrays, the app no longer wastes CPU cycles re-converting images when you scroll through large music libraries. - Reduced Memory Bloat: The new architecture guarantees that the app only keeps what it needs in memory, preventing crashes or slowdowns on lower-end devices.
🛠 Architecture Refactoring
- The underlying codebase was heavily refactored. The monolithic layout logic has been modularized into discrete UI components (
Theme,Header,SongList,PlayerIsland,SettingsDialog), making future updates faster and less prone to bugs.
Thank you for using VoidPlayer! Update your app now to experience the difference.
Void Player v1.5: Speed, Sleekness, & Control
"Fast, fluid, and refined. This update focuses on instant performance and essential playback features, wrapped in our new professional modern dark aesthetic."
✨ New Features
Instant Folder Loading: We've rewritten the scanning engine. Large music libraries now load instantly (skipping heavy metadata checks), so you can hit play immediately.
Shuffle & Repeat: Full control is here! Toggle Shuffle to mix up your tracks, or cycle through Repeat All / One / Off directly from the player.
Modern Dark Theme: A complete visual overhaul replacing the old "Cyberpunk" look with a clean, professional dark mode (#121212 background, White accents, Rounded UI).
🛠 Improvements
Optional Miniplayer Permission: The "Display Over Other Apps" permission is now optional. The app won't force you to settings on launch anymore; the Miniplayer simply won't appear if permission is denied.
System Capsule: The bottom player now features smooth spring animations and a "Dynamic Capsule" design inspired by modern OS aesthetics.
🐛 Fixes
Fixed
DesktopAudioPlayer
crashes on Desktop platforms.
Resolved build issues regarding ColorExtractor and missing resources.
Improved album art loading logic (lazy loading).
G
Stable version
Void Player v1.0 🎧
Kotlin Multiplatform Rebuild
Void Player v1.0 marks a major milestone. The app has been fully rebuilt on Kotlin Multiplatform, introducing a new visual identity, deeper platform integration, and the groundwork for a unified cross-platform future.
🚀 What’s New
Dynamic Island Overlay (Android)
Persistent Overlay: A Dynamic Island–style capsule that remains active even when the app is in the background.
Interactive Controls: View track info, live waveform activity, and control playback directly from the compact island.
Expandable Mini-Player: Tap to expand the capsule into a lightweight mini-player.
Smart Album Art Loading: Dynamically fetches and displays high-quality album artwork for the currently playing track.
Minimalist “Now Playing” Screen
Complete UI Redesign: A high-contrast, minimalist full-screen player focused on clarity and immersion.
Dedicated Controls: Separate Shuffle and Repeat buttons with a solid white active state for improved visibility.
Precision Seeking: Ultra-thin progress bar for a modern look without compromising usability.
Dynamic Theming: Background accents and glow effects adapt in real time using dominant colors extracted from album art.
Professional Audio Tools
Built-In Equalizer: A custom, in-app, multi-band equalizer—no need to rely on system audio settings.
Hardware-Backed Processing: Designed to work efficiently with device audio capabilities.
🛠 Improvements & Fixes
Performance Optimizations: Lazy album art loading significantly improves library scrolling and folder scanning speed.
Folder Persistence: The last selected music directory is now remembered between app launches.
Cross-Platform Foundation: Core architecture stabilized with proper expect/actual implementations for future Desktop (JVM) support.
Android 15 Compatibility: Updated permission handling, including POST_NOTIFICATIONS and READ_MEDIA_AUDIO.
Stability Improvements: General bug fixes and lifecycle handling refinements.
📌 Notes
This release focuses on foundational architecture, UI modernization, and performance.
Cross-platform support is actively in development and will expand in upcoming releases.
ChangeLog
v0.85 - Performance & Stability Update
🚀 Performance Optimizations
- Background Scanning: Moved heavy metadata extraction (reading ID3 tags) to a background
Isolate. This eliminates the "Skipped frames" interruption and UI lag/jank during library refreshes. - Queue Optimization: Refactored
PlayerProviderto prevent reloading the entireAudioSourcequeue when clicking a track in the existing list. This makes playback transitions instant and reduces native bridge overhead.
🛡️ Stability & Crash Prevention
- Background Persistence:
- Updated
AudioServiceConfigwithandroidStopForegroundOnPause: falseto prevent the OS from killing the service when paused or minimized. - Verified
WAKE_LOCKpermissions to keep the CPU active during playback.
- Updated
- Crash Proofing:
- Wrapped all critical
AudioHandlermethods (play,pause,seek, etc.) in globaltry-catchblocks. This ensures the app stays alive even if the audio engine encounters a corrupt file or native error ("mid-song crash" fix). - Fixed race conditions in duration handling that could cause invalid states.
- Wrapped all critical
- Build Fixes:
- Resolved
java.lang.AssertionErrorcaused by Gradle daemon file locking. - Fixed
flutter_lintscompatibility issues by managing dependencies.
- Resolved
🏷️ Smart Metadata & UI Fixes
- Unknown Artist Fallback: Implemented a smart parser that extracts "Artist - Title" directly from the filename if ID3 tags are missing or empty (fixing the "Unknown Artist" / "ay" issue).
- Duration Fix (00:00): Fixed a logic bug where empty metadata tags were overwriting the actual file duration detected by the player. The UI now correctly displays the song length and progress.
- Dynamic Island: Verified logic for the "Capsule" overlay to ensure it appears on top using
SYSTEM_ALERT_WINDOWpermissions.
🧹 Code Quality
- Warning Zero: Cleared all Dart analysis warnings:
- Fixed
invalid_null_aware_operatorandunnecessary_this. - Properly suppressed
deprecated_member_useforConcatenatingAudioSource. - Removed unused imports (
material.dartin provider). - Silenced empty catch blocks with idiomatic
catch (_).
- Fixed
- Refactoring: Cleaned up
AudioHandleroverride signatures to strictly match the interface.
V0.8
2025-12-17
🚀 New Features
- Dynamic Island Overlay:
- Added a system-wide floating "pill" player overlay (Spotify-like) that appears when the app is minimized.
- Interactive "Tap to Expand" animation opening the full player.
- Controls for Play/Pause directly from the overlay.
- Full Screen Player:
- Completely revamped Player Screen with real-time data.
- Added Seek Bar with live position and duration updates.
- Added Shuffle and Repeat loop modes.
- Navigation connected to the Dynamic Island.
- Metadata Extraction:
- Automatically extracts Title, Artist, and Album from audio files using
flutter_media_metadata. - Replaces "Unknown" placeholders with real tag data.
- Automatically extracts Title, Artist, and Album from audio files using
🐛 Bug Fixes
- Startup Crash: Fixed
PlatformExceptionby migratingMainActivityto extendAudioServiceActivity. - Background Playback:
- Configured
AudioSessiontoAudioSessionConfiguration.music()to prevent Android from killing the app in the background. - Fixed "Unknown" notification icon issue causing service termination.
- Configured
- Queue Navigation: Fixed a critical bug where only the first song would play; implemented
skipToQueueItemin the Audio Handler.
⚙️ Technical
- Permissions: Added
POST_NOTIFICATIONS(Android 13+) andBLUETOOTH_CONNECT(Android 12+) support. - Dependencies: Added
rxdartfor stream handling andmetadata_god(in progress) for ID3 tag reading. - Refactoring: Cleaned up
PlayerProviderandAudioHandlercommunication.