• version-0.4.21 d9c1910b04

    version-0.4.21
    All checks were successful
    Release / create-release (push) Successful in 10s
    Stable

    eric released this 2026-09-20 00:45:13 +02:00 | 79 commits to main since this release

    • Added previous track playback from renderer queue with dedicated API endpoint

    • Implemented Volume, Seek, and Mute control commands

    • Added purge command to reset queue state; redefined stop as a backend sequence of pause + purge

    • Introduced flow control with client-side back-pressure, epoch/grant signals, and explicit state management

    • Corrected playback position calculation after seek; progress bar now resets accurately based on epoch start times

    • Resolved epoch management issues ensuring unique initialization and preventing expired epochs from discarding audio frames

    • Fixed missing sample rate handling during encoder setup

    • Eliminated deadlocks and track continuation limitations in control point queue management

    • Improved underrun frame tracking and buffering to prevent startup glitches

    • Aligned client-side state enumeration with PlaybackState::Stopped removal

    • Refactored playback pipeline with epoch-aware transition gating for gapless playback status

    • Migrated track announcement logic to the renderer; implemented async queue management with prefetching

    • Introduced DeviceAdapter trait defining stop/seek/load handlers and device contracts

    • Decoupled client logic into a platform-agnostic player core for WebPlayer

    • Enhanced transport layer: handles client reconnections, discards stale streams, and manages restarts via Session struct

    • Renderer now handles thread-safe command dispatch and PCM chunk processing

    • Updated protocol serialization for position reporting with new start_sec field

    • Synchronized UI with actual audio playback events; refined natural vs. user-initiated track transition handling

    • Implemented broadcast pacing/cancellation via stop_token; added intelligent backpressure to skip frames on timing failures

    • Enforced interruptible auxiliary task requirements to fix pacing issues and allow direct task abortion

    • Refined position event pipeline to ignore unreliable general data; PlayerEvent::TrackEnded now transitions state to PlaybackState::Transitioning

    Downloads