INTERSECT is a sample slicer instrument plugin (VST3/AU/Standalone) with per-slice locking, multiple time/pitch algorithms, and MIDI-triggered slice playback.
- Quick Start
- Installation
- Workflow Basics
- Interface Layout
- Controls and Shortcuts Reference
- MIDI Controller Routing (NRPN)
- Theme Customization
- Build from Source
- Dependencies
- License
- Support / Known Limitations
- Load a sample with LOAD, click the sample name area in the header, or drag an audio file onto the waveform.
- Create slices with ADD (draw on the waveform), LAZY (real-time chop), or AUTO (transients / equal split).
- Use the bottom Signal Chain bar in
GLOBALmode to set playback, filter, amp, and output defaults for the whole sample. - Select a slice, switch the Signal Chain to
SLICE, and edit per-slice overrides where needed. - Trigger slices from MIDI. New slices are mapped from root note
C2(MIDI36) upward. - Toggle FM if you want played MIDI notes to auto-select slices in the UI.
Download the latest release zip from Releases, then place plugin files in your system plugin folders.
| Platform | Included binaries |
|---|---|
| Windows x64 | INTERSECT.vst3, INTERSECT.exe |
| Linux x64 | INTERSECT.vst3, INTERSECT (standalone) |
| macOS arm64 | INTERSECT.vst3, INTERSECT.component, INTERSECT.app |
| macOS x64 | INTERSECT.vst3, INTERSECT.component, INTERSECT.app |
| Format | Windows | macOS | Linux |
|---|---|---|---|
| VST3 | C:\Program Files\Common Files\VST3\ |
~/Library/Audio/Plug-Ins/VST3/ |
~/.vst3/ |
| AU | n/a | ~/Library/Audio/Plug-Ins/Components/ |
n/a |
After copying files, rescan plugins in your DAW.
If macOS reports that INTERSECT is damaged or blocked, clear quarantine flags:
xattr -cr ~/Library/Audio/Plug-Ins/VST3/INTERSECT.vst3
xattr -cr ~/Library/Audio/Plug-Ins/Components/INTERSECT.component
xattr -cr /Applications/INTERSECT.app- One sample at a time: INTERSECT loads one audio file per instance (
.wav,.ogg,.aiff,.flac,.mp3). - Current editor layout: header bar, slice lane, waveform, time/zoom bar, action bar, and bottom signal-chain editor.
- Slice creation: draw slices manually, chop live with LAZY, or split a selected slice via AUTO.
- Inheritance model:
GLOBALin the Signal Chain edits sample defaults.SLICEedits the selected slice and locks fields that diverge from the global value. - Playback model: MIDI triggers slices by note mapping; mute groups can choke voices in the same group.
- Algorithms:
Repitch: pitch and speed are linked.Stretch: independent time/pitch via Signalsmith Stretch (TONAL,FMNT,FMNT C).Bungee: granular stretch mode withGRAINchoices (Fast,Normal,Smooth).
- Repitch + Stretch interaction: when
ALGO=RepitchandSTRETCH=ON,PITCHandTUNEbecome BPM-driven read-only displays. - SET BPM: available in the Playback module for both
GLOBALandSLICE; it calculates BPM from musical duration. - Filter model: the filter is per-voice and resolves its settings at note-on. Cutoff changes affect newly triggered notes immediately, but do not retarget voices that are already playing.
- Filter envelope amount:
AMTis measured in semitones, so+12 stmeans the envelope can push cutoff up by one octave and-12 stmeans one octave down. This stays consistent across low and high base cutoff values. - Key tracking:
KEYis a percentage of note tracking.0%ignores note pitch,100%makes cutoff follow pitch at full keyboard scaling, and intermediate values blend between them. - Drive:
DRIVEis pre-filter saturation. It adds harmonics before the filter rather than simply turning the signal up. - Load behavior: file decoding/loading is asynchronous (off the audio thread).
- Undo/redo: snapshot-based history for slice and parameter edits.
- MIDI host stop handling: responds to
All Notes Off (CC 123)andAll Sound Off (CC 120).
| Area | Function | Notes |
|---|---|---|
| Sample name / status | Shows loaded file name and length, or missing-file relink prompt | Click to load a sample; missing-file text opens relink |
SLICES |
Slice count | Read-only |
ROOT |
Root note for new slices | Editable only while there are no slices |
UNDO / REDO |
History navigation | Same as Ctrl/Cmd + Z and Ctrl/Cmd + Shift + Z |
PANIC |
Kills active voices immediately | Also stops lazy chop |
LOAD |
Open file browser | Replaces current sample |
SET |
Popup for theme, UI scale, and NRPN settings | Also shows current plugin version |
| Area | Function | Notes |
|---|---|---|
| Slice lane | Compact slice-region overview above the waveform | Reflects selection and zoom |
| Waveform | Main editing surface | Drag-and-drop loading, slice selection, boundary editing, move/duplicate, preview |
| Overlay hints | Contextual help and action prompts | Used by ADD, AUTO, and other actions |
| Playback cursors | Voice-position display | Shows active playheads |
| Transient preview markers | Auto Chop preview | Dashed markers shown before applying transient split |
| Area | Function | Notes |
|---|---|---|
| Time ruler | Shows time markings for the current view | Updates with zoom level |
| Drag horizontally | Scroll | Uses the current zoom level |
| Drag vertically | Zoom | Anchored to the drag start position |
| Button | Function | Notes |
|---|---|---|
ADD |
Toggle draw-slice mode | Drag on the waveform to create a slice |
LAZY / STOP |
Start/stop real-time lazy chopping | Label changes while active |
AUTO |
Open/close Auto Chop panel | Requires a selected slice |
COPY |
Duplicate selected slice | Equivalent to duplicate command |
DEL |
Delete selected slice | No effect with no selection |
ZX |
Snap edits to nearest zero crossing | Toggle |
FM |
Follow MIDI note selection | Auto-selects the played slice |
The bottom bar is the main parameter editor. It has GLOBAL and SLICE tabs plus four modules: PLAYBACK, FILTER, AMP, and OUTPUT.
When a slice is selected, the SLICE tab also shows:
- slice length
- note name
- MIDI note number
- override count
General behavior:
- Drag up/down on a value to edit it.
- Double-click a value to type it directly.
- In
SLICEmode, editing a field locks that field for the selected slice when it differs from the global value. - In
SLICEmode, clicking a locked field label or right-clicking the field clears that override.
| Control | Function | Notes |
|---|---|---|
| Sample info text | Load / relink sample | Click the text area |
SLICES |
Slice count | Read-only |
ROOT |
Root note for new slices | Editable only before any slices exist |
UNDO / REDO |
History navigation | Buttons in the header |
PANIC |
Kill active voices immediately | Also stops lazy chop |
LOAD |
Open file chooser | Replaces current sample |
SET |
Theme, scale, and NRPN popup | Theme chooser, +/- 0.25 scale, and NRPN settings |
| Control | Function | Notes |
|---|---|---|
BPM |
Tempo reference | 20 to 999 |
SET BPM |
Calculate BPM from duration menu | 16 bars to 1/16 note |
PITCH |
Semitone shift | -48 to +48 st |
TUNE |
Fine detune | -100 to +100 ct |
ALGO |
Playback algorithm | Repitch, Stretch, Bungee |
TONAL |
Tonality limit | Stretch only |
FMNT |
Formant shift | Stretch only |
FMNT C |
Formant compensation | Stretch only |
GRAIN |
Grain mode | Bungee only: Fast, Normal, Smooth |
STRETCH |
Tempo-sync stretch toggle | Works with the selected algorithm |
1SHOT |
One-shot playback | Ignores note-off until the slice ends |
Playback notes:
- When
ALGO=RepitchandSTRETCH=ON,PITCHandTUNEbecome BPM-derived read-only displays. - In
SLICEmode, the context row also exposes the selected slice's note name and MIDI note number.
| Control | Function | Notes |
|---|---|---|
ON |
Enable/disable the filter | Per-voice filter toggle |
TYPE |
Filter mode | LP, HP, BP, NT |
SLOPE |
Filter steepness | 12 dB or 24 dB |
CUT |
Base cutoff frequency | Displayed in Hz |
RESO |
Resonance amount | Higher values emphasize the cutoff region |
DRIVE |
Pre-filter saturation | Adds harmonics before filtering |
KEY |
Key tracking amount | 0-100%, relative to the slice/root note mapping |
ATK / DEC / SUS / REL |
Filter envelope shape | Separate from the amp envelope |
AMT |
Filter envelope depth | Bipolar semitone offset (st) applied to cutoff |
Filter notes:
- Start with
ON,TYPE=LP, modestRESO, and a lowerCUTto hear the filter clearly. - Raise
DRIVEif you want a dirtier or more aggressive tone before the filter stage. - Use
KEYwhen you want higher MIDI notes to sound brighter and lower notes darker. - Use positive
AMTfor a classic opening filter envelope and negativeAMTfor an inverted sweep. AMTis in semitones because it controls octave-style movement of cutoff.+12 stdoubles the cutoff,-12 sthalves it.- Filter settings resolve at note-on, so changing cutoff while a note is already playing affects the next note rather than re-tuning the current voice.
| Control | Function | Notes |
|---|---|---|
ATK / DEC / SUS / REL |
Amp envelope | Standard ADSR for voice level |
TAIL |
Release-tail toggle | Allows playback to continue past slice boundary during release |
| Control | Function | Notes |
|---|---|---|
REV |
Reverse playback | Toggle |
LOOP |
Loop mode | OFF, LOOP, PP |
MUTE |
Mute group | Voices in the same group choke each other |
GAIN |
Gain | -100 to +24 dB |
OUT |
Output bus | SLICE mode only, 1 to 16 |
VOICES |
Max playable voices | GLOBAL mode only, 1 to 31 |
| Button | Function |
|---|---|
ADD |
Toggle draw-slice mode (shows a waveform hint to drag and create a slice) |
LAZY / STOP |
Start/stop real-time lazy chopping |
AUTO |
Open Auto Chop panel for the selected slice (prompts you to select a slice first if none is selected) |
COPY |
Duplicate selected slice |
DEL |
Delete selected slice |
ZX |
Snap edits to nearest zero crossing |
FM |
Follow MIDI (auto-select played slice) |
Requires a selected slice before opening.
| Control | Function |
|---|---|
SENS |
Transient sensitivity (0-100%) with live marker preview |
SPLIT TRANSIENTS |
Split selected slice at detected transients |
DIV |
Equal split count (2-128) |
SPLIT EQUAL |
Split selected slice into equal divisions |
CANCEL |
Close panel without applying |
| Gesture | Result |
|---|---|
| Drag-and-drop file | Load sample |
| Click slice | Select slice |
Click empty waveform in ADD mode |
Begin draw-slice gesture |
Drag S / E edge handles |
Resize selected slice |
| Drag inside selected slice | Move slice |
Ctrl + drag selected slice |
Duplicate slice to new position |
Alt + drag waveform |
Temporary draw-slice gesture |
Press ADD / Shift + A |
Enters draw mode and shows an on-waveform hint |
Shift + click waveform |
Preview from clicked sample position |
| Mouse wheel | Cursor-anchored zoom |
Shift + mouse wheel |
Horizontal scroll |
| Middle-button drag | Combined horizontal scroll + vertical zoom |
| Drag in time / zoom bar | Horizontal drag scrolls, vertical drag zooms |
| Shortcut | Action |
|---|---|
Ctrl/Cmd + Z |
Undo |
Ctrl/Cmd + Shift + Z |
Redo |
Shift + A |
Toggle ADD mode |
Shift + Z |
Toggle LAZY / STOP |
Shift + C |
Toggle Auto Chop panel |
Shift + D |
Duplicate selected slice |
Delete / Backspace |
Delete selected slice |
Shift + X |
Toggle ZX |
Shift + F |
Toggle FM |
Right Arrow or Tab |
Select next slice |
Left Arrow or Shift + Tab |
Select previous slice |
Esc |
Close Auto Chop panel |
Single-letter action shortcuts are intentionally unbound so DAW keyboard-MIDI note entry remains available.
INTERSECT supports NRPN-based slice editing from a hardware or software MIDI controller. Enable it via the SET button in the header bar — the popup contains an NRPN section with channel and consume options.
Controller requirements: The controller must have endless rotary encoders (not fixed-range knobs) and must support NRPN mode with configurable MSB/LSB address values. Crucially, it must send relative data bytes — CC 96 (Data Increment) and CC 97 (Data Decrement) — one step per click. Controllers that only send absolute values (CC 6 Data Entry) will not work, nor will standard fixed-range knobs. Examples include the Akai MPD32 and MPD218. Results may vary.
Select the slice to edit by enabling FM (Follow MIDI) and playing its MIDI note. Then use the start/end knobs to adjust the slice boundaries. Commit happens automatically ~300ms after the knob stops moving — the same feel as releasing a parameter slider. Zoom in for finer control; each knob step moves viewWidth / 16383 samples.
NRPN numbers use CC 99 (MSB address) / CC 98 (LSB address) to select the parameter, then CC 96 (Data Increment) or CC 97 (Data Decrement) to send a ±1 step. No absolute-value data bytes (CC 6/38) are used.
When programming a hardware controller, set the knob to NRPN mode with MSB 64 and the LSB from the table below.
| NRPN | MSB | LSB | Name | Direction | Notes |
|---|---|---|---|---|---|
| 8193 | 64 | 1 | Zoom | CC 96 / CC 97 | Zoom in / out |
| 8194 | 64 | 2 | Slice start | CC 96 / CC 97 | Each step = viewWidth / 16383 samples |
| 8195 | 64 | 3 | Slice end | CC 96 / CC 97 | Each step = viewWidth / 16383 samples |
Open with the SET button in the header bar.
| Control | Function |
|---|---|
NRPN |
Enable/disable NRPN slice editing |
CONSUME CCs |
Strip NRPN edit CCs from MIDI output so they don't reach downstream instruments |
CH − / CH + |
MIDI channel filter (0 = omni) |
Settings are saved to the INTERSECT settings file alongside theme and UI scale.
Ableton Live: NRPN control does not work in Ableton Live. Ableton intercepts the CC 96/97 data-increment bytes before they reach the plugin, so the plugin only ever sees the address bytes (CC 98/99) and can never fire an event. This is an Ableton routing limitation with no known workaround on the plugin side.
REAPER / Bitwig: Route a MIDI track to the plugin instance as normal. No additional configuration is needed; all CC messages are forwarded to the plugin.
INTERSECT supports custom .intersectstyle themes. On first launch it creates default dark.intersectstyle and light.intersectstyle in the user theme directory.
| OS | Theme folder |
|---|---|
| Windows | %APPDATA%\Roaming\INTERSECT\themes\ |
| macOS | ~/Library/Application Support/INTERSECT/themes/ |
| Linux | ~/.config/INTERSECT/themes/ |
Create a custom theme:
- Copy one of the starter files from
themes/and rename it, for examplemytheme.intersectstyle. - Set a unique
name:value (used in the UI theme list). - Edit colors as 6-digit hex
RRGGBB. - Place the file in your user theme folder.
- Restart the plugin, then use the SET button in the header to select the theme.
The SET button popup also controls interface scale (0.5x to 3.0x in 0.25 steps).
- CMake
3.22+ - C++20 compiler
- Git
Pick your platform below to install the required toolchain and libraries, then follow the shared Clone and build steps.
Windows
- Install Visual Studio 2022 (Community edition is free). During installation, select the "Desktop development with C++" workload.
- Install CMake (add to PATH during install) and Git.
macOS
- Install Xcode Command Line Tools:
xcode-select --install
- Install CMake via Homebrew:
brew install cmake
Linux — Debian / Ubuntu
sudo apt update
sudo apt install -y build-essential cmake git libasound2-dev libfreetype-dev \
libx11-dev libxrandr-dev libxcursor-dev libxinerama-dev \
libwebkit2gtk-4.1-dev libcurl4-openssl-devLinux — Fedora
sudo dnf install -y gcc-c++ cmake git alsa-lib-devel freetype-devel \
libX11-devel libXrandr-devel libXcursor-devel libXinerama-devel \
webkit2gtk4.1-devel libcurl-develLinux — Arch
sudo pacman -S --needed base-devel cmake git alsa-lib freetype2 \
libx11 libxrandr libxcursor libxinerama webkit2gtk-4.1 curlgit clone --recursive https://github.com/tucktuckg00se/INTERSECT.git
cd INTERSECT
cmake -B build
cmake --build build --config Release- VST3:
build/Intersect_artefacts/Release/VST3/INTERSECT.vst3 - Standalone:
- Windows:
build/Intersect_artefacts/Release/Standalone/INTERSECT.exe - Linux:
build/Intersect_artefacts/Release/Standalone/INTERSECT - macOS:
build/Intersect_artefacts/Release/Standalone/INTERSECT.app
- Windows:
- AU (macOS):
build/Intersect_artefacts/Release/AU/INTERSECT.component
Pushing a tag matching v* triggers the GitHub Actions release workflow, which builds and packages:
- Windows x64
- Linux x64
- macOS arm64
- macOS x64
- JUCE (git submodule)
- Signalsmith Stretch (MIT)
- Signalsmith Linear (dependency of Signalsmith Stretch)
- Bungee (MPL-2.0)
INTERSECT is licensed under the GNU General Public License v3.0.
- INTERSECT currently works with one loaded sample per plugin instance.
- Project recall stores sample file paths; if files move, relink is required.
- Builds are unsigned; platform security prompts (especially macOS) may require manual trust/quarantine removal.
- Report bugs or request features via GitHub Issues on this repository.
