Skip to content

Audio Suite

KB2UKA edited this page May 22, 2026 · 2 revisions

Audio Suite

The Audio Suite is Zeus's in-process voice audio processing chain — a stack of small, focused plugins (gate, EQ, compressor, exciter, bass enhancer, reverb) that you arrange in your preferred order, dial in with live meters, and audition through your headphones before you ever key the radio.

It sits in the TX audio path between your microphone and WDSP's TX-side EQ / leveler / CFC / ALC stages. WDSP keeps doing its job; the Audio Suite shapes what gets handed to it.

TL;DR for the operator who just wants to broadcast clean voice: install the suite with one click, click the red BYPASS button at the head of the chain rail to engage the suite (it ships disengaged on a fresh install — see Master Bypass below), open the suite window, drag the tiles into the order you want (Gate → EQ → Comp → Exciter → Bass → Reverb is a sensible default), turn Audition on, talk into your mic, dial each block until you like what you hear. Click MOX. You're on the air.


Installing the suite

  1. Open Settings → TX Audio Tools.
  2. Scroll down to the TX Audio Tools panel.
  3. Click Download Audio Suite.
  4. Zeus fetches the latest six audio plugins from the official Kb2uka plugin registry. Each row shows progress (installing… → ✓ or ↺ already present).
  5. When the install finishes, a modal asks you to restart Zeus. Click the restart prompt or close + relaunch yourself.

After the restart, you have six new plugins available:

  • Noise Gate
  • EQ (10-band parametric)
  • Compressor
  • Aural Exciter
  • Bass Enhancer (MaxxBass-style)
  • Reverb

You can also install plugins one at a time from Settings → Plugins → Install from URL — paste a …/releases/download/<plugin>-v<x.y.z>/<plugin>-<x.y.z>.zip URL. The Download Audio Suite button is purely a convenience for the bundled set.


Opening the Audio Suite window

From the TX Audio Tools panel, click the Audio Suite button. A floating window opens, with two parts:

  1. Tile strip at the top — one tile per installed audio-chain plugin, drawn left-to-right in the current chain order. This is where you reorder.
  2. Panel stack below the tiles — each plugin's full panel (knobs, viz, meters, bypass), stacked top-to-bottom in the same chain order.

The window is draggable from anywhere outside the tile strip and resizable from any edge or corner (eight handles; corner handles draw a faint L-shape hint). Position, size, and open/closed state persist client-side — close the browser tab, reopen tomorrow, the window is right where you left it. It can't slide under the Zeus topbar; if a previous session got it stuck above the viewport, opening it self-heals to a sane position.

Escape closes the window. Close button (×) in the header does the same.


Chain order — drag to reorder

Grab any tile in the strip and drag it to a new position. The source tile dims (40% opacity, dashed border) while you drag; drop it on a destination tile to swap positions, or onto a gap to insert. The change applies live: audio reroutes through the new order immediately, no MOX cycle needed.

A few things to know about the order:

  • Audio flows left-to-right through the tiles. The leftmost plugin sees the raw mic; the rightmost plugin's output hands off to WDSP TX (leveler → CFC → ALC → out).
  • The order persists server-side in zeus-prefs.db — survives Zeus restarts, reflects across all clients (open the window on a second device, you see the same order, and reorders broadcast over the WebSocket so all clients refresh).
  • Uninstalled plugins remember their slot. If you uninstall (say) the Bass plugin and later reinstall it, it pops back into its previous chain position. The canonical order persists across all plugins you've ever installed; the runtime tile strip is filtered to currently-loaded ones.
  • A sensible default order for SSB voice: Gate → EQ → Compressor → Exciter → Bass → Reverb. Reasons:
    • Gate first so the rest of the chain only sees voice, not noise.
    • EQ before compression so the compressor responds to the tone you actually want.
    • Compressor before exciter/bass so the harmonics those add aren't squashed.
    • Reverb last because it's a wet effect — you want the dry signal levelled and shaped before adding tail.

You can audibly prove the order matters: put EQ before Comp, hear one thing. Drag EQ after Comp, hear something different. Both signal paths are real-time, no rebuild step.


Audition mode — hear the chain off-air

The Audition toggle in the suite-window header is the killer feature for tuning your chain. With audition on and MOX off:

  • Your mic feeds into the audio plugin chain continuously.
  • The chain's output is mixed into the Zeus RX audio sink — i.e. it comes out of whatever you're using for receive audio (headphones, speakers, USB DAC, whatever).
  • You hear yourself talking, processed exactly as you'd sound on the air, without keying the transmitter.

When you key MOX, audition automatically falls back: the live preview tap stops feeding audition (because the same chain is now running on the real TX path), and the radio receives raw chain output for transmit. When you release MOX, audition picks back up.

The rule: muting RX mutes audition

This catches operators by surprise the first time so it's worth spelling out:

Audition shares the RX playback sink. If you mute receive audio (the RX mute button or your output device's volume), audition is muted too. This is intentional — it prevents the very common "I forgot audition was on and now I'm screaming into my headset" surprise.

If you toggle audition on and don't hear anything:

  1. First check the RX mute / volume on the receive panel.
  2. Then check that a chain is configured (at least one non-bypassed plugin in the suite window).
  3. Then check that the mic is actually producing signal — the IN meter on the first plugin should bounce when you talk.

When audition is unsupported

In browser mode (Zeus running with the SPA in your browser, not the Photino desktop window), audition is greyed out. The browser doesn't have a local audio sink to mix into. Use the desktop app for audition; the suite window otherwise behaves identically.


Live pre-MOX meters

Every plugin's IN / OUT (and where applicable GR / state) meters animate continuously while you're talking, with MOX off and TX silent. That's because Zeus continuously taps your mic stream and runs it through the plugin chain in preview mode, discarding the output (or routing it to audition if enabled).

This is the right way to dial in:

  • Talk normally. Watch the IN meter on the leftmost plugin to see what your mic is actually producing. Aim for peaks around -12 to -6 dBFS; if it's pinning to 0 you're clipping at the source, if it's hovering at -40 you're too quiet.
  • Walk down the chain. Each plugin's OUT meter shows what's leaving that stage. Adjust per-plugin Input / Output gains until each stage hands off at a reasonable level.
  • The GR meter on the Compressor (and the gain meter on the Noise Gate) shows how much each is doing in real time. Helps you spot "compressor never opens" or "gate is closing on words" before you embarrass yourself on the air.

Master Bypass — a single toggle for the whole suite

At the very head of the brass-plate TX chain rail in the TX Audio Tools panel (in Settings) sits a single red button labelled BYPASS. This is the master bypass for the entire Audio Suite — one click disengages the whole chain (NoiseGate, EQ, Comp, Exciter, Bass, Reverb), instead of clicking six separate per-plugin bypass buttons.

What it does

When master bypass is engaged (button lit red):

  • Your mic audio passes through the Audio Suite bit-for-bit unchanged, straight to WDSP. The suite is inert.
  • The plugin tiles in the chain rail dim to about 45% opacity, so you can see at a glance the suite isn't running.
  • The plugins themselves are still loaded and ready — they're just being skipped at runtime. No re-init, no re-load.

When master bypass is released (button outlined blue, not lit):

  • Audio flows through every installed plugin in chain order, with each plugin's own bypass / settings honoured.
  • Plugin tiles return to full opacity.

What it does NOT touch

  • CFC stays at full opacity in the rail, because CFC is independent of master bypass. CFC lives downstream in WDSP, not in the plugin chain. Whatever you've set CFC to do, it keeps doing — master bypass cannot disable CFC, and engaging master bypass cannot accidentally engage CFC. They are two different layers.
  • Per-plugin bypass states are preserved. If you had the Compressor bypassed and the Reverb engaged before flipping master, then after you release master back off, the Compressor stays bypassed and the Reverb is still engaged. Flipping master is a chain-level decision; each plugin's own bypass is unaffected.

Default state on first install — ENGAGED

On a brand-new Zeus install with no saved preference, master bypass is engaged (the chain is inert). This is deliberate:

  • A first-time operator who just downloaded the Audio Suite shouldn't be surprised by an unfamiliar chain quietly transforming their TX before they've configured it.
  • The Audition feature (see below) is the right way to dial the chain in before you hand it your transmit signal.
  • Once you've configured the chain to your taste and clicked master bypass off, your choice persists across Zeus restarts — you won't have to re-engage it every time.

Persistence

Master bypass state is stored server-side in zeus-prefs.db. Survives Zeus restarts, reflects across all connected clients (open Zeus on a second device, you see the same toggle state; flip it on one, all the others update instantly over WebSocket).

When to use it

  • Listen-back A/B testing — you've spent ten minutes dialling in the chain, you want to hear what your voice sounds like with vs without the entire suite, without unbypassing six individual plugins. One click off, talk; one click on, talk. Done.
  • Mid-session pulldown — you're rag-chewing in audition mode and want to hear the room (not the chain) for a moment. One click.
  • Troubleshooting — "is this weird artefact the radio, WDSP, or the Audio Suite?" Master bypass tells you in two seconds.
  • Emergency revert — you tweaked the wrong knob, the chain sounds awful, you don't have time to figure out which plugin to bypass. Hit master bypass, your mic is clean, you can take your time fixing the chain after the QSO.

Per-plugin Bypass — A/B every block instantly

Every plugin also has its own Bypass button in the top-right of its panel. Per-plugin bypass:

  • Sends audio through the plugin unchanged — clean pass-through.
  • Preserves filter / state-machine state inside the plugin so re-engaging doesn't pop.
  • Dims the panel controls to 45% opacity so you can see at a glance which blocks are active.
  • Turns red and glows when engaged (per the audio-suite-wide bypass convention).

Use it to A/B: hit Bypass on the Compressor while talking — is your voice better with comp on or off? If you can't tell, you've either dialled it perfectly or it's doing nothing useful — both worth knowing.

Per-plugin Bypass is the right tool when you want to compare one stage's effect. Master Bypass (above) is the right tool when you want to compare the whole suite against the raw mic signal.

One nuance: on EQ v0.2.0, the Input and Output gain knobs still apply when bypassed. That's deliberate — it lets you use the EQ panel as a pure gain trim without any tone shaping (just zero out all bands and Bypass on; or even drop the EQ from the chain entirely and use a different block's I/O gains for trim).


Per-plugin reference

Noise Gate

What it does. Silences your mic signal when it falls below a threshold — cleans room noise, fan whir, keyboard ticks, kid-in-the-background ambience during pauses and between sentences.

Algorithm. Peak-envelope detector with 3 dB built-in hysteresis (open threshold and close threshold are 3 dB apart — prevents the gate from chattering when your voice hovers right at the threshold). Asymmetric one-pole gain slew with separate attack and release time constants. Hold timer keeps the gate open through natural silences inside a word.

Controls.

  • Threshold (-80..0 dBFS, default -35 dB) — the level at which the gate opens. The close threshold is automatically 3 dB below this.
  • Attack (0.1..50 ms log, default 2 ms) — how fast the gate opens when signal exceeds threshold. Fast enough that plosives aren't chopped; not so fast that you hear it click open.
  • Hold (0..500 ms, default 80 ms) — how long the gate stays open after signal drops below the close threshold. Critical for voice — you want the gate to ride through the natural ~50-200 ms gaps between syllables, not slam shut on every consonant.
  • Release (5..1000 ms log, default 150 ms) — how slowly the gate closes once hold expires. Slow release sounds natural; fast release can chatter on sibilants.
  • Range (-80..0 dB, default -60 dB) — how much attenuation to apply when closed. -60 dB is essentially mute; -20 dB is more of a "duck". Drop to -80 if you want hard mute, raise toward 0 to let background bleed through.
  • Output (-24..+12 dB, default 0 dB) — post-gate gain trim. Useful if dialling the gate in reveals the rest of the chain wants a hotter input.

Viz. The centerpiece is a threshold rail showing your live input peak as a moving needle. The hysteresis band between open and close thresholds is shaded blue. A glowing pill at the top shows the gate state: OPEN (accent blue), HOLD (power yellow — signal just dropped, hold timer running), or CLOSED (dim grey). Flanking the rail are vertical IN/OUT peak meters with peak-hold ticks that decay at 40 dB/s. Below the rail, a horizontal GR strip fills red from the right as the gate closes.


EQ (10-band parametric)

What it does. Shapes the tone of your voice with ten biquad peaking filters. Use it to cut booming low-mids, tame a harsh microphone, lift presence in the 2-4 kHz region for intelligibility, or roll off everything above 6 kHz to fit a narrow SSB filter.

Algorithm. Ten RBJ-cookbook peaking biquads in series, with the entire bank's input and output gain stages added in v0.2.0 so you can drive the EQ or trim the output without rebalancing band gains.

Controls.

  • Per band: Frequency (20 Hz..20 kHz), Gain (-15..+15 dB), Q (0.1..18).
  • You can drag the curve directly with the mouse — grab any band's control point and pull. Hold Shift for fine adjustments.
  • Input (-24..+12 dB, default 0) — gain before the EQ bank. Crank to drive the curve harder for slight saturation feel.
  • Output (-24..+12 dB, default 0) — gain after the EQ bank. Compensate for level changes from heavy band moves.
  • Bypass — clean pass-through. Input/Output gains still apply when bypassed (see note above).

Viz. The centerpiece shows two layered traces: a live FFT spectrum (filled accent blue, updated 30 times a second) of the post-EQ output, and the EQ curve (gold) drawn over the top. The gap between the spectrum's natural shape and the curve shows what the EQ is doing in real time. Band points are draggable knobs sitting on the curve.


Compressor

What it does. Levels dynamics — keeps loud peaks under control without crushing quiet phrases. The bread-and-butter of voice processing.

Algorithm. VCA-style single-stage compressor with soft-knee, plus per-block bypass for instant A/B.

Controls.

  • Threshold — level above which compression kicks in.
  • Ratio — how much you squash by (4:1 means a 4 dB input rise becomes a 1 dB output rise).
  • Attack — how fast the compressor reacts to peaks.
  • Release — how quickly it returns to unity after the peak passes.
  • Knee — how gradual the transition into compression is (0 = hard knee, larger = soft).
  • Makeup — gain applied after compression to restore perceived loudness.
  • Bypass.

Viz. Live transfer-function curve in the centerpiece (input dB on X, output dB on Y, the compression knee visible as the elbow). Vertical IN / OUT / GR meters flanking the curve — the GR (gain reduction) meter is the single most useful tuning aid in this plugin.

Tuning tip. With audition on, talk in your normal voice. The GR meter should briefly hit 3-6 dB on peaks and return to 0 between phrases. If it's pinned at 12+ dB you're crushing the life out of your audio; if it never moves the threshold is set too high.


Aural Exciter

What it does. Adds presence and "air" to the high end without rebalancing your existing tone. Synthesises harmonics from the upper voice band — same approach as the Aphex Aural Exciter and similar broadcast tools.

Algorithm. A high-pass biquad isolates the upper voice band (typically 4-6 kHz and above), a tanh waveshaper saturates it (generating harmonics of those frequencies, mostly odd-order), and the harmonics are mixed back over the dry signal. The original signal is untouched — bass and midrange stay pristine; only the synthesised harmonics ride on top.

Controls.

  • Frequency (1..12 kHz log, default 5 kHz) — HP cutoff. The saturator only sees content above this; everything below passes through dry.
  • Drive (0..36 dB, default 6 dB) — pre-saturation gain. Higher = more harmonic content.
  • Mix (0..100%, default 20%) — wet/dry blend. Conservative defaults; 15-25% is plenty for SSB voice. Above 50% it starts sounding sibilant.
  • Input (-24..+12 dB, default 0).
  • Output (-24..+12 dB, default 0).
  • Bypass.

Viz. Live saturation transfer curve in the centerpiece showing the tanh shape with current Drive. Vertical IN/OUT meters flanking it.

Tuning tip. Less is more. Start at the defaults, audition with and without bypass, and only push Drive / Mix higher if your mic genuinely lacks presence. Overcooked excitement is the second-fastest way (after over-compression) to make a ham signal sound bad.


Bass Enhancer

What it does. Makes your voice sound richer and warmer without putting actual low-frequency energy on the air — because your antenna can't efficiently radiate sub-100 Hz energy anyway. Synthesises harmonics of your low-end content in the radiable mid-range, so your ear reconstructs the perceived fundamental even though no actual fundamental is transmitted.

Algorithm. MaxxBass / Aphex 204 "Big Bottom" Family-B approach: a low-pass filter isolates the bass band, full-wave rectification creates octave-up harmonics (2H/4H/6H), a high-pass strips the rectified DC and redundant fundamental, a tanh shaper limits and slightly enriches the harmonic series, mix back over the dry signal.

Controls.

  • Frequency (40..500 Hz log, default 150 Hz) — the LP/HP split point. Everything below this goes through the harmonic synthesis; everything above is the dry signal.
  • Amount (0..100%, default 35%) — shaper drive. How aggressively the harmonics are generated.
  • Mix (0..100%, default 25%) — wet/dry blend.
  • Input (-24..+12 dB, default 0).
  • Output (-24..+12 dB, default 0).
  • Bypass.

Viz. Spectrum illustration showing the LP/HP split point in gold and the synthesised octave-up harmonic series in accent blue rising above the cutoff. Vertical IN/OUT meters flanking.

Tuning tip. Particularly useful on small dynamic mics and lightweight headsets that struggle below 200 Hz. Audition the difference — done right, your voice sounds fuller without the panadapter showing extra energy below 200 Hz on the air.


Reverb

What it does. Adds subtle room ambience — a hint of space so your voice doesn't sound boxed-in. Conservative defaults because this is a ham-radio voice chain, not music production; you want operators on the other end to hear you clearly, not bathed in cathedral wash.

Algorithm. Classic four-comb / two-allpass Schroeder reverb with low-pass damping inside each comb's feedback path. Pre-delay between the dry transient and the first reflected energy. The two allpass filters diffuse the comb output into a dense, ringless tail.

Controls.

  • Size (0..100%, default 50%) — apparent room size. Scales the comb delay lengths.
  • Decay (0..100%, default 40%) — RT60-equivalent decay time. Higher = longer tail.
  • Damp (0..100%, default 50%) — high-frequency absorption in the feedback path. Higher = darker tail, simulating absorbent surfaces.
  • PreDelay (0..100 ms, default 15 ms) — time gap between dry signal and the first reflection. A bit of pre-delay keeps the dry transient crisp.
  • Mix (0..100%, default 12%) — wet/dry blend. Default is deliberately low; even 20% sounds heavy for SSB.
  • Input (-24..+12 dB, default 0).
  • Output (-24..+12 dB, default 0).
  • Bypass.

Viz. Impulse-response illustration showing dry transient, pre-delay gap, early reflections, and diffuse tail amplitude. Vertical IN/OUT meters flanking.

Tuning tip. If a listener can identify "you've got reverb on," you've got too much. Aim for the kind of subtle space that just makes the signal feel less sterile, not the kind that makes you sound like you're transmitting from a parking garage.


Gain staging — the most important thing

If you take only one practical tip from this page, take this:

Watch each plugin's OUT meter. Aim for peaks around -10 to -6 dBFS at every stage. Use Input gain to drive a plugin harder, Output gain to level-match downstream.

Why it matters:

  • Too hot at any stage and the next plugin's input gets clipped before its own DSP sees it. The audio is already mangled by the time you hear it.
  • Too cold and you waste headroom — the chain end output is so quiet WDSP's leveler has to crank gain way up, amplifying any noise that snuck through the gate.
  • WDSP downstream is doing its own dynamics (leveler, CFC, ALC). If you hand off something already crushed, WDSP will pump and the signal will sound over-processed.

A reasonable end-state for a typical voice:

  • Plugin chain output peaks at around -8 dBFS during loud phrases.
  • WDSP ALC GR meter shows 0-3 dB of reduction on peaks.
  • TX peak meter (downstream of ALC) sits near 0 dBFS without clipping.

If the ALC GR meter is showing 10+ dB constantly, the chain is feeding it too hot — pull back the last block's Output gain a couple of dB and try again.


Common workflows

Dialling in the noise gate

  1. Open Audition with MOX off. Don't talk yet. Watch the IN meter and note the steady-state level — that's your noise floor (room HVAC, fan, etc.).
  2. Now talk normally. Note the peak IN level — that's your voice.
  3. Set Threshold a few dB above the noise floor. Watch the state pill switch from CLOSED to OPEN as you start talking.
  4. Tune Hold so the gate doesn't clamp between syllables. 80 ms is fine for fast speech; 150-200 ms for slow / deliberate speakers.
  5. Tune Release for natural decay — too fast and you'll hear it shut on every consonant; too slow and the gate is essentially always open.
  6. Leave Range at -60 dB unless you specifically want some ambience to bleed through.

Cleaning up low-mid mud with EQ

  1. Open Audition with MOX off, talk normally.
  2. Watch the live spectrum below the EQ curve — look for visible buildup around 200-400 Hz (common on dynamic mics, makes a voice sound "boomy" or "tubby").
  3. Drag the curve down 3-6 dB in that region. Cut, don't boost — your ears prefer it and your headroom thanks you.
  4. A/B with Bypass. If bypass-on sounds better than your EQ, you've over-corrected — back the cut off.

Building presence with the Exciter

  1. Set Frequency to 4-6 kHz (above the bulk of your voice but below extreme top-end hiss).
  2. Start with Drive at 3-6 dB and Mix at 15-20%.
  3. Audition on, talk, listen for added "air" and definition.
  4. If it sounds harsh or sibilant, back off Mix. If it doesn't seem to do anything, bump Drive +3 dB, not Mix.
  5. Compare against Bypass aggressively — exciter is the easiest plugin to over-apply because it sounds "exciting" at first listen, then fatiguing on the receiving end.

Troubleshooting

I installed the suite but don't hear any difference (audition or on-air)

Most common cause: master bypass is still engaged. A fresh install ships with master bypass ON so the chain is inert until you opt in. Look at the head of the TX chain rail in TX Audio Tools — if the red BYPASS button is lit, the suite is disengaged. Click it once to release, and your chain comes alive. The plugin tiles in the rail snap from 45% opacity back to full to confirm. (See Master Bypass above.)

Audition is on but I hear nothing

  1. Check whether master bypass is engaged — see the entry above. A bypassed chain plays your raw mic through audition; if you weren't expecting that, the chain isn't actually processing.
  2. Check RX mute on the receive panel — muted RX mutes audition (this is intentional, see the rule above).
  3. Check the chain isn't empty (at least one non-bypassed plugin).
  4. Watch the IN meter on the first plugin while talking — if it doesn't move, the mic isn't producing signal (check your input device, mic gain, push-to-talk if any).
  5. Check the OUT meter on the last plugin — if IN moves but OUT doesn't, something in the chain is killing the signal (gate fully closed, Output knob at -24 dB, a plugin's Mix at 0%, etc.).

A plugin disappeared after restart

Each plugin's tile only shows when the plugin is currently installed. If the tile is missing:

  1. Check Settings → Plugins for the plugin's status — it might have failed to load.
  2. Look at the Zeus log for Loaded plugin com.openhpsdr.zeus.samples.<name> — present means it loaded, missing means there's an install or compatibility issue.
  3. Reinstall via Settings → Plugins → Install from URL with the release asset URL.

Plugin settings reverted to defaults

This was a known bug fixed in PR #387 (LiteDB upsert by _id == 0). If you're on a Zeus build from before mid-May 2026 and seeing this, update to the latest develop or wait for the next release. The fix is delete-then-insert atomic per setting key.

Chain reorder doesn't seem to change audio

  1. Confirm you're hearing the chain at all (Audition on, IN meter moving, OUT meter moving).
  2. Check the chain isn't all-bypassed — bypass on every plugin makes the chain a pass-through regardless of order.
  3. Restart the desktop once. The runtime re-slot in AudioPluginBridge is supposed to take effect immediately on reorder, but if something hung in client state, a relaunch resets cleanly.

My TX has no power but everything else looks fine

Check Drive % in the TX panel. If it's at 0, no amount of audio chain output reaches the radio's modulator. This is a separate issue from the Audio Suite — see TX Controls and PA Settings.


Related pages

  • TX Audio Tools — the CFC (Continuous Frequency Compressor) that runs after the Audio Suite, on the WDSP side of the TX chain.
  • DSP — WDSP's RX/TX DSP stages, including the leveler / CFC / ALC that the Audio Suite hands off to.
  • Meters — peak/average/GR meter reading guide.
  • VST Host — the other in-process voice processor (deprecated in favour of the Audio Suite for new chains, but still supported for existing VST3-based setups).
  • PureSignal — runs on the RX feedback path and is independent of the Audio Suite; both work in parallel.

Clone this wiki locally