Documentation / SpectralMediator

SpectralMediator — User Manual

Documents version 1.3.1 Download as PDF Product page → Français

Anti-masking spectral dynamics plugin — v1.3.1

SpectralMediator solves the most common problem in mixing: two tracks fighting for the same frequency range. By exchanging FFT magnitude bins and per-band energies through shared memory between two instances on different channels, each instance dynamically carves room out of itself wherever its peer has content — automatically, in real time, frequency by frequency.

Format Description
VST3 Universal format (Windows, Linux, macOS)
CLAP Modern plugin format (Windows, Linux, macOS)

Installation

System requirements

Platform Minimum
OS Windows 10+ (64-bit), Linux (x86-64-v3), macOS 10.13+ (Intel / Apple Silicon)
DAW Any VST3 or CLAP host
CPU x86-64 with AVX2
RAM 2 GB

Windows

  1. Run XeniAudio-SpectralMediator-V1.3.1-Installer.exe.
  2. Follow the prompts. The installer places:
    • VST3 in C:\Program Files\Common Files\VST3\
    • CLAP in C:\Program Files\Common Files\CLAP\SpectralMediator\
  3. Restart your DAW and rescan plugins.

Linux

tar xzf SpectralMediator-1.3.1-Linux.tar.gz
cd SpectralMediator-1.3.1-Linux
./install.sh

VST3 lands in ~/.vst3/, CLAP in ~/.clap/. Pass alternative paths as positional arguments to install.sh.

macOS

  1. Mount SpectralMediator-1.3.1-macOS.dmg.
  2. Double-click the .pkg inside.
  3. The default install scope is the current user (~/Library/Audio/Plug-Ins/). Click CustomizeInstall for all users to install system-wide.
  4. Restart your DAW and rescan plugins.

Signed and notarized. As of v1.3.1 the macOS installer is signed with an Apple Developer ID and notarized by Apple, so it installs with no warning and no right-click workaround. The certificate is issued to Tony Cuny — Apple issues Developer ID certificates to the individual behind an independent business, not to the trade name, so that is the name macOS shows rather than XeniAudio.

If macOS still complains, the download was almost certainly damaged or incomplete — re-download rather than trying to bypass the warning.


Concept

What "anti-masking" means

When two instruments share the same frequency range, the ear can only resolve one at a time clearly. The classic fixes are:

SpectralMediator is the surgical alternative. It looks at what frequencies are actually clashing right now and ducks only those, only on the masked instrument, only while the masker is loud. Static EQ and sidechain become redundant for the cases SpectralMediator handles.

How the two instances talk

Insert one instance on each track. The two SpectralMediators discover each other through a shared-memory segment (Boost.Interprocess) and pair via the REMOTE dropdown at the top of each editor. After pairing, every FFT hop:

  1. Each instance writes its own magnitude bins (1024 linear bins) and per-band energies (3 bands) into its slot in shared memory.
  2. Each instance reads its peer's bins.
  3. Each instance compares, per bin, its own level to its peer's level inside each user-defined band. Where the peer is louder than the band's threshold, this instance attenuates that bin proportionally to the ratio.

Result: when the kick hits, the bass-low region in the bass track ducks; when the kick is silent, no ducking. Same logic in reverse for the kick on the upper bass region. Both tracks get out of each other's way without a single EQ move.

What it isn't


Quick start (kick + bass)

  1. Insert SpectralMediator on the kick track. Rename the instance from the title field — type Kick.
  2. Insert SpectralMediator on the bass track. Rename it Bass.
  3. On either instance, click the --- disconnected --- dropdown above the REMOTE analyzer and select the other instance's name. Both instances are now paired (both dropdowns will show the peer's name; the small SHM dot in the top-right turns green).
  4. The default 1-band layout (20 Hz → 20 kHz) is too broad. Right-click inside the LOCAL analyzer at around 200 Hz to add a band split. The band now has two halves; right-click again at around 1 kHz to add a third split if you want more precision.
  5. Drag each band's threshold (the orange horizontal handle inside the band) down to about -20 dB. Drag the ratio (right-edge handle) up to about 4:1.
  6. Play the song. The bass should now duck under the kick wherever the kick has spectral content, without affecting any other frequency range.

Interface tour

+-------------------------------------------------------------------------+
|  X SM   SpectralMediator #1                  LOCAL          [DEMO] *SHM |  <- header
+-------------------------------------------------------------------------+
|                                                                         |
|  HP                       (local FFT spectrum)                       LP |  <- LOCAL
|   |                                                                  |  |     analyzer
|  20Hz                                                              20kHz|
+-------------------------------------------------------------------------+
|  [Kick               (v)]                     REMOTE                    |  <- REMOTE
|   |                       (peer FFT spectrum)                        |  |     analyzer
|  20Hz                                                              20kHz|
+-------------------------------------------------------------------------+
|  LOCAL OUTPUT                                          REMOTE OUTPUT    |  <- controls
|   (Attack)  (Release)  (Makeup)            (Attack)  (Release)  (Makeup)|
+-------------------------------------------------------------------------+

Top header

LOCAL analyzer (top band)

REMOTE header (between the two analyzers)

REMOTE analyzer (bottom band)

Same controls as the LOCAL analyzer but they edit your peer's settings remotely (changes are pushed into the peer's SHM slot). Useful when you want to dial in the entire pairing without switching plugin windows. The peer's FFT spectrum is shown in orange.

Output controls (bottom strip)

Two mirrored panels:

Resize

Drag the small grip in the bottom-right corner to resize the editor. The host frame follows live (Bitwig, FL Studio, Studio One; Reaper Linux + CLAP). On Reaper Windows VST3, the frame catches up only at button release — switch to the CLAP build to get live frame resize on that host (see Known issues).

The size is persisted in the project: when you reopen, the editor returns to the size you left it at.


Parameters

Band layout (per side)

Parameter Range Default Unit Notes
FreqLow 20 Hz to 2000 Hz 200 Hz Hz Low / Mid crossover
FreqHigh 500 Hz to 20000 Hz 5000 Hz Hz Mid / High crossover
HP 20 Hz to 1000 Hz 20 Hz Hz Detection high-pass — bins below pass through
LP 1000 Hz to 20000 Hz 20 kHz Hz Detection low-pass — bins above pass through

Band layout is also editable interactively: right-click in either analyzer to add a split, drag splits to move boundaries.

Per-band ducking (3 bands)

Parameter Range Default Unit
Threshold -60 dB to 0 dB -20 dB dB
Ratio 1:1 to 20:1 4:1

When the peer's level inside a band exceeds Threshold, this instance attenuates the same band proportionally to the Ratio. 1:1 effectively disables ducking for that band.

Envelope and output (LOCAL + REMOTE, six knobs total)

Knob Range Default Snap Role
Attack 0.1 ms to 300 ms 10 ms 0.1 ms Time constant when GR is increasing
Release 5 ms to 2000 ms 100 ms 1 ms Time constant when GR is releasing
Makeup -12 dB to +24 dB 0 dB 0.1 dB Output gain after ducking

Drag: 1 px ~ 0.9 ms of Attack. Hold Shift for ~3× finer drag (~ 0.25 ms / px). The values snap to the column above (Attack: 0.1 ms, Release: 1 ms, Makeup: 0.1 dB) so you can land on round values like Attack = 10.0 exactly.

REMOTE knobs write directly into the peer's slot — your peer's audio thread will pick them up and apply locally. The peer's own UI knobs will move to match.

One-sided ducking

By default a pair of instances trade: each one steps out of the way of the other where they collide. That is what makes SpectralMediator different from a classic sidechain, and most of the time it is what you want.

Sometimes it is not. A lead vocal, a kick, a hook line — some tracks should never move, and everything else should work around them. The DUCK toggle in the header decides that per instance:

DUCK on this instance What happens to this track What happens to the peer
Lit (default) Ducks against the peer Ducks against this track
Unlit Never reduced Still ducks against it

Turning DUCK off does not disconnect the pair, and it is not the same as bypassing. This instance keeps analysing and keeps feeding the peer — it simply stops applying any reduction to itself. Turn it off on the track that should win, and leave it on everywhere else.

Both sides from one window. There are two DUCK toggles, one in the LOCAL header and one in the REMOTE header, exactly like the BYP toggles and the REMOTE knobs. Which of the two tracks gives way is a decision about the pair, so you can take it from either instance without switching windows — the REMOTE toggle writes straight into your partner's slot and its own UI follows. The REMOTE toggle is greyed out until a peer is selected.

DUCK off is not BYP. Bypassing an instance stops it feeding the peer as well, so ducking stops in both directions. If you want one track to keep priority while the other still gives way, DUCK is the control you want.

Both instances can have DUCK off at once — that just means neither ducks, which is the same as having no pairing at all.


Use cases

Kick + bass

Insert SM on kick, insert SM on bass, pair.

When the kick hits, only the bass-low band ducks. The bass mid/highs (string body, harmonics) are untouched. When the kick stops, full bass returns instantly within the Release time.

Voice + guitar

Vocal in front, rhythm guitar masking the formant region.

The guitar yields in the formant band whenever the vocal is active, while keeping its body and brilliance.

Snare + overheads

The snare hits leak into the overheads. With static EQ, you'd cut the overheads' snare region all the time. With SM, you cut only when the snare is actually hitting.

Tightens the drum image audibly. The cymbals stay full because their spectrum is above the band.

Two backing vocals on the same syllable

Two BV stacks on different tracks competing for presence. Pair them.

Whichever stack is louder at any instant wins that band; the other yields slightly. The blend feels glued without manual rides.


Cross-instance shared memory

Up to 16 SpectralMediator instances can coexist in the same DAW process. Every instance has:

The shared data per instance is:

Field Used by Notes
1024-bin FFT audio thread Linear magnitude, per FFT hop
256-bin display UI thread Smoothed dB spectrum for the analyzer
3 band energies both RMS per band
3 gain reductions both dB per band, <= 0
Bands definition both Frequencies + threshold + ratio + enabled flag
HP / LP both Global detection limits
Attack / Release / Makeup both Output controls
Plugin latency both Samples (for compensation)

Edits made on either side of a pair propagate bidirectionally: moving a band on the bottom analyzer of one instance updates the top analyzer of the other.

Latency

Each instance reports its own FFT analysis latency to the host (typically 1024 samples at 44/48 kHz, scaled at higher sample rates to keep a ~21 ms analysis window). Modern DAWs compensate automatically.

The peer's reported latency is read from SHM and used by the SHM read side to align the bins it consumes with what the peer was processing — so the ducking stays in time even when the two tracks have different routing delays inside the DAW.


Demo mode and licensing

Without a license, every 60 seconds the audio is faded out for 5 seconds with smooth 256-sample fades. The DEMO badge in the top-right pulses during the silent window.

Activating

  1. Click the DEMO badge to open the activation dialog.
  2. Paste your license key (Ctrl+V) or type it.
  3. Click Activate (or press Enter).

The dialog displays Verifying... while the key is checked online with the Gumroad license server. On success the dialog closes and the DEMO badge disappears. On failure, the server's exact message is shown (invalid key, refunded, disputed, etc.) — fix and retry.

The verified key is saved to:

Subsequent plugin loads validate the saved key offline (no network) so SpectralMediator works without an internet connection once activated.

SpectralMediator vs McPlugins keys

SpectralMediator has its own product on Gumroad. A McPlugins key does not unlock SpectralMediator (and vice-versa). The two products use distinct hash keyspaces and store their license files in separate directories.


Known issues

Reaper VST3 on Windows: live grip resize doesn't update the FX dialog

When you drag the resize grip in the bottom-right of the editor, the plugin content resizes correctly but Reaper's outer FX dialog frame does not follow — neither during the drag nor on release. The plugin becomes embedded in a too-small or too-large host frame.

Cause: Reaper's VST3 host implementation does not honor plugFrame->resizeView() callbacks coming from the plugin UI thread. Every other tested host (Bitwig, FL Studio, Studio One, Live, Cubase on Windows; all hosts on Linux and macOS) honors the API correctly.

Workaround: insert SpectralMediator using its CLAP format (Add FX → CLAP → SpectralMediator) instead of VST3. CLAP works correctly in Reaper Windows. Reaper supports CLAP natively since v6.71.

macOS Gatekeeper: "unidentified developer" warning

Fixed in v1.3.1 — the macOS installer is now signed and notarized, so this warning no longer appears. If you still see it, the download was damaged; re-download it. See Installation → macOS.

Note that the Windows installer is not code-signed, so SmartScreen may still warn on first run there.


Troubleshooting

Two instances don't see each other in the dropdown. Both must run inside the same DAW process. Some hosts isolate plugin processes (sandbox / process-per-plugin mode); shared memory cannot cross process boundaries. Disable plugin sandboxing in your DAW preferences.

Plugin scan hangs after a host crash. SpectralMediator detects stale shared-memory segments at startup and wipes them automatically once every registered instance has gone silent for 10 seconds. If the issue persists:

No spectrum on the REMOTE panel. Make sure your peer instance is actively processing audio (track not muted, not on a frozen track). The peer's spectrum is only updated while audio flows through it.

Activation dialog says "Server: ..." with a network error. Your machine cannot reach the Gumroad API. Check connectivity and firewall rules. The license check is a one-time online verification; once the saved key is on disk, no network access is needed.

Editor renders in the bottom-left quarter on a Retina Mac. You're running a build older than v1.3.1. Update to the latest release.


License

XeniAudio SpectralMediator is licensed software. See the license.txt file shipped with the installer for full terms.

For support, visit https://xeni-audio.com or contact support@xeni-audio.com.

Copyright © 2025–2026 Tony Cuny / XeniAudio. All rights reserved.


Something unclear, or missing from this manual? Write to support@xeni-audio.com.