Skip to content

Releases: TUSHAR91316/Void-Player

Version 2.3 — Convergence & SML Audio Intelligence Release

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 11 Sep 08:54
0bf484b

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 .lrc files, 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-band Equalizer.
  • 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_WINDOW pill island in favor of native system media controls and notification pills.
  • Asynchronous background artwork extraction on Dispatchers.IO with safe 512x512 downsampling to eliminate Android Binder IPC TransactionTooLargeException.
  • Migrated AI Hub UI from decorative emojis to clean Material vector icons (Bolt, Headphones, GraphicEq, Favorite, AutoAwesome, MusicNote).
  • Isolated release signing keystores into local.properties with 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

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 17 Aug 05:34

🎵 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

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 09 Jul 07:11

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_MUSIC and USAGE_MEDIA for correct audio focus behavior and best DAC routing.
  • Auto-Pause on Headphone Disconnect: Full AudioManager.ACTION_AUDIO_BECOMING_NOISY integration — music pauses automatically when you unplug headphones or disconnect Bluetooth.
  • Real-Time Dynamic Normalization: Android's DynamicsProcessing DSP 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:

  1. ForegroundServiceStartNotAllowedException (ANR on Android 12+)

    • PlaybackService is a MediaSessionService. Manually calling startForegroundService() 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.
  2. Native SIGSEGV crash in libeffect (Equalizer / DynamicsProcessing)

    • Equalizer and DynamicsProcessing were initialized when audioSessionId was still 0. Passing 0 to native audio effects causes an uncatchable C++ crash.
    • Fix: DSP initialization moved to onAudioSessionIdChanged() callback with a non-zero guard.
  3. DSP unavailable on device / custom ROM

    • DynamicsProcessing requires 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 just catch(Exception)).
  4. SecurityException from undeclared WAKE_LOCK permission

    • WAKE_MODE_NETWORK and WAKE_MODE_LOCAL both require android.permission.WAKE_LOCK, which was not declared in the manifest.
    • Fix: Changed to WAKE_MODE_NONE — correct for local file playback.
  5. NullPointerException from BitmapFactory.decodeByteArray() returning null

    • Songs with missing or corrupt embedded album art cause BitmapFactory.decodeByteArray() to return null. Calling .asImageBitmap() on null throws NPE inside a Compose LaunchedEffect, crashing the entire app.
    • Fix: Added null fallback (1×1 transparent bitmap) and wrapped toImageBitmap() in try-catch(Throwable).
  6. OutOfMemoryError in loadArt() from large embedded artwork

    • Very large album art (3000×3000px) can cause OutOfMemoryError when loaded via MediaMetadataRetriever. OOM is an Error, not an Exception, so catch(Exception) missed it.
    • Fix: Changed to catch(Throwable) with safe retriever.release() in nested try-catch.
  7. OOM / Codec crash from aggressive ExoPlayer configuration

    • Custom DefaultLoadControl with 50–100MB buffer + EXTENSION_RENDERER_MODE_PREFER caused 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().

🛡️ Additional Hardening

  • OverlayService — windowManager.updateViewLayout() guarded: Wrapped in try-catch to prevent IllegalArgumentException if the overlay was detached before the LaunchedEffect fired.
  • OverlayService — Album art rendering guarded: Both toImageBitmap() calls inside the overlay are now wrapped in try-catch for safe rendering.
  • PlaybackService — instance null-safety: VoidPlayerApp.instance access is guarded with try-catch in case Android restarts the service process without calling Application.onCreate() first.
  • OverlayService — instance null-safety: onStartCommand is guarded with try-catch for 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 commonTest test source set with Kotlin test dependency.
  • Strengthened .gitignore to 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

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 01 May 05:04

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 ImageBitmaps instead 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

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 06 Jan 08:50

"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

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 23 Dec 16:36

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

ChangeLog Pre-release
Pre-release

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 17 Dec 16:47

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 PlayerProvider to prevent reloading the entire AudioSource queue when clicking a track in the existing list. This makes playback transitions instant and reduces native bridge overhead.

🛡️ Stability & Crash Prevention

  • Background Persistence:
    • Updated AudioServiceConfig with androidStopForegroundOnPause: false to prevent the OS from killing the service when paused or minimized.
    • Verified WAKE_LOCK permissions to keep the CPU active during playback.
  • Crash Proofing:
    • Wrapped all critical AudioHandler methods (play, pause, seek, etc.) in global try-catch blocks. 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.
  • Build Fixes:
    • Resolved java.lang.AssertionError caused by Gradle daemon file locking.
    • Fixed flutter_lints compatibility issues by managing dependencies.

🏷️ 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_WINDOW permissions.

🧹 Code Quality

  • Warning Zero: Cleared all Dart analysis warnings:
    • Fixed invalid_null_aware_operator and unnecessary_this.
    • Properly suppressed deprecated_member_use for ConcatenatingAudioSource.
    • Removed unused imports (material.dart in provider).
    • Silenced empty catch blocks with idiomatic catch (_).
  • Refactoring: Cleaned up AudioHandler override signatures to strictly match the interface.

V0.8

V0.8 Pre-release
Pre-release

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 16 Dec 20:29

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.

🐛 Bug Fixes

  • Startup Crash: Fixed PlatformException by migrating MainActivity to extend AudioServiceActivity.
  • Background Playback:
    • Configured AudioSession to AudioSessionConfiguration.music() to prevent Android from killing the app in the background.
    • Fixed "Unknown" notification icon issue causing service termination.
  • Queue Navigation: Fixed a critical bug where only the first song would play; implemented skipToQueueItem in the Audio Handler.

⚙️ Technical

  • Permissions: Added POST_NOTIFICATIONS (Android 13+) and BLUETOOTH_CONNECT (Android 12+) support.
  • Dependencies: Added rxdart for stream handling and metadata_god (in progress) for ID3 tag reading.
  • Refactoring: Cleaned up PlayerProvider and AudioHandler communication.

v0.5

v0.5 Pre-release
Pre-release

Choose a tag to compare

@TUSHAR91316 TUSHAR91316 released this 16 Dec 19:24