Flick 0.12.0-beta.1
Flick v0.12.0-beta.1
This release focuses on engine intelligence, massive performance gains, and playback stability.
A lot of internal systems were redesigned to make Flick faster, smarter, and more reliable—especially for large libraries and external DAC setups.
🚀 Highlights
- ⚡ Massive scan speed improvement (minutes → seconds)
- 🔄 Dynamic audio engine switching (Android ↔ Rust)
- 🎧 DAC-aware playback with capability detection
- 🧠 Hybrid scanner (event-driven + two-phase)
- 🎛️ Better audio processing, EQ, and FX system
- 📂 Expanded format support (OGX, OPUS)
- 🖼️ Embedded artwork extraction across the app
- 🔊 Fixed volume & mute desync issues
🔊 Audio Engine & Playback
- Added dynamic backend handoff between
just_audioand Rust engine - Introduced EngineManager for centralized engine lifecycle control
- Implemented DAC detection + capability-aware routing
- Added lazy engine initialization (no unnecessary startup cost)
- Improved playback continuity during engine switching
- Added audio focus management and interruption handling
- Added prepared decoder + engine prewarming for faster playback start
Result:
Playback is now more stable, faster to start, and adapts automatically to your audio setup.
⚡ Library Scanning (Major Upgrade)
-
Introduced Hybrid Scanner architecture:
- Two-phase scan (fast indexing)
- Event-driven updates (real-time changes)
-
Added parallel scanning (jwalk) + chunked metadata processing
-
Fixed critical recursion issue causing repeated full directory scans
Performance improvement:
- Before: ~12 minutes
- After: ~11.8 seconds
This is based on a test using the following device and folder scanned:
- Device: HiBy R4
- RAM: 3GB RAM
- Folder Size: 58.58GB
- Total Music Files: Approximately 1200+
Also added:
- Scan preferences (filter small/short files, playlists, etc.)
- Playlist source tracking + sync
.nomediahandling
🎛️ Audio Processing & FX
-
Replaced old EQ system with JustAudioProcessingController (Android)
-
Added advanced FX controls:
- Balance, tempo, delay, width, feedback, etc.
-
Added EQ preset import/export (JSON/TXT)
-
Improved bitrate normalization and metadata handling
🎧 USB DAC & DAP Improvements
- Added bit-perfect mode support improvements
- Implemented audio session management
- Added USB session lifecycle handling
- Added audio diagnostics + runtime debug state
- Improved DAC reconnection and device switching
🔊 Volume & Mute Fix (Important)
- Fixed volume/mute desync issue caused by race conditions
- Implemented native Android volume observer
- Unified state using Riverpod Notifier (single source of truth)
Result:
Volume, mute, and slider are now always in sync—even with hardware buttons.
🎵 Queue & Player UX
- Added queue navigation (swipe + tap access)
- Added "View Queue" quick action
- Improved now playing → queue transition
- Added lyrics toggle with animated layout
- Improved track completion + index sync
🖼️ Artwork & UI
- Added embedded artwork extraction
- Introduced AlbumArtService with caching
- Replaced image loading with CachedImageWidget (async + fallback)
- Added Orbit Selection Deck UI with haptics
- Improved performance (RepaintBoundary, async IO)
📂 Format Support
-
Added support for:
- OGX
- OPUS
-
Improved file detection and normalization
-
Added WAV conversion caching to avoid repeated failures
🔁 Playback Logic Improvements
- Refined shuffle and loop behavior
- Added fast-start logic for single tracks
- Improved playlist synchronization
- Fixed engine race conditions during startup
🧪 Testing & Reliability
-
Added tests for:
- Format detection (OGG, OGX, OPUS)
- Shuffle ordering
- Loop handling
- Metadata normalization
-
Improved internal logging and debug tools
🧱 Internal Refactors
- Centralized initialization into
PlayerService - Removed duplicate engine setups
- Introduced abstract AudioEngine interface
- Cleaned up unused components and legacy logic
🧭 Direction
This update is a major step toward:
- Stable, production-ready playback
- True hi-fi experience (DAC-aware, bit-perfect path)
- Scalable architecture for large libraries