A free, open-source macOS system-wide 10-band parametric equalizer.
SoundMax sits in your menu bar and applies real-time EQ processing to all system audio, letting you fine-tune your listening experience across any app.
- 10-Band Parametric EQ - 32Hz, 64Hz, 125Hz, 250Hz, 500Hz, 1kHz, 2kHz, 4kHz, 8kHz, 16kHz
- ±12dB Per Band - Precise control with professional biquad filtering
- Built-in Presets - Flat, Bass Boost, Treble Boost, Vocal, Rock, Electronic, Acoustic
- Custom Presets - Save and load your own EQ configurations
- Per-Device Profiles - Automatically save and restore EQ settings for each output device
- HDMI Volume Control - Software volume slider for HDMI outputs (macOS disables hardware control)
- AutoEQ Integration - One-click headphone correction for 150+ popular headphones (via AutoEQ)
- Menu Bar App - Always accessible, no dock icon clutter
- Launch at Login - Optional auto-start with your Mac
- Device Flexibility - Works with various audio interfaces and sample rates
- macOS 13.0 (Ventura) or later
- BlackHole 2ch virtual audio driver
BlackHole is a free virtual audio driver that routes system audio through SoundMax.
brew install blackhole-2chOr download directly from BlackHole Releases.
Option A: Download Release (Recommended)
- Download the latest DMG from Releases
- Open the DMG and drag SoundMax to Applications
- If macOS blocks the app: Right-click → Open → Open
Option B: Build from Source
# Install Xcode Command Line Tools
xcode-select --install
# Install XcodeGen
brew install xcodegen
# Clone and build
git clone https://github.com/snap-sites/SoundMax.git
cd SoundMax
xcodegen generate
xcodebuild -project SoundMax.xcodeproj -scheme SoundMax -configuration Release build-
Set BlackHole as System Output
- Open System Settings → Sound → Output
- Select BlackHole 2ch
- This routes all system audio through BlackHole
-
Launch SoundMax
- Open from Applications or Spotlight
- Look for the slider icon (☰) in the menu bar
- Grant microphone access when prompted (required to capture audio from BlackHole)
-
Configure Audio Routing
- Input: Should auto-select "BlackHole 2ch"
- Output: Select your actual speakers or headphones (e.g., MacBook Speakers, AirPods, Scarlett 2i2)
-
Start Processing
- Click the Start button
- Status indicator turns green when running
┌─────────────┐ ┌───────────┐ ┌──────────────┐ ┌─────────────┐
│ Your Apps │ → │ BlackHole │ → │ SoundMax │ → │ Speakers │
│ (Spotify, │ │ (2ch) │ │ (EQ + DSP) │ │ (Real Audio │
│ YouTube) │ │ │ │ │ │ Output) │
└─────────────┘ └───────────┘ └──────────────┘ └─────────────┘
| Action | Effect |
|---|---|
| Drag slider up | Boost frequency (orange, up to +12dB) |
| Drag slider down | Cut frequency (blue, down to -12dB) |
| Center position | No change (0dB) |
| Toggle switch | Enable/disable EQ processing |
- Select Preset: Use the dropdown menu to choose built-in or custom presets
- Save Custom: Click + to save current EQ settings
- Delete Custom: Click trash icon (only available for custom presets)
- Reset: Click Reset button to return all bands to 0dB
Check the "Launch at Login" box to have SoundMax start automatically when you log in. This setting is managed through macOS Login Items.
SoundMax automatically remembers your EQ settings for each output device:
- First time with a device: Adjust your EQ settings and click "Save Profile"
- Returning to a device: Your saved EQ and volume settings are automatically restored
- HDMI displays: A software volume slider appears since macOS disables hardware volume control for HDMI
This is perfect for users who switch between headphones, speakers, and HDMI displays with different audio characteristics.
SoundMax integrates with the AutoEQ project to provide scientifically-measured frequency response corrections for popular headphones.
- Click the headphones icon (🎧) next to the preset menu
- Search for your headphones or browse the list
- Click to apply the correction curve
- Your EQ is automatically adjusted to flatten your headphone's frequency response
Included headphones (150+):
- Over-ear: Sennheiser HD 560S/600/650/800, Beyerdynamic DT 770/880/990, Sony WH-1000XM4/XM5, Audio-Technica ATH-M50x, HiFiMAN Sundara/Ananda/Edition XS, Focal Utopia/Clear, AKG, Meze, Audeze
- In-ear: Apple AirPods Pro/Pro 2, Sony WF-1000XM4/XM5, Samsung Galaxy Buds, Shure SE series, Moondrop (Aria/Chu/Kato/KXXS), Etymotic ER2/ER4, 7Hz, Tin HiFi, KZ, Truthear, FiiO
- Gaming: HyperX Cloud II, SteelSeries Arctis, Razer BlackShark, Logitech G Pro
- On-ear: Koss Porta Pro/KPH40, Grado SR series
The correction curves are fetched from the AutoEQ database and converted to our 10-band format.
- Verify BlackHole is set as system output in System Settings → Sound
- Check SoundMax shows "Running" status (green indicator)
- Ensure the correct output device is selected in SoundMax
- Try clicking Stop, then Start again
Some apps have their own audio output settings. Check the app's preferences and ensure it's using "System Default" or "BlackHole 2ch" as output.
SoundMax requires microphone permission to capture audio from BlackHole. This is a macOS security requirement for any app that reads audio input.
- Click Allow when prompted
- If previously denied: System Settings → Privacy & Security → Microphone → Enable SoundMax
For unsigned builds, macOS Gatekeeper may block the app:
- Right-click the app → Open → Open
- Or: System Settings → Privacy & Security → Click Open Anyway
- Close other audio-intensive applications
- Try a different output device
- Check Audio MIDI Setup to ensure sample rates match (44.1kHz or 48kHz)
SoundMax attempts to match sample rates automatically. If issues persist:
- Open Audio MIDI Setup (in /Applications/Utilities)
- Set both BlackHole and your output device to the same sample rate
- Restart SoundMax
SoundMax/
├── SoundMax/
│ ├── SoundMaxApp.swift # App entry, menu bar setup
│ ├── ContentView.swift # Main UI
│ ├── Audio/
│ │ ├── AudioEngine.swift # Core Audio routing (AUHAL)
│ │ └── BiquadFilter.swift # Parametric EQ DSP
│ ├── Models/
│ │ ├── EQModel.swift # EQ state management
│ │ ├── EQPreset.swift # Preset definitions
│ │ ├── AudioDeviceManager.swift # Device enumeration
│ │ └── LaunchAtLogin.swift # Login item management
│ └── Views/
│ └── EQSliderView.swift # Custom EQ slider
├── scripts/
│ └── build-release.sh # DMG build script
├── project.yml # XcodeGen configuration
└── README.md
- Audio Framework: Core Audio with AudioToolbox AUHAL units
- DSP: Biquad filters implementing peaking EQ (from Audio EQ Cookbook)
- UI: SwiftUI with MenuBarExtra
- Audio Format: 32-bit float, non-interleaved stereo
- Latency: Minimal (256-512 sample buffer)
./scripts/build-release.shThis creates a DMG installer in the build/ directory.
For signed distribution:
# Sign the app
codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name" build/DerivedData/Build/Products/Release/SoundMax.app
# Notarize
xcrun notarytool submit build/SoundMax-Installer.dmg --apple-id your@email.com --team-id TEAMID --password app-specific-passwordMIT License - See LICENSE file for details.
- BlackHole by Existential Audio - Virtual audio driver
- Audio EQ Cookbook by Robert Bristow-Johnson - Biquad filter coefficients
- Built with SwiftUI and Core Audio