Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Python3 version by Alex Ness and Jem Altieri

SuperCollider and Rust versions by Sam Pluta

Implements a phase randomized Real FFT time stretch algorithm, the NessStretch, which splits the original sound file into 9 discrete frequency bands, and uses a decreasing frame size to correspond to increasing frequency. Starting with a largest frame of 65536, the algorithm will use the following frequency band/frame size breakdown (assuming 44100 Hz input):

0-86 Hz : 65536 frames, 86-172 : 32768, 172-344 : 16384, 344-689 : 8192, 689-1378 : 4096, 1378-2756 : 2048, 2756-5512 : 1024, 5512-11025 : 512, 11025-22050 : 256.

The NessStretch is a refinement of Paul Nasca's excellent PaulStretch algorithm. PaulStretch uses a single frame size throughout the entire frequency range. The NessStretch's layered analysis bands are a better match for human frequency perception, and do a better job of resolving shorter, noisier high-frequency sounds (sibilance, snares, etc.).

See the ICMC paper for more details. Or just run it and give it a listen.



For an optimized version of the NessStretch, use the command-line Rust version, which can be installed in a couple of different ways:

  1. via homebrew (mac universal build, so it should run on all macs), by running:
brew tap spluta/ness_stretch
brew install ness_stretch


ness_stretch -h

for the help.

  1. Rust cargo users can install with cargo:
cargo install ness_stretch

Linux and Windows builds (untested auto builds using GitHub actions) are found here:

Or download the Rust source and compile using cargo. The rust version will be very fast on Intel Macs and very slow on Arm machines (until rustfft gets updated).


Requires numpy, scipy, and pandas. Using virtualenv:

virtualenv .env
. .env/bin/activate
pip install -r requirements.txt

See the Readme inside the python directory for further instructions.


The SuperCollider version can be installed by running:


or downloading the source code and either 1) adding the source code directory to SC's path or placing the source code folder inside the Extensions folder (Platform.systemExtensionDir)