Tone Graph is a small Windows app that routes one app’s audio through a node graph. You pick an input app, wire effects in the middle, pick an output device, hit Run. The sound goes: app → (optional FX) → your speakers/headphones.
Nodes include Input/Output, Gain, EQ, Compressor, Limiter, Gate, Pan, High-pass, Low-pass, Waveform, and Split/Merge L/R so you can treat left and right separately.
Windows does not give you a clean public API to say “take Chrome’s audio and send it through my program.” Tone Graph works around that with VB-Audio Virtual Cable:
1. Park the target app onto the virtual cable (change its output device to CABLE Input).
2. Capture from the cable.
3. Run the FX chain.
4. Play the result to the real output device you chose.
5. On stop, move the app back and unmute.
The painful part is step 1. Per-app output routing uses undocumented WinRT / AudioSes COM (`AudioPolicyConfig` and friends) — reverse-engineered IIDs, not a supported API. Device moves are async and racey, so the code waits and sometimes double-applies restore. Cable detection is basically name matching (“CABLE”, “VB-Audio”), which is brittle. If the app crashes or you kill it, Windows keeps the parked device so the app stays on the cable until you fix it in Sound settings / the mixer.
- 3 devlogs
- 5h