Building Soundish: From Frustration to App Store
The story of how a missing macOS feature led to building a per-app volume controller from scratch — including the technical rabbit holes, design decisions, and lessons learned.
It Started With Discord Being Too Loud
Like most indie apps, Soundish started with a personal annoyance. I was on a Discord call while listening to music, and Discord was drowning out everything. On Windows, I'd just open the Volume Mixer and turn Discord down. On Mac? The only option was to turn down the system volume or dig into Discord's settings.
I searched for solutions. SoundSource by Rogue Amoeba does exactly what I needed, and it's excellent. But at $49 for what I considered a basic utility, I thought — could I build something simpler and more affordable?
The Technical Reality Check
Per-app audio control on macOS is not straightforward. Before macOS 14.2, the only way to intercept individual app audio was through kernel extensions (deprecated) or audio hijacking techniques that felt fragile. Apple's Core Audio framework is powerful but wasn't designed for consumers to tap into individual audio streams.
Then Apple released the Audio Tap API in macOS 14.2 Sonoma. This was the game-changer. For the first time, there was an official, supported way to create process-level audio taps — intercept an app's audio, modify it, and route it to any output device.
The HAL Driver Rabbit Hole
Even with the Audio Tap API, you can't just grab an app's audio and play it at a different volume. You need a virtual audio device to route the tapped audio through. This meant building a HAL (Hardware Abstraction Layer) audio driver.
Writing a HAL driver is one of those things that sounds simple ("it's just a virtual audio device") but is anything but. The documentation is sparse, the debugging tools are minimal, and when something goes wrong, CoreAudio just silently fails.
The driver needs to create a virtual device that the system recognises, accept audio input from the tapped process, apply volume adjustments in real-time, and output the modified audio to whatever physical device the user has selected. All of this happens on the audio thread, which means no allocations, no locks, no blocking calls.
The Chrome Problem
Early testing went smoothly with simple apps. Then I tried Chrome.
Chrome doesn't produce audio from its main process. It spawns helper processes — "Chrome Helper (Renderer)" and "Utility: Audio Service" — and audio comes from those. The same is true for most Chromium-based browsers (Brave, Edge, Opera) and Electron apps (Discord, Slack, VS Code).
This meant the app needed to detect parent-child process relationships, find which child processes are producing audio, create audio taps for multiple processes per app, and handle processes that start and stop dynamically as tabs open and close.
This single issue probably doubled the development time.
Design Decisions
A few key decisions shaped the app. Keeping it in the menu bar was non-negotiable — an audio controller needs to be always accessible but never in the way. Volume overdrive (0–200%) came from testing with quiet YouTube videos. Some content is just too quiet even at 100% system volume.
Profiles were a later addition but turned out to be one of the most-used features. Being able to switch between a "Work" profile (Discord quiet, Spotify medium) and a "Gaming" profile (everything loud) saves a surprising amount of daily friction.
Lessons Learned
Building Soundish taught me a few things. First, Apple's audio frameworks are powerful but under-documented. A lot of the HAL driver knowledge lives in decade-old mailing list posts and WWDC sessions. Second, the gap between "it works on my machine" and "it works for everyone" is enormous, especially with audio where every Mac has a different hardware configuration.
Third, competing with established tools is less scary than it sounds. SoundSource is the gold standard, but not everyone needs (or wants to pay for) its full feature set. There's room for focused, affordable alternatives.
What's Next
Soundish is still actively evolving. There's a roadmap of features I'd love to add — things users have been asking for. But the core philosophy stays the same: do the basics really well, keep it lightweight, and make it affordable.
If you've ever wished macOS had a volume mixer, give Soundish a try. There's a free trial, so you've got nothing to lose.