Skip to content

Releases: ronitsingh10/FineTune

v1.3.2

22 Feb 00:47

Choose a tag to compare

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

Full Changelog: v1.3.1...v1.3.2

v1.3.1

11 Feb 23:39

Choose a tag to compare

✨ 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

Full Changelog: v1.2.0...v1.3.1

v1.3.0

11 Feb 22:49

Choose a tag to compare

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

Full Changelog: v1.2.0...v1.3.0

v1.2.0

31 Jan 22:48

Choose a tag to compare

✨ 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

26 Jan 11:03

Choose a tag to compare

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

19 Jan 00:04

Choose a tag to compare