TimeStretch

An extreme time stretch plugin, based on the Ness Stretch layered STFT algorithm.

TimeStretch

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.

Installation

Rust

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 then ness_stretch -h for the help.

2) Rust cargo users can install with cargo:

cargo install ness_stretch

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

https://github.com/spluta/ness_stretch/actions/runs/1087257841

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).

Python

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.

SuperCollider

The SuperCollider version can be installed by running:

Quarks.install("TimeStretch") 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)

NRT_Server_ID
Extension
Superclass:
NRT_Server_Inc
Extension
Superclass:
NessWindow
Extension
Superclass:
PaulWindow
Extension
Superclass:
Extension
Superclass:
TangentWindow
Extension
Superclass:
TimeStretch
Extension
Superclass:
0.4.1
Date
2023-07-20
Git hash
bbc8c0230e33092e04a0746b99286da17413206f
0.4.0
Date
2021-07-31
Git hash
f5329795cf2ff618aef7ca0d251e5a0cf3258014
0.3.1
Date
2021-07-29
Git hash
8cf739e562d05015e02a6eb8b74226dc5bd67c19
0.3.0
Date
2021-07-27
Git hash
8f94df341995cbbec4aecdcec517a2066402b4fa
0.2.0
Date
2021-06-18
Git hash
1d77cfd6747220e826dc858d92f4c764c58e4697
0.1
Date
2020-07-22
Git hash
bdc306c15cfa940094d916733f531949b8a358bb
0.1.0
Date
2020-07-22
Git hash
bdc306c15cfa940094d916733f531949b8a358bb

Installation

Repository

URL

https://github.com/spluta/TimeStretch

Since

2020-06-23

Last update

2023-09-16

Current version

0.4.1

Quark info

name

TimeStretch

schelp

TimeStretch

license

GPLv3

summary

An extreme time stretch plugin, based on the Ness Stretch layered STFT algorithm.

version

1.5.0

copyright

Sam Pluta and Alex Ness, 2021

dependencies

['SignalBox', 'Flucoma Fluid Decomposition Library (optional)']

Possible dependcies

SignalBox

Possible dependants