v0.1.1-alpha.6
·
12 commits
to main
since this release
Stability & Polish
Audio Engine Fixes
- Remove
std::sync::RwLockfrom real-time audio path — zero locks on the PipeWire RT thread, eliminating xruns during EQ changes - Merge redundant peak detection loops into a single pass (~30–40% less peak overhead per buffer)
- Fold preamp multiplication into
AudioEq::process()— eliminates an extra O(n) buffer pass - Fix
Relaxedatomic ordering on peak meters — replaced withRelease/Acquirepairs for correct visibility on ARM (Apple Silicon, Raspberry Pi, AWS Graviton) - Move
pw-link -Isubprocess off the PipeWire mainloop into a dedicated thread — eliminates periodic audio glitches on complex PW graphs
Daemon Reliability
- Crash recovery: daemon auto-saves state (bands, preamp, bypass, connected devices) to
~/.local/share/eqtui/state.tomlafter every
change and restores on startup - TUI reconnection: retry loop with exponential backoff (1s → 2s → 4s → 8s) when the daemon disconnects; TUI stays alive and automatically resumes
- Daemon connection status shown in the monitoring panel (Connected / Reconnecting... / Disconnected)
- Kill orphaned daemon processes on auto-launch timeout (SIGTERM)
- Truncate daemon log on start to prevent unbounded growth
- Graceful shutdown on SIGTERM/SIGINT with clean PipeWire teardown
- Auto-recover from PipeWire disconnects (
eqtui restartsupport)
TUI Improvements
- Preamp value shown above the L/R peak meters in the monitoring panel
- More keybind hints in the status bar (bypass, profiles, reset, command/visual mode)
- Notification when pressing
Cbefore the filter is ready Source: ?indicator when null-sink input state can't be determined--helpand--versionCLI flags
Bug Fixes
- Profile save errors now surfaced instead of silently swallowed
- TUI state updated after daemon confirmation in connect/disconnect, preventing phantom device states
- Bypass mode no longer applies preamp attenuation (unity gain)
- Reject connecting the null sink or filter to itself (feedback loop guard)
- Duplicate
connected_devicesentries on rapid double-Cprevented - Float test tolerance fixed (
f32::EPSILON→1e-3)
Code Quality
- Consolidated 11 standalone default-value functions into typed
implblocks withconstdefaults - Extracted duplicated profile update and band-bumping logic
- Memoized regex compilation in PEQ parser (
LazyLock<Regex>) - Safe regex capture access replacing panic-prone direct indexing
Note
actually we can just call it 0.1.1 to make it the official stable release but idk man i still want to see if there is other vuln or bug.
Full Changelog: v0.1.1-alpha.5...v0.1.1-alpha.6