[<- BACK][zh] 中文

SPECTRAL DISSECTORA fundamental, harmonic, transient, and noise separation plugin based on Spectral Noise Gate, HPSS, and Cepstrum

SPECTRAL DISSECTOR
Year2025–2026 TypeA Max for Live plugin: fundamental, harmonic, transient and noise separation SpecsEight harmonic bands, one cepstrum band (Band 9) and one percussive band (Perc, Band 10), plus a Dry path; all of them share one pfft~, delay-aligned at 4032 samples RolesAlgorithm and architecture: me; the pfft~ of the first parallel Spectral Gates: 任时弘; implementation and UI of the new version: 闫开 ShownDownloadable from this site (current version); no external use so far LicenseAll rights reserved. Free for personal and commercial use; modification for own use permitted; redistribution and resale prohibited. See LICENSE.txt in the package. StatusIn development MediaScreenshot of the first version (in the text); screenshot of the current version (top of page); routing menu screenshot (in the text); usage tutorial video (YouTube, in progress) ↓ Download Spectral Dissector

Overview A work co-created with Yan Kai.

Spectral Dissector is a Max for Live plugin that splits a sound into its fundamental, harmonic, transient and noise components.

Its first form was a set of six parallel Spectral Gates whose thresholds were chained end to end and interlinked; in April 2026 I rebuilt it into the present architecture: eight harmonic bands, one cepstrum band and one percussive band (Perc), plus a Dry path. The image below is the first version (Spectral Bank, finished around June 2025). Screenshot of the initial version of the Spectral Dissector (Spectral Bank) Max for Live device The plugin can be downloaded from this site (link at the top of the page); the licence is stated in the info bar and in LICENSE.txt inside the package.

Motivation I have always taken sounds apart in the frequency domain with filter banks and put them back together. The problem with a hardware filter bank is that it gives you a few fixed bands, and every threshold has to be set by hand, one by one. What I wanted was a more precise tool: one that separates a sound's fundamental, first harmonic, second harmonic and so on in real time and precisely — and that can put them back together unchanged.

SPEAR was the first solution I found. But it is offline, and its sinusoidal modelling, although it sounds like the original signal, is not the original signal. Ircam's iana~ is real-time, but it does not automatically separate harmonics, and it cannot handle percussive material.

I also considered the approach of Bitwig's Harmonic Split, but it relies on fundamental tracking and loses track of weak-pitched signals.

On top of that I wanted this plugin to satisfy my wish for as much routing freedom as possible, and for taking a sound apart, processing the parts in parallel and mixing them back in any way I like.

The rebuilt architecture goes some way towards that: I can now separate an audio signal in real time and use any microphone, sampler or sound source as a harmonic oscillator.

Where it comes from Filter banks (Buchla 295, Serge Resonant EQ, Erica Graphic Resonant FB, NLC MUN and others)
SPEAR
Bitwig Loud Split & Harmonic Split
Ircam iana~ & ASAP

How it works I did not invent a new algorithm. HPSS, cepstrum and Spectral Noise Gate are all existing methods; what I did was connect them into a tool that can be used in a work in real time, and whose separation is reversible.

Technically it splits a sound into ten bands that can be processed separately — eight harmonic bands, one cepstrum band (Band 9) and one percussive band (Band 10 / Perc) — plus a Dry path. Every band and the dry path share a single pfft~; the separation adds no further FFT analysis and no latency.

Using it is simple: send one sound in and each band, the Perc Band and the Dry path come out separately, so you can send them through different effect chains and mix them back together. The Spectral Separator routing menu: Bands 1-8, the Perc Band, Residual and Dry each on their own output Routing menu: Bands 1–8, the Perc Band, Residual and Dry each choose an output of their own. Nothing is assigned in this screenshot, so every row reads No output; Residual is the cepstrum band (Band 9) of the info bar.

The dry path runs through exactly the same pfft~ as the ten bands, with latency and phase fully aligned (4032 samples): summing the dry path with any band produces no comb filtering (no phase cancellation).

You first adjust the HPSS section to pull the percussive signal out, then the cepstrum section to separate steady noise and breath. After that you only need Main Threshold (the common threshold of all bands), Spacing (the loudness difference between harmonic bands), Tilt (high- and low-frequency compensation), Rise / Fall (the onset and release of transients) and Focus (the sharpness of band crossings) — and you have the harmonic content separated into up to 8 Bands in the Harmonic Bands.

The Perc Band and the harmonic bands are separated by a strictly complementary pair of masks: percussive content goes to perc_mask, while the harmonic bands multiply their reconstruction by 1 - perc_mask. The two sum to the original input, sample for sample, with no added FFT analysis or latency. The envelope-compensation algorithm is temporarily removed in the current version because it conflicts with cepstrum and HPSS.

My contribution Thanks to 房大磊, who explained the basic principle of the vocoder to me, and to 任时弘, who explained Ircam ASAP's Spectral Clipping to me and designed the pfft~ of the first parallel Spectral Gates.

Roles: algorithm and architecture, me; the pfft~ of the first parallel Spectral Gates, 任时弘; implementation and UI of the new version, 闫开.

Where it has been shown Downloadable from this site (current version). There is no external use record.

I used the first version (2025.06, Spectral Bank) in a work of my own: amplified saxophone, the first version of the plugin and some synthesizers, with a slide deck and a recording.