Skip to content

Flick 0.12.0-beta.1

Choose a tag to compare

@ultraelectronica ultraelectronica released this 12 Apr 22:59
· 1206 commits to main since this release
e8ea852

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_audio and 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
  • .nomedia handling

🎛️ 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