pysox
Python wrapper around sox. Read the Docs here.



This library was presented in the following paper:
R. M. Bittner, E. J. Humphrey and J. P. Bello, "pysox: Leveraging the Audio Signal Processing Power of SoX in Python", in Proceedings of the 17th International Society for Music Information Retrieval Conference Late Breaking and Demo Papers, New York City, USA, Aug. 2016.
Install
This requires that SoX version 14.4.2 or higher is installed.
To install SoX on Mac with Homebrew:
brew install sox
If you want support for mp3
, flac
, or ogg
files, add the following flags:
brew install sox --with-lame --with-flac --with-libvorbis
on Linux:
apt-get install sox
or install from source.
To install the most up-to-date release of this module via PyPi:
pip install sox
To install the master branch:
pip install git+https://github.com/rabitt/pysox.git
or
git clone https://github.com/rabitt/pysox.git
cd pysox
python setup.py install
Tests
If you have a different version of SoX installed, it's recommended that you run
the tests locally to make sure everything behaves as expected, by simply running:
pytest
Examples
import sox
tfm = sox.Transformer()
tfm.trim(5, 10.5)
tfm.compand()
tfm.fade(fade_in_len=1.0, fade_out_len=0.5)
tfm.build_file('path/to/input_audio.wav', 'path/to/output/audio.aiff')
tfm.build('path/to/input_audio.wav', 'path/to/output/audio.aiff')
array_out = tfm.build_array(input_filepath='path/to/input_audio.wav')
tfm.effects_log
> ['trim', 'compand', 'fade']
Transform in-memory arrays:
import numpy as np
import sox
sample_rate = 44100
y = np.sin(2 * np.pi * 440.0 * np.arange(sample_rate * 1.0) / sample_rate)
tfm = sox.Transformer()
tfm.pitch(2)
y_out = tfm.build_array(input_array=y, sample_rate_in=sample_rate)
tfm.build_file(
input_array=y, sample_rate_in=sample_rate,
output_filepath='path/to/output.wav'
)
tfm.set_output_format(rate=8000)
tfm.build_file(
input_array=y, sample_rate_in=sample_rate,
output_filepath='path/to/output_8k.wav'
)
Concatenate 3 audio files:
import sox
cbn = sox.Combiner()
cbn.pitch(3.0)
cbn.convert(samplerate=8000, n_channels=2)
cbn.build(
['input1.wav', 'input2.wav', 'input3.wav'], 'output.wav', 'concatenate'
)
Get file information:
import sox
sample_rate = sox.file_info.sample_rate('path/to/file.mp3')
n_samples = sox.file_info.num_samples('path/to/file.wav')
is_silent = sox.file_info.silent('path/to/file.aiff')