A Python Wrapprer of the Signalsmith Stretch C++ library for pitch and time stretching
Project description
python-stretch: pitch shifting and time stretching
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
Release history Release notifications | RSS feed
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)
Built Distributions
Close
Hashes for python_stretch-0.2.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd296c4d9dad2993845acb558779c61714c1c0a24044bcf2dad5dbf4bfa5e14a |
|
MD5 | 7d315b031166664edf5662b3c556bb5d |
|
BLAKE2b-256 | 34e82f7614f9d016cabf867e1176fc8a5da0223f58ce1687ef29eb85181f2a59 |
Close
Hashes for python_stretch-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e625f9667c38b8a2b40deb2c82383ca967f8995cbd638446f57915336d81392 |
|
MD5 | 8d0d4671dba469617d44a6c518a13fcb |
|
BLAKE2b-256 | 5bad82e0dc1f0ac50ca93f31f26faf29fd384e51829a2f46443e16de96c47e8e |
Close
Hashes for python_stretch-0.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90d325f4d2e3f98affb53206331f231402ac8860195ec845a3c3cfd11b113c94 |
|
MD5 | c82c23a724dbc11fe76cbd269b3a8d89 |
|
BLAKE2b-256 | 9c5bbb79b168b2ac8e561fdce3fe83b28321b1fc75e32a990a7cb12232767053 |
Close
Hashes for python_stretch-0.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c6cf568a94d21c6148eaeb2ee5d56384798480597253f06e59545d17e854a4d |
|
MD5 | 70519dffcdf5d27aa7537429c54a9c68 |
|
BLAKE2b-256 | 468a374094124de4c2ae526b8dbe22f89ab9ee16479ef282f95cdba3144bcdbb |
Close
Hashes for python_stretch-0.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13ceeadb4028daad9c51d085abcc7252592a4e4c7a25ef9ba94cef871008a3f3 |
|
MD5 | e409d29902575408e46dfbd3ac7162f7 |
|
BLAKE2b-256 | be0adc09b8f1cd8bab46322fabd1096a7d7ef24f09ebb9b4c3c997e910351b18 |
Close
Hashes for python_stretch-0.2.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6781062a96e363de08269e308a2e1de30a713cced2799afb93c2f6b9aa6ba8e |
|
MD5 | 2d2111d9136674c3a30ce8b909040dc0 |
|
BLAKE2b-256 | 9b16a3dc42082de387d40c8cba86ea1355861b058b0bac3d83b331e753a75982 |
Close
Hashes for python_stretch-0.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a97b692ee2c1a0c633b07cab81a1ff5da82e74dadfbd3703a0e10b9996cd5a7 |
|
MD5 | ea2d11b2c937f67087c68aaf68d05e58 |
|
BLAKE2b-256 | 33cfac044cac227da842ba97165e2c56dacda1db8061d1c9ea74cbaa5179c4d8 |
Close
Hashes for python_stretch-0.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5fa74b61ec115c796b1e9265db96435cef77c6d384c05d71175418a4bbb2419 |
|
MD5 | c80bea7705b6d2c1970110451831eab6 |
|
BLAKE2b-256 | 0b37d33cc575741b40faeed55ea95f50fdd4a52ee2bdd71d4561a1117c1e9e3b |
Close
Hashes for python_stretch-0.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5e3fbbde7b53ab755af294a9c8cdd1a11210d3ec8f5e3157f9b840b3afb7d95 |
|
MD5 | a44c7cab017e1093e0a1602d2588c73a |
|
BLAKE2b-256 | 8a8a5f2fdfea2b6475ed4b8f98289a74cc0822c7e16199da734e59f5452ca2ee |
Close
Hashes for python_stretch-0.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cbe06e7a84854ebc5d8dda124921bb37a726641bfae9f4126aa55dcb7a793cec |
|
MD5 | 1240ea895cef14d72aff3eeb0217d28e |
|
BLAKE2b-256 | cfe934888dbaa3a8248bc302d6a2e62c68d2a9e0b9a969f77fe17f1064478c56 |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45c8fee66021b8f88ea9f050d17df72cd1990153e6f2a69ddcf04c0f190753ef |
|
MD5 | 8988ad7c0b069eff58fd4527619bb6df |
|
BLAKE2b-256 | 26e173576f820271b450195f71c09f5882c1792faf9b5b4567e3ae1c7c4bdd73 |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf4e8829988fb17036d539b6bbcb764cde48214c8ec433a72aad899523f4bd4a |
|
MD5 | 8e43842c030b1a587b62e2579b14416b |
|
BLAKE2b-256 | 9e4138288ec0f31016cad54d7cb66298e2b68e384909c0fd0674118d7e30812d |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87497cb8fb1b475c55915aaf4d90b6316080c12d9317f721bbebbc63f7928fc1 |
|
MD5 | 1371848b3197df3ae5f43fed528b5dce |
|
BLAKE2b-256 | 849c60979c5de2deb546861d955b5500a0e4dd31062fcff205fb492b31cc8910 |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8232f291bf31ac075e081be887e16549bd00a2ebd59f98cd1d37bf1679edcc8b |
|
MD5 | 63a77236e3b1c704c2261e0c47f90104 |
|
BLAKE2b-256 | 003b9a975eb3c9a5000ad3a29d25b8914a1d4e8e52d6ca0d382a487cdfc21615 |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b38b5303cf43add88b6f2d4b7dc9f05fd0e59f38b8e433eb8a17751e99319f9d |
|
MD5 | 34f8e3b764692ed55628e2c46cc4cbf2 |
|
BLAKE2b-256 | 564f18f277052c0bef83342e98b44b0b085c99843f06404427f1c13cbf26876e |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61545e5677910541a867f4308d95a81d27993bfe4a28f1fc55c2080e6f292be0 |
|
MD5 | b64f12319d2effde5e2f620bd2c48548 |
|
BLAKE2b-256 | a0c8e697d1b57101d2b2ec6e718b5bfb2df96421d702164fa80889fa6b95798b |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce484b0156aef6196c961bc8cdbbdab39620a43a8a97b67e6cfc5e489bc2b1d2 |
|
MD5 | cd18e477a2566489af38ca77b5a82c82 |
|
BLAKE2b-256 | 3dc426e206a230e7d6aad1306c15459a425873e81e015ace57338566bf520b10 |
Close
Hashes for python_stretch-0.2.0-cp312-abi3-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b3867dcb2b2fd3352ab4abcb5b4025c8c80fe3f15776332467ac1879279660b |
|
MD5 | a829136953d4a07c4b9ed91f4f8e2dfa |
|
BLAKE2b-256 | 22e8b01e99b24d07538c41c239b35d351a74947f70202d454a51f49e8f29f72e |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23afcce29b7a27b6a8457ae2c44af0d8ec72fe63d2cca2ec650461452f6d93c8 |
|
MD5 | 3e72cf2f99128c87d43fcd099c59e3ba |
|
BLAKE2b-256 | 1e523f6f8cb25f0df3bf270f7d63e892f99de45860fb1b547098f190c639af46 |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f010d163c19a2ba92a227dcc3ead6aeceec8106983129897c66888788982416 |
|
MD5 | 35604947e74be564a6b76b124c2edf04 |
|
BLAKE2b-256 | 72d85b02071919608e8d96515d3ad10009478e21bd4fdadcb404d6a12329378e |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3599954232dcd68e0030f4a9e53e634c093a3594422f23f558b7a56cb7474ba5 |
|
MD5 | 5e448cc0d46e449eebc78db4442c4bea |
|
BLAKE2b-256 | 75aa458cd2cecd45d7e15f0bcbe1f590c363a89f9601b28da5af82ff63da05e8 |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16675bbb3dc693125a30c6c31aee358c273e66f8ac80e96546983b49f4cbf9cd |
|
MD5 | 2a3a822b836ab45b8ce4ac825a4cbd46 |
|
BLAKE2b-256 | 5f6289436f2f6fe864fcdcf538fdafee99a79868499ceef0e7950f589f9ae455 |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87461082b4a9a91ed0cfe488ef212a756f3126ca5314afc92801d1ff727c0341 |
|
MD5 | 388e0df7f5817b5b15292d476aaeb110 |
|
BLAKE2b-256 | 87c2adfcbf850deda3d781ec089724825fbf09461c980c7a5f01142c7ea02359 |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1601128b5b55a6d3c444c8ea781bab169993e52997c34399edd780fcb45dc6b5 |
|
MD5 | 35ffbda5153595c87d637a534594e4ea |
|
BLAKE2b-256 | f52fc373174f0fb3350129d4b10e9a13bb17ba62bd53adf511e00f92b6bd6174 |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91921fc9c52c6249151f43ee5583fe4cc1fa252be7959dce4ef01a4062e30c9e |
|
MD5 | f360abae5e865f515e7487ece47fad2c |
|
BLAKE2b-256 | 034df83e573efee54352a22a944168c6483fa8228e2e4a6f89f975c299684d9c |
Close
Hashes for python_stretch-0.2.0-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5ffe2d511f9c7d3bf27e0c45207f573d5cbd28c165be0c47dcfd63ca502af1e |
|
MD5 | 04a0b72d845c32da8ef137234627074b |
|
BLAKE2b-256 | 188a7e084ade38ba198e9de55058451f8d90b055fd9e86bc155a3c5ea1ed4601 |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2289c3e54199ed0bd5b6a22a5fc3074c9f89a8795439101311eef57dda845c2 |
|
MD5 | 5e4f0a01625764e3401facb4493351bb |
|
BLAKE2b-256 | c251bf8bb75f45662e0d7499b8e29addd68ee7f75a9da0f922a9cda6e81cc4eb |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12bfb6ead81d08f4cfac7b71e40195d85ce13afe8c3c8e0d981a697bfde5f66e |
|
MD5 | 04b311f4686a74e9882f55e863dc47c3 |
|
BLAKE2b-256 | 40da4b34a3c8d9134c8b6a840b4995e715e0688ee445203bd03c3b1ef30b2111 |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41d581580e6b700d3ed66f758082c9fac2dabaad8bf4cb0762fe0acb4e7c3d8d |
|
MD5 | 1c172534b84ba7df7a3a30ae67edb816 |
|
BLAKE2b-256 | 0ae701561e18d594c280922cb91f1f8311aea6191a5903dc86537176e684a34a |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 62fbc2801767a9ba42e64e902218740c9b1ee5c001b009cb200d4b8f399f7785 |
|
MD5 | bc36b8bc80305d7207e432a31289d4fd |
|
BLAKE2b-256 | 8999399e1a78d8299be0b389f6ac8544a65dc6f79bc4bdd1a065f4d8aa0124e1 |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fda6b8ac32144345db8796d646467c7c3cf0db37a5c448e29bd465a18d28fe9d |
|
MD5 | a93802a2256904e19151c5997f9ab7ab |
|
BLAKE2b-256 | 863439d18d5a1d560303e481ad565b40f59151310cc6d2db688b434781f811ad |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57138834bc5f288d435baafdd5ecc6018885854f19aa0af417d41b6f98c706c2 |
|
MD5 | 416eb949bef8878f0f9d97a8b6256598 |
|
BLAKE2b-256 | 235f4fb739159e4aa900b7b173485cb36e9a3f05f946d15f88c22d25fe91fea2 |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c4d8643ab3da3af78ebaf67370e47d74c3dfaa07620827ae5ef8174994df569a |
|
MD5 | 23a563c9043b19c4a9459d589751208e |
|
BLAKE2b-256 | 87d856dba3bd351f3abc4665d19f0291975c04cfc2eddd935139ab8e24215501 |
Close
Hashes for python_stretch-0.2.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a67fb56f32e48ef4d1b54e8ac2c254ce767d045e75e7b3d8364ee95c8d294a4 |
|
MD5 | a18f76f9447c9db8104c4a961e3cce3a |
|
BLAKE2b-256 | 8bc5eb33ab8f52acaed3a08ff42d86e783ded7742fe6bec4ff16a7f8203339d0 |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 534342eb42a0d3e7091b7a83111242540c5a16304e7dc4b24d8aa0ccaa203a7a |
|
MD5 | f7805a067e948be6839e0a55851abc34 |
|
BLAKE2b-256 | 8f3b5b3e6a1dfe9a361803fac7e683e0b33ee6ef73e3d917bdeb47c8bed7f38c |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da3dcef6c19bebc59b9605857da1e37b75f2a64b8192493402ea133184a8e016 |
|
MD5 | 4695897024671c36c96e13a8ed7932b5 |
|
BLAKE2b-256 | 97390de18cf78045a18a32ed46c1761b3a6d9903a87593a0b9b18975f60a5286 |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7747a18a6e2ee0e3c93620fe2826a2a9c9eac18c9d31f0d65e9bee05cc9626a |
|
MD5 | ff5ab0f038e1335916845466228c404b |
|
BLAKE2b-256 | 28553272b1c4540b462702ad7b25f33d2df71245478ace5d82574eff334d91ea |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca473fed5a1d8b39cde6cc09bc2771a372dc593c2f316b99e73f24ba6b2a34f7 |
|
MD5 | acd4bfe330d81a070dabd7f74a5dec83 |
|
BLAKE2b-256 | 4df33f6dbc0a5143018cfcc922f30b7c18083df7b83c4490a3ccd65b2aedfb1d |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24ab7f8ca62ca08f496d632343b65a81c5e5ee2f2d349f0d180c4a65583adab7 |
|
MD5 | 2ca36dacfbea7d7294f57c9084f9140f |
|
BLAKE2b-256 | 00db4e7f13679371c5c9fceac616e03a3e5a95d2ae7015f1bc1115738a75fddb |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2c773b464d10fda73cb39e36315a5380f432b966c06c1ff10a72a42a8bb02eb |
|
MD5 | 6b74a68bb9bcd13ce8756d8c10fc5707 |
|
BLAKE2b-256 | edc3a9fe8f2f5033b32963aa058cf092fff56db73c47aee07c5fec4bda8415ee |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7448e99d6f95f7f2339d5009a5a58dc6fb10220b603c8872f1c9ca8765beb2b |
|
MD5 | d5b90aade997ff0b3af0efd86f3352e8 |
|
BLAKE2b-256 | 23cbfb8625079490fd3a3be076bc881c076411ea2658661f1195d2648159182c |
Close
Hashes for python_stretch-0.2.0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 890684539218d110916193660b1c79e05d54079664be30f474d1308718f14798 |
|
MD5 | b60407ed891814f1f808a637edf439da |
|
BLAKE2b-256 | 1f2a7eec3df1bcfa21a4d3831135d29acb3d422894f3f407ab7194d16b13b4eb |