• Stars
    star
    516
  • Rank 85,726 (Top 2 %)
  • Language
    Python
  • License
    BSD 3-Clause "New...
  • Created over 8 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Python wrapper around sox.

pysox

Python wrapper around sox. Read the Docs here.

PyPI version Documentation Status GitHub license PyPI

Build Status Coverage Status

PySocks

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
# create transformer
tfm = sox.Transformer()
# trim the audio between 5 and 10.5 seconds.
tfm.trim(5, 10.5)
# apply compression
tfm.compand()
# apply a fade in and fade out
tfm.fade(fade_in_len=1.0, fade_out_len=0.5)
# create an output file.
tfm.build_file('path/to/input_audio.wav', 'path/to/output/audio.aiff')
# or equivalently using the legacy API
tfm.build('path/to/input_audio.wav', 'path/to/output/audio.aiff')
# get the output in-memory as a numpy array
# by default the sample rate will be the same as the input file
array_out = tfm.build_array(input_filepath='path/to/input_audio.wav')
# see the applied effects
tfm.effects_log
> ['trim', 'compand', 'fade']

Transform in-memory arrays:

import numpy as np
import sox
# sample rate in Hz
sample_rate = 44100
# generate a 1-second sine tone at 440 Hz
y = np.sin(2 * np.pi * 440.0 * np.arange(sample_rate * 1.0) / sample_rate)
# create a transformer
tfm = sox.Transformer()
# shift the pitch up by 2 semitones
tfm.pitch(2)
# transform an in-memory array and return an array
y_out = tfm.build_array(input_array=y, sample_rate_in=sample_rate)
# instead, save output to a file
tfm.build_file(
    input_array=y, sample_rate_in=sample_rate,
    output_filepath='path/to/output.wav'
)
# create an output file with a different sample rate
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
# create combiner
cbn = sox.Combiner()
# pitch shift combined audio up 3 semitones
cbn.pitch(3.0)
# convert output to 8000 Hz stereo
cbn.convert(samplerate=8000, n_channels=2)
# create the output file
cbn.build(
    ['input1.wav', 'input2.wav', 'input3.wav'], 'output.wav', 'concatenate'
)
# the combiner does not currently support array input/output

Get file information:

import sox
# get the sample rate
sample_rate = sox.file_info.sample_rate('path/to/file.mp3')
# get the number of samples
n_samples = sox.file_info.num_samples('path/to/file.wav')
# determine if a file is silent
is_silent = sox.file_info.silent('path/to/file.aiff')
# file info doesn't currently support array input

More Repositories

1

crepe

CREPE: A Convolutional REpresentation for Pitch Estimation -- pre-trained model (ICASSP 2018)
Python
1,091
star
2

openl3

OpenL3: Open-source deep audio and image embeddings
Jupyter Notebook
450
star
3

jams

A JSON Annotated Music Specification for Reproducible MIR Research
Python
185
star
4

medleydb

Python
177
star
5

GuitarSet

GuitarSet: a dataset for guitar transcription
Jupyter Notebook
121
star
6

l3embedding

Learn and L3 embedding from audio/video pairs
Jupyter Notebook
86
star
7

autopool

Adaptive pooling operators for multiple instance learning
Python
76
star
8

milsed

Multiple Instance Learning for Sound Event Detection
Jupyter Notebook
34
star
9

dl4mir-tutorial

Python
27
star
10

jams-data

Datasets and parsing scripts for JAMS
Python
26
star
11

massage

Multitrack Analysis/SynthesiS for Annotation, auGmentation and Evaluation
Python
21
star
12

minispec

Minimal module for computing audio spectrograms
Python
15
star
13

group_meetings

Notes and ideas for MARL group meetings
Jupyter Notebook
10
star
14

tmc-ace-mirex2013

MATLAB
5
star
15

medley-de-bugger

Python
5
star
16

openl3-hear

OpenL3 for HEAR2021
Python
4
star
17

medleydb_manager

Website for managing the status of multitracks that are being added to the database.
HTML
3
star
18

Timeside-MARL

MARL plugins for Timeside
Python
3
star
19

bandhub

Bandhub dataset curation and analysis
Jupyter Notebook
3
star
20

detpop

a tutorial on determinantal point processes
Jupyter Notebook
2
star
21

html5-audio-query-template

A skeleton project for query-by-humming website
JavaScript
1
star
22

superchip

new and improved autochiptune
Python
1
star