https://github.com/dofuuz/python-soxr
Fast and high quality sample-rate conversion library for Python
https://github.com/dofuuz/python-soxr
audio-processing dsp libsoxr python resampler samplerate signal-processing
Last synced: 8 months ago
JSON representation
Fast and high quality sample-rate conversion library for Python
- Host: GitHub
- URL: https://github.com/dofuuz/python-soxr
- Owner: dofuuz
- License: other
- Created: 2021-04-28T13:16:50.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-10-12T13:26:27.000Z (9 months ago)
- Last Synced: 2025-10-21T19:45:48.002Z (8 months ago)
- Topics: audio-processing, dsp, libsoxr, python, resampler, samplerate, signal-processing
- Language: Python
- Homepage:
- Size: 184 KB
- Stars: 104
- Watchers: 4
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: COPYING.LGPL
Awesome Lists containing this project
README
# Python-SoXR
[](https://github.com/dofuuz/python-soxr) [](https://pypi.org/project/soxr/) [](https://anaconda.org/conda-forge/soxr-python) [](https://repology.org/project/python:soxr/versions) [](https://python-soxr.readthedocs.io)
High quality, one-dimensional sample-rate conversion library for Python.
- Homepage: https://github.com/dofuuz/python-soxr
- Documentation: https://python-soxr.readthedocs.io
- Release Notes: https://github.com/dofuuz/python-soxr/releases
- PyPI: https://pypi.org/project/soxr/
Keywords: Resampler, Audio resampling, Samplerate conversion, DSP(Digital Signal Processing)
Python-SoXR is a Python wrapper of [libsoxr](https://sourceforge.net/projects/soxr/).
## Installation
```sh
pip install soxr
```
If installation fails, upgrade pip with `python -m pip install --upgrade pip` and try again.
### in Conda environment
```sh
conda install -c conda-forge soxr-python
```
Note: Conda packge name is `soxr-python`, not python-soxr.
## Basic usage
```python
import soxr
y = soxr.resample(
x, # input array – mono(1D) or multi-channel(2D of [frame, channel])
48000, # input samplerate
16000 # target samplerate
)
```
If input is not `numpy.ndarray`, it will be converted to `numpy.ndarray(dtype='float32')`.
dtype should be one of float32, float64, int16, int32.
Output is `numpy.ndarray` with same dimension and data type of input.
## Streaming usage
Use `ResampleStream` for real-time processing or very long signal.
```python
import soxr
rs = soxr.ResampleStream(
44100, # input samplerate
16000, # target samplerate
1, # channel(s)
dtype='float32' # data type (default = 'float32')
)
eof = False
while not eof:
# Get chunk
...
y_chunk = rs.resample_chunk(
x, # input aray – mono(1D) or multi-channel(2D of [frame, channel])
last=eof # Set True at end of input
)
```
Output frame count may not be consistent. This is normal operation.
(ex. [0, 0, 0, 186, 186, 166, 186, 186, 168, ...])
📝 [More code examples](https://dofuuz.github.io/dsp/2024/05/26/sample-rate-conversion-in-python.html)
## Benchmark
Sweep, impulse, speed compairsion with other resamplers for Python.
https://colab.research.google.com/drive/1_xYUs00VWYOAXShB85W1MFWaUjGHfO4K?usp=sharing
### Speed comparison summary
Downsampling 10 sec of 48000 Hz to 44100 Hz.
Ran on Google Colab.
Library | Time on CPU (ms)
------------------------ | ----------------
soxr (HQ) | 10.8
torchaudio | 13.8
soxr (VHQ) | 14.5
scipy.signal.resample | 21.3
lilfilter | 24.7
julius | 31
resampy (kaiser_fast) | 108
samplerate (sinc_medium) | 223
resampy (kaiser_best) | 310
samplerate (sinc_best) | 794
## Technical detail
For technical details behind resampler, see libsoxr docs.
- https://sourceforge.net/p/soxr/wiki/Home/
- http://sox.sourceforge.net/SoX/Resampling ([archive](https://web.archive.org/web/20230626144127/https://sox.sourceforge.net/SoX/Resampling))
- https://sourceforge.net/p/soxr/code/ci/master/tree/src/soxr.h
Python-SoXR package comes with [modified version](https://github.com/dofuuz/soxr) of libsoxr. [See changes here](https://github.com/dofuuz/soxr/compare/0.1.3...master).
These changes do not apply to dynamic-linked builds (e.g. conda-forge build).
To check the version of libsoxr, use `soxr.__libsoxr_version__`.
## Credit and License
Python-SoXR is LGPL v2.1+ licensed, following libsoxr's license.
### OSS libraries used
#### libsoxr (LGPLv2.1+)
The SoX Resampler library
https://sourceforge.net/projects/soxr/
Python-SoXR is a Python wrapper of libsoxr.
#### PFFFT (BSD-like)
PFFFT: a pretty fast FFT.
https://bitbucket.org/jpommier/pffft/
libsoxr dependency.