You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
importsox# create transformertfm=sox.Transformer()
# trim the audio between 5 and 10.5 seconds.tfm.trim(5, 10.5)
# apply compressiontfm.compand()
# apply a fade in and fade outtfm.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 APItfm.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 filearray_out=tfm.build_array(input_filepath='path/to/input_audio.wav')
# see the applied effectstfm.effects_log> ['trim', 'compand', 'fade']
Transform in-memory arrays:
importnumpyasnpimportsox# sample rate in Hzsample_rate=44100# generate a 1-second sine tone at 440 Hzy=np.sin(2*np.pi*440.0*np.arange(sample_rate*1.0) /sample_rate)
# create a transformertfm=sox.Transformer()
# shift the pitch up by 2 semitonestfm.pitch(2)
# transform an in-memory array and return an arrayy_out=tfm.build_array(input_array=y, sample_rate_in=sample_rate)
# instead, save output to a filetfm.build_file(
input_array=y, sample_rate_in=sample_rate,
output_filepath='path/to/output.wav'
)
# create an output file with a different sample ratetfm.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:
importsox# create combinercbn=sox.Combiner()
# pitch shift combined audio up 3 semitonescbn.pitch(3.0)
# convert output to 8000 Hz stereocbn.convert(samplerate=8000, n_channels=2)
# create the output filecbn.build(
['input1.wav', 'input2.wav', 'input3.wav'], 'output.wav', 'concatenate'
)
# the combiner does not currently support array input/output
Get file information:
importsox# get the sample ratesample_rate=sox.file_info.sample_rate('path/to/file.mp3')
# get the number of samplesn_samples=sox.file_info.num_samples('path/to/file.wav')
# determine if a file is silentis_silent=sox.file_info.silent('path/to/file.aiff')
# file info doesn't currently support array input