Files
bass-foundry/docs/weld/README.md
T
nvrl d536e3127a feat(weld): show the alignment's delay spread
Weld's allpass sections add group delay between 500 Hz and 4 kHz, where
listeners hear it best. Liski et al. (2021) measured a threshold of about
0.64 ms for a positive group-delay peak on clicks. Weld now reports how much
its delay varies over that range and, above the threshold, suggests
comparing attacks in SUM and SUM DRY.

Common fits from Weld's own tests spread 0.82-1.03 ms, so the line is a
neutral note, not a warning: sustained bass hides much more than a click.

- Fit::group_delay (analytic, per section) and Fit::smear_ms in weld-core.
- Report::smear_ms, filled by the analyzer from the applied fit.
- Tests against the numeric phase slope and the analog 4Q/w0 peak.
- Display only; the audio path does not change.
2026-11-06 13:17:29 +01:00

6.1 KiB
Raw Blame History

Weld

Weld fuses two bass layers so they add up instead of cancelling. Current version 0.2.0.

Bass patches are layered: a sub, one or more mid growls, a top. Where the layers overlap in the mids, they partly cancel. The causes are a polarity difference, a small time offset between the layers, and the phase shift of the filters and EQs in one chain. The result is a thin, hollow sum that changes with every switch-up. Anvil fixes this for the sub band; Weld fixes it for the mids.

Weld sits on one layer and hears the other one through the sidechain input. It measures how the two layers line up, then turns the phase of its own layer with a polarity flip and up to four allpass filters. An allpass changes only phase, so the layer on its own sounds the same; only the sum changes. Weld adds no latency.

Weld

Install on Windows

Copy Weld.clap into C:\Program Files\Common Files\CLAP\. In FL Studio 2024.1 or newer, open Options → Manage plugins, enable Verify plugins, and Find installed plugins. Keep the font license with redistributed packages.

Set up in FL Studio

  1. Put each layer on its own mixer track. Load Weld on the track of one layer, the main layer.
  2. Select the other layer's track. Right-click the route arrow under the main layer's track and choose Sidechain to this track. The other layer still goes to the master on its own; the sidechain only lets Weld hear it.
  3. In Weld's plugin wrapper, open the settings (gear icon) and set Weld's sidechain input to that track.
  4. Play both layers. The SIDECHAIN meter must move. If the display says "No sidechain signal", check step 3.

Work with it

  1. Leave Mode on FOLLOW and play the part where both layers sound. After a second or two, Weld shows its alignment: polarity, and the allpass sections with their frequency and Q.
  2. Read the display:
    • Recovered is how much level the sum gains, as an average per band between Low and High. Cancellation cost is how much a perfect alignment would gain. When the two numbers are close, Weld got nearly everything.
    • The upper plot shows each band against a perfectly aligned sum (0 dB). Red is what the unprocessed sum loses to cancellation; pink is the part Weld wins back. The white line is the level with Weld.
    • The lower plot shows the phase of this layer against the other one, before (grey) and after (pink), and Weld's own phase curve (blue). After alignment the pink line sits near 0°.
    • Delay spread under the sections is how much Weld's delay changes between 500 Hz and 4 kHz. On clicks, listeners hear about 0.6 ms of change there (Liski et al. 2021); sustained bass hides much more, and common fits reach 0.8–1 ms. Above that threshold Weld adds a note: on a plucky layer, compare the attacks in SUM and SUM DRY. Fewer sections usually spread less.
  3. Compare by ear: mute the other layer's own route to the master, set Listen to SUM, then to SUM DRY. Set Listen back to LAYER and unmute the route for the mix.
  4. When the alignment is right, switch to HOLD. It is saved with the project and comes back when the project opens.

For one drop or switch-up, use LEARN: press it, play the part, then press HOLD (or LEARN again). Weld measures the whole take with equal weight and applies the result when Learn ends.

Controls

  • Mode:
    • Follow keeps measuring and refits only when a new alignment is clearly better (at least 0.3 dB on average), so the filter does not wander.
    • Learn starts a fresh measurement and applies its result when Learn ends.
    • Hold keeps the current alignment. The display keeps measuring.
  • Sections (1–4) is the largest number of allpass sections the fit may use. Weld uses fewer when fewer are enough.
  • Response (0.3–5 s) is the averaging time in Follow. Longer is steadier.
  • Low and High set the range the fit listens to. Low defaults to 60 Hz, leaving the sub to Anvil. The allpass still acts below Low, and the display shows that honestly.
  • Gate (−70 to −30 dB): moments where either layer is quieter are not measured, so tails and silence do not pull the fit.
  • Listen: Layer outputs this layer, aligned, for the mix. Sum outputs this layer aligned plus the sidechain layer. Sum dry outputs both unprocessed.
  • Output trims the level; Bypass passes this layer unchanged.

Limits

  • A late layer cannot be moved earlier. An allpass only delays. If the layer Weld sits on is the later one, the display shows "This layer is late" and the offset in ms. Put Weld on the other layer instead.
  • Free-running layers cannot be aligned. Without oscillator retrigger, or with detuned unison, the phase between the layers drifts all the time. Weld marks those bands as loose (hatched) and does not fit them. Enable retrigger in the synth if you want Weld to align the layers.
  • Delays leave a comb. A time offset between the layers cancels at regular frequencies. A few allpass sections cannot follow a delay all the way up, so Weld aligns the lower range and moves the higher notches rather than removing them. For a large offset, move the layer in time first.
  • One alignment for the whole patch. Weld does not change the alignment per note. If switch-ups need different alignments, use Follow, or automate Mode.
  • The sidechain must arrive. With no sidechain signal Weld changes nothing.

How it works

Every 256 samples the audio thread hands mono copies of both layers to a worker thread through a lock-free queue. The worker estimates their cross-spectrum (Welch, Hann window, about 11.7 Hz per bin, 50 % overlap) and their coherence. It fits polarity plus up to four second-order allpass sections so that Σ w(f)·Re(S(f)·H(f)) is largest, with w = 1/f so every octave counts, ignoring bins where the layers are not coherent, and with a penalty for any band that would lose more than 1 dB. A new fit fades in over 40 ms after its filters have settled for 40 ms, so there are no clicks. One fit takes about 15 ms on one core, twice per second in Follow.