TimeStretch
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)
bbc8c0230e33092e04a0746b99286da17413206f
f5329795cf2ff618aef7ca0d251e5a0cf3258014
8cf739e562d05015e02a6eb8b74226dc5bd67c19
8f94df341995cbbec4aecdcec517a2066402b4fa
1d77cfd6747220e826dc858d92f4c764c58e4697
bdc306c15cfa940094d916733f531949b8a358bb
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)']