ablx.directory

KLANG

v1.1.0

A node-graph editor for CDP8 sound processing, built as an Ableton Live extension and inspired by SoundThread

Francesco Casanovamanifest author: cipp0_No ratings yet

Unverified listing. This repo is new or has little community activity and the developer has not claimed it. Extensions run code inside Live — read the source, check the author, and only install things you trust.

README · rendered from GitHubView source

KLANG

A node-graph editor for CDP8 (Composers Desktop Project) sound processing, built as an Ableton Live extension and inspired by SoundThread. Right-click an Arrangement clip or time selection, build a chain of CDP processes as a node graph, and send the result back into Live as a new audio clip.

The 232 CDP command-line binaries are bundled in resources/cdp-bin/ — no separate CDP install needed. See Licensing below.

Setup (building from source)

This repo does not include Ableton's Extensions SDK/CLI packages (vendor/, gitignored) — Ableton's SDK license forbids redistributing the SDK itself outside your own application, so every developer needs their own copy:

  1. Download the Extensions SDK beta from https://ableton.github.io/extensions-sdk/
  2. Copy ableton-extensions-sdk-*.tgz and ableton-extensions-cli-*.tgz from the download into a vendor/ folder at the repo root.
  3. Copy .env.example to .env and point EXTENSION_HOST_PATH at your local Ableton Live install (see comments in the file).
  4. npm install, then npm start to build and run in Live's Extension Host, or npm run package to produce a .ablx.

If you just want to use KLANG rather than build it, grab the prebuilt .ablx from this repo's Releases instead — the CDP binaries are already bundled in it, only the SDK/CLI build tooling is excluded from source control.

Usage

  1. In Live's Arrangement View, select a clip or a time range on an audio track.
  2. Right-click → Open in KLANG.
  3. A window opens with the selection's audio already loaded as a source node.
  4. Click + CDP Process to add a node, drag from an output port (right) to an input port (left) to connect nodes. Ports are colour-coded by format — blue for .wav, purple for .ana (PVOC frequency-domain data) — and won't connect if the formats don't match.
  5. Click a node to edit its parameters, then Run to process it (and everything upstream of it).
  6. Once you have a result you like, click Send to Live on that node — it's imported and placed right after your original clip/selection on the same track. The original is never overwritten.
  7. Save Thread / Load Thread persist a node graph (not the audio) for reuse.
  8. Close the window with ✕ Close Window — if Clean up on close is checked (default), all audio/analysis files generated during the session are deleted; the graph itself isn't affected.

KLANG only registers for the Arrangement View (a clip and a time-selection context menu action) — it does not appear in Session View / clip slots.

An Audio Input node can also load a file directly (Choose audio file…, or paste/drop a path), so you can use KLANG without an Arrangement selection.

Automating a parameter: parameters CDP can sweep over time show a ⟳ button. Turn it on and the value becomes a list of time/value points — 0:1 2.5:40 5:4 — which CDP interpolates between across the sound. The ✎ button draws that curve instead of typing it.

Supported input formats: uncompressed audio only — .wav, .aif, .aiff, .aifc, .amb. CDP's soundfile library cannot read MP3, FLAC, OGG or M4A; convert those first. Audio is normalised to 32-bit float before frequency-domain analysis (see the note in the changelog), so processed output comes back as 32-bit float WAV.

Where's the cache?

KLANG writes generated audio/analysis files to Ableton's per-extension temp directory, and saved threads + the process manifest to its per-extension storage directory:

  • Temp (generated audio, cleared automatically): $TMPDIR/Ableton Extensions/cipp0.klang/ ($TMPDIR is macOS's per-user temp folder, typically /var/folders/.../T/; run echo $TMPDIR in a terminal to see yours)
  • Storage (saved threads, manifest): ~/Library/Application Support/Ableton/Extensions Data/cipp0.klang/

With Clean up on close checked (the default), the temp folder is emptied every time you close the KLANG window, so it shouldn't grow unbounded. If you ever want to clear it by hand (e.g. after leaving the window open for a long session), it's safe to delete the contents of the temp path above — nothing there is needed once the window is closed. Never delete the storage path's threads/ folder unless you want to lose your saved graphs.

Building / running this extension

npm start                  # build + run in Live's Extension Host
npm run build               # production bundle of src/extension.ts
npm run build:dev           # dev bundle (sourcemaps, not minified)
npm run package              # build for production + create a .ablx archive

The path to Live's Extension Host is stored in .env as EXTENSION_HOST_PATH.

Codesigning the bundled CDP binaries

The bundled binaries in resources/cdp-bin/ are unsigned. macOS Gatekeeper normally blocks unsigned binaries downloaded from the internet, so on first activation the extension runs a best-effort xattr -d com.apple.quarantine pass over resources/cdp-bin/* — this is usually enough for local/personal use, since files installed as part of a packaged extension rather than downloaded directly don't always carry the quarantine flag the same way a direct download does.

If you hit a Gatekeeper block anyway, or want to distribute this extension to other people, sign the binaries properly instead of relying on the quarantine-removal workaround:

# Ad-hoc signing (no Developer ID needed, fixes local Gatekeeper blocks):
find resources/cdp-bin -type f -perm +111 -exec codesign --force --sign - {} \;

# Proper signing for distribution (requires an Apple Developer ID certificate):
find resources/cdp-bin -type f -perm +111 -exec codesign --force --timestamp \
  --options runtime --sign "Developer ID Application: Your Name (TEAMID)" {} \;

# Verify a binary is signed:
codesign -dv --verbose=4 resources/cdp-bin/pvoc

If you'd rather build CDP from source than use the bundled binaries (e.g. to get a signed build, or a newer CDP release), the source is at ComposersDesktop/CDP8; build per its own instructions and drop the resulting executables into resources/cdp-bin/, keeping the same filenames referenced in resources/manifest.json.

CDP tools used

53 CDP executables, invoked as separate processes (never linked into this extension), power the 156 processes in resources/manifest.json:

ExecutableUsed for
blurSpectral blur, average, suppress, chorus, drunk walk, noise, random thinning
bounceBouncing Ball — accelerating, decaying repeats
cascadeEchoed/cascading repeats
distortWaveset reverse, pitch warp
distorttWaveset repeat
distrepWavecycle repeat
distshiftHalf-wavecycle shift
distwarpProgressive sample warp
extendZigzag, loop, drunk walk, repeat segments
filterLow/high-pass filter
focusAccumulate, stepped freeze, exaggerate, focus, fold
gateNoise gate
grainTime warp, reverse grains
hiliteHighpass filter, trace (retain loudest partials)
housekeepMono/stereo channel splitting (internal, for stereo support)
hoverZigzag read at a frequency
interlxStereo interleave (internal, for stereo support)
modifySpeed change, stack (layered transpositions)
morphSpectral morph between two sounds
multioscFM synthesis (4-operator)
newdelayPitched delay
pitchPitch transpose, pitch shift, tune spectrum to a frequency
pvocPVOC analysis / resynthesis (frequency domain in/out)
quirkPower-curve distortion
reverb / rmverbReverb
scrambleWaveset reorder
specFreeze (magnify a window), trim (cut)
specavSpectral average
specfnuFormant operations: narrow, squeeze, invert, rotate, negative, move/shift, randomise partials, transpose under formants
specnuSpectral squeeze, randomise window order
spikeEnvelope-to-peak shaping
spinStereo image rotation
splinterShrinking waveset repeats
strangeFrequency shift, glissandi (Shepard / inharmonic / self), waver, spectral invert
stretchTime stretch, spectral stretch above/below a split point
subtractSubtract one file from another
synsplineRandom-overtone synthesis
synthBasic waveform / noise synthesis
tremenv / tremoloTremolo (envelope-following / fixed-rate)

Changelog

See CHANGELOG.md for what's been added and fixed.

Licensing

Three different licenses apply to different parts of this project:

  • This project's own code (src/, resources/ui/, resources/manifest.json) — MIT, see LICENSE.
  • The bundled CDP binaries (resources/cdp-bin/) — unmodified CDP Release 8 command-line tools, © the Composers Desktop Project (Trevor Wishart, Richard Dobson, et al.), licensed under LGPL 2.1. See resources/cdp-bin/LICENSE-LGPL-2.1.txt and resources/cdp-bin/NOTICE.md. They're invoked as separate OS processes (subprocess calls), not linked into this extension's code, and are redistributed here verbatim. Source: https://github.com/ComposersDesktop/CDP8
  • Ableton's Extensions SDK/CLI (used to build this project, not included in this repo) — © Ableton AG, under Ableton's own Extensions SDK License, which explicitly forbids redistributing the SDK itself outside of an application built with it. That's why vendor/*.tgz is gitignored rather than committed — see Setup for how to get your own copy. This restriction applies only to the SDK/CLI tooling, not to this project's own source code or to the CDP binaries above.

Built by cipp0_ — Francesco Casanova.

Rate this extension

One rating per account; you can change it any time.

No ratings yet — be the first

Comments

Sign in to join the discussion.Sign in

No comments yet.