Skip to main content

A Python Wrapprer of the Signalsmith Stretch C++ library for pitch and time stretching

Project description

python-stretch: pitch shifting and time stretching

License: MIT Supported Platforms Pip Action Status Pip Action Status

A simple Python Wrapper of the Signalsmith Stretch C++ library for pitch and time stretching.

Features

  • Time stretching
  • Pitch shifting
  • Multichannel support: Works with mono and multichannel audio files.
  • Seamless integration: Works natively with NumPy arrays for compatibility with libraries such as librosa and many others used in audio processing pipelines.

Installation

python-stretch is available via PyPI (via Platform Wheels):

pip install python-stretch

Alternatevly, you can easly build it from source (You need a c++ compiler and cmake).

# Clone from github
git clone --recurse-submodules https://github.com/gregogiudici/python-stretch.git
# Install
pip install ./python-stretch

Examples

Quick Start

import numpy as np
import librosa
import python_stretch as ps

# Load an audio example from librosa (e.g., 'trumpet', 'brahms',...)
audio, sr = librosa.load(librosa.ex('trumpet'), sr=None)

# Assure that "audio" is a 2d array
if (audio.ndim == 1):
    audio = audio[np.newaxis, :]

# Create a Stretch object
stretch = ps.Signalsmith.Stretch()
# Configure using a preset
stretch.preset(audio.shape[0], sr) # numChannels, sampleRate
# Shift up by one octave
stretch.setTransposeSemitones(12)
# Stretch time
stretch.timeFactor = 0.75

# Process
audio_processed = stretch.process(audio)

# Save and listen
import soundfile as sf
sf.write("audio_original.wav", np.squeeze(audio), sr)
sf.write("audio_processed.wav", np.squeeze(audio_processed), sr)

Acknowledgements

  • Signalsmith Stretch: python-stretch is built on top of the Signalsmith Stretch C++ library, which provides the core algorithms for time stretching and pitch shifting.
  • nanobind: This project utilizes nanobind for easily binding the C++ code to Python.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-stretch-0.2.0.tar.gz (895.9 kB view hashes)

Uploaded Source

Built Distributions

python_stretch-0.2.0-pp310-pypy310_pp73-win_amd64.whl (73.9 kB view hashes)

Uploaded PyPy Windows x86-64

python_stretch-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (93.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (96.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

python_stretch-0.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (62.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

python_stretch-0.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (67.6 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

python_stretch-0.2.0-pp39-pypy39_pp73-win_amd64.whl (73.9 kB view hashes)

Uploaded PyPy Windows x86-64

python_stretch-0.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (93.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (96.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

python_stretch-0.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (62.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

python_stretch-0.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (67.6 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

python_stretch-0.2.0-cp312-abi3-win_amd64.whl (74.2 kB view hashes)

Uploaded CPython 3.12+ Windows x86-64

python_stretch-0.2.0-cp312-abi3-win32.whl (63.9 kB view hashes)

Uploaded CPython 3.12+ Windows x86

python_stretch-0.2.0-cp312-abi3-musllinux_1_2_x86_64.whl (525.0 kB view hashes)

Uploaded CPython 3.12+ musllinux: musl 1.2+ x86-64

python_stretch-0.2.0-cp312-abi3-musllinux_1_2_i686.whl (566.6 kB view hashes)

Uploaded CPython 3.12+ musllinux: musl 1.2+ i686

python_stretch-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (92.5 kB view hashes)

Uploaded CPython 3.12+ manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (95.5 kB view hashes)

Uploaded CPython 3.12+ manylinux: glibc 2.17+ i686

python_stretch-0.2.0-cp312-abi3-macosx_11_0_arm64.whl (62.0 kB view hashes)

Uploaded CPython 3.12+ macOS 11.0+ ARM64

python_stretch-0.2.0-cp312-abi3-macosx_10_14_x86_64.whl (67.8 kB view hashes)

Uploaded CPython 3.12+ macOS 10.14+ x86-64

python_stretch-0.2.0-cp311-cp311-win_amd64.whl (76.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

python_stretch-0.2.0-cp311-cp311-win32.whl (65.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

python_stretch-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl (528.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

python_stretch-0.2.0-cp311-cp311-musllinux_1_2_i686.whl (570.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

python_stretch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (96.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (99.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

python_stretch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (65.0 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

python_stretch-0.2.0-cp311-cp311-macosx_10_14_x86_64.whl (71.0 kB view hashes)

Uploaded CPython 3.11 macOS 10.14+ x86-64

python_stretch-0.2.0-cp310-cp310-win_amd64.whl (76.3 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

python_stretch-0.2.0-cp310-cp310-win32.whl (65.7 kB view hashes)

Uploaded CPython 3.10 Windows x86

python_stretch-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl (528.6 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

python_stretch-0.2.0-cp310-cp310-musllinux_1_2_i686.whl (570.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

python_stretch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (96.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (100.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

python_stretch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (65.2 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

python_stretch-0.2.0-cp310-cp310-macosx_10_14_x86_64.whl (71.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.14+ x86-64

python_stretch-0.2.0-cp39-cp39-win_amd64.whl (76.7 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

python_stretch-0.2.0-cp39-cp39-win32.whl (66.2 kB view hashes)

Uploaded CPython 3.9 Windows x86

python_stretch-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl (528.8 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

python_stretch-0.2.0-cp39-cp39-musllinux_1_2_i686.whl (570.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

python_stretch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (97.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

python_stretch-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (100.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

python_stretch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl (65.4 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

python_stretch-0.2.0-cp39-cp39-macosx_10_14_x86_64.whl (71.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.14+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page