Releases: ronitsingh10/FineTune
v1.3.2
🛡️ Audio Engine Hardening
This release is a comprehensive reliability overhaul of FineTune's audio engine — no new features, just a significantly more robust experience under the hood.
🔇 Crash Recovery
- Orphaned device cleanup — If FineTune crashes or is force-quit, aggregate devices are now cleaned up automatically on next launch, preventing the "apps go silent" issue
- Signal-safe crash guard — Aggregate devices are destroyed during crashes before the process exits, reducing orphaned devices in the first place
🎚️ EQ & Audio Quality
- Soft limiter — Post-EQ clipping prevention catches digital distortion when bands are boosted aggressively
- Preamp attenuation — Signal is reduced before EQ processing proportional to max boost, preventing internal clipping
- Nyquist guard — EQ bands near or above the Nyquist frequency (e.g. 16kHz at 32kHz sample rate) now pass through cleanly instead of producing robotic artifacts
- High sample rate support — Fixed unstable biquad filters on 96kHz+ devices
🎙️ Bluetooth & Voice Apps
- Bluetooth HFP distortion — Fixed audio distortion when using Bluetooth headphones with voice apps like FaceTime, Discord, and Zoom
- Extended Bluetooth warmup — Bluetooth device switches now use a 300ms warmup (vs 50ms wired) to account for firmware handshake latency
- Rapid reconnect handling — Fixed race conditions during rapid Bluetooth connect/disconnect cycles
🔄 Device Switching
- Crossfade state machine — Device switches use a proper RT-safe state machine, eliminating race conditions that could cause glitches
- Correct teardown order — Tap lifecycle management enforces Stop → DestroyIOProc → DestroyAggregate → DestroyTap ordering, preventing resource leaks
- Re-entrant switch guard — Rapidly switching devices no longer causes resource leaks from overlapping crossfades
🔊 Volume Control
- Fallback chain — Volume reading now tries VirtualMainVolume → VolumeScalar → channel 1, supporting more diverse hardware
- Correct API usage — VirtualMainVolume queries now use AudioHardwareService APIs (matches system volume slider behavior)
🐛 Bug Fixes
- DDC monitor leak — Fixed io_service_t resource leak and observer cleanup race in DDC controller
- Monitor deinit — Added proper observer cleanup on deallocation for DDC, audio device, and process monitors
- Volume listener lifecycle — Overhauled DeviceVolumeMonitor to properly register and unregister HAL listeners
- Mono device check — Fixed off-by-one in stream readiness check for mono output devices
- Escape to dismiss — Press Escape to close the menu bar popup (with smooth animation)
- Percentage width — Fixed UI jitter in the percentage display field
What's Changed
- Fix percentage width UI glitch by using fixed width instead of minWidth by @fcsonline in #94
- feat(ui): add Escape key to dismiss menu bar popup by @AbdulEmad in #97
New Contributors
- @fcsonline made their first contribution in #94
- @AbdulEmad made their first contribution in #97
Full Changelog: v1.3.1...v1.3.2
v1.3.1
✨ New Features
🖥️ Monitor Speaker Control (DDC)
- External display volume — Control speaker volume on HDMI/DisplayPort monitors via DDC
- Auto-detection — Monitors with DDC support are detected automatically on connect
- Hot-plug safe — Debounced re-probing handles monitor connect/disconnect reliably
📋 Device Priority
- Priority ordering — Set preferred output device order; highest-priority device becomes default on disconnect
- Edit mode — Drag-and-drop or type a number to reorder devices inline
- Input fallback — Input devices also follow priority order on disconnect
- Persistent — Priority order survives app restarts
🔗 URL Schemes
- Automation ready — Control FineTune from Terminal, scripts, Shortcuts, or Raycast
- 6 actions —
set-volumes,step-volume,set-mute,toggle-mute,set-device,reset - Multi-app support — Set different volumes for multiple apps in a single URL
- Inactive app support — Pre-configure apps before they start playing
- Copy device UID — Click the copy button in edit mode to get device UIDs for URL automation
🔧 Improvements
- Device icons — More audio device classifications with appropriate icons
- Help tooltips — Hover over device and app names to see full names when truncated
- Hardware-only volume — Devices without software volume control (e.g. USB audio interfaces) no longer show non-functional sliders
- Virtual input devices — Now shown in input device list while still filtered from outputs
🐛 Bug Fixes
- Monitor volume slider — Fixed DDC monitor control not working in release builds (App Sandbox was blocking IOKit access)
- Auto-update — Fixed Sparkle update checks failing in release builds (same sandbox issue)
- RadioButton icon — Fixed selected device icon not displaying correctly
- Edit mode styling — Matched hint text style to header status text
- DDC probe debounce — Delayed re-probe on monitor hot-plug to avoid race conditions
What's Changed
- feat: add URL schemes by @Boettner-eric in #1
- fix(RadioButton): fix selected device icon by @St1ggy in #77
- Add help tooltips for device/app names. by @jfexyz in #85
- feat(ui): add more audio device classifications (icons) by @956MB in #93
New Contributors
- @Boettner-eric made their first contribution in #1
- @St1ggy made their first contribution in #77
- @jfexyz made their first contribution in #85
- @956MB made their first contribution in #93
Full Changelog: v1.2.0...v1.3.1
v1.3.0
⚠️ Auto-update is broken in this version. Please download v1.3.1 manually for the latest fixes, including restored monitor volume control and working auto-updates going forward.
✨ New Features
🖥️ Monitor Speaker Control (DDC)
- External display volume — Control speaker volume on HDMI/DisplayPort monitors via DDC
- Auto-detection — Monitors with DDC support are detected automatically on connect
- Hot-plug safe — Debounced re-probing handles monitor connect/disconnect reliably
📋 Device Priority
- Priority ordering — Set preferred output device order; highest-priority device becomes default on disconnect
- Edit mode — Drag-and-drop or type a number to reorder devices inline
- Input fallback — Input devices also follow priority order on disconnect
- Persistent — Priority order survives app restarts
🔗 URL Schemes
- Automation ready — Control FineTune from Terminal, scripts, Shortcuts, or Raycast
- 6 actions —
set-volumes,step-volume,set-mute,toggle-mute,set-device,reset - Multi-app support — Set different volumes for multiple apps in a single URL
- Inactive app support — Pre-configure apps before they start playing
- Copy device UID — Click the copy button in edit mode to get device UIDs for URL automation
🔧 Improvements
- Device icons — More audio device classifications with appropriate icons
- Help tooltips — Hover over device and app names to see full names when truncated
- Hardware-only volume — Devices without software volume control (e.g. USB audio interfaces) no longer show non-functional sliders
- Virtual input devices — Now shown in input device list while still filtered from outputs
🐛 Bug Fixes
- RadioButton icon — Fixed selected device icon not displaying correctly
- Edit mode styling — Matched hint text style to header status text
- DDC probe debounce — Delayed re-probe on monitor hot-plug to avoid race conditions
What's Changed
- feat: add URL schemes by @Boettner-eric in #1
- fix(RadioButton): fix selected device icon by @St1ggy in #77
- Add help tooltips for device/app names. by @jfexyz in #85
- feat(ui): add more audio device classifications (icons) by @956MB in #93
New Contributors
- @Boettner-eric made their first contribution in #1
- @St1ggy made their first contribution in #77
- @jfexyz made their first contribution in #85
- @956MB made their first contribution in #93
Full Changelog: v1.2.0...v1.3.0
v1.2.0
✨ New Features
🎤 Input Device Control
- Microphone monitoring — View and control input devices (microphones) alongside output devices
- Tabbed interface — Seamlessly switch between Output and Input devices with a sleek pill toggle
- Input level & mute control — Adjust input gain and mute state for any microphone
🔊 Multi-Device Output
- Aggregate device support — Route app audio to multiple output devices simultaneously
- Multi-device picker — Select multiple devices with checkbox interface in Multi mode
- Mode toggle — Switch between Single and Multi device modes per app
📌 Pinned Apps
- Pin your favorites — Keep apps visible in the list even when they're not playing audio
- Pre-configure settings — Set volume, EQ, and device routing before an app starts playing
- Persistent pins — Pinned apps and their settings survive app restarts
🔧 Improvements & Stability
- Bluetooth codec protection — Input device lock prevents Bluetooth audio quality downgrade when monitoring microphones
- Bluetooth timing — Improved device warmup delay (300ms) for more reliable volume readings on Bluetooth devices
- System sound sync — Validates "follow default" preference on startup and enforces it if macOS state drifted
- Explicit shutdown — Clean audio engine shutdown on app termination
- Code architecture — Extracted reusable components (AppRowControls, BaseMuteButton, CrossfadeOrchestrator) for better maintainability
- Consolidated state — Unified volume/mute/identifier into AppAudioState for cleaner data flow
- Auto-updates — Fixed Sparkle installer for sandboxed app; future updates will install automatically
🐛 Bug Fixes
- Popover flicker — Fixed visual flickering when popover content updates by reusing hosting view
- System daemon filtering — Added more Apple system processes to filter list (FrontBoardServices, NotificationCenter, etc.)
- Multi-device toggle — Hidden in Settings device picker where it doesn't apply
- Popover reactivity — Fixed content not updating when state changes while popover is open
- EditablePercentage — Improved discoverability and click-outside behavior
v1.1.0
FineTune 1.1.0 brings a settings panel, sound effects routing, automatic updates, and improved device handling.
Features
- Settings panel — Launch at login, 4 menu bar icon styles, configurable default volume (10-100%), and max boost up to 400%
- Sound effects routing — Route system alerts, Siri, and notifications to any output device
- Automatic updates — Built-in Sparkle integration keeps you current
- "System Audio" routing — Apps can follow your macOS default device automatically
- Smart device reconnection — Routing preferences restore when devices reconnect
- Editable volume input — Click the percentage anywhere to type an exact value
Improvements
- Volume boost up to 400%
- Linear volume mapping
- Better USB audio interface support (MOTU, Focusrite, SSL, FIFINE)
- Device readiness checks prevent race conditions
- Polished UI with improved touch targets and typography
- Filtered system audio daemons from app list
Bug Fixes
- Fixed buffer routing for multi-channel USB interfaces
- Fixed EQ presets unreadable on dark backgrounds
- Fixed dropdown menu clipping
- Corrected default output device property
v1.0.0
Full Changelog: https://github.com/ronitsingh10/FineTune/commits/v1.0.0