Skip to main content

A Pythonic audio processing library wrapping libsox

Project description

cysox

PyPI Python License: MIT

A Pythonic audio processing library which uses cython to wrap libsox.

Features

  • Simple API: Convert, analyze, and play audio with one-liners
  • Typed Effects: 28 effect classes with IDE autocomplete and validation
  • High Performance: Direct C bindings through Cython
  • Zero Configuration: Auto-initialization, no manual setup required
  • Cross-Platform: macOS, Linux (Windows placeholder)

Installation

Note that cysox only works on macOS and Linux.

pip install cysox

Command Line Interface

# Show version
cysox --version

# Get audio file info
cysox info audio.wav

# Convert audio files
cysox convert input.wav output.mp3
cysox convert input.wav output.wav --rate 48000 --channels 1

# Play audio
cysox play audio.wav

# Concatenate files
cysox concat intro.wav main.wav outro.wav -o full.wav

Quick Start

import cysox
from cysox import fx

# Get audio file info
info = cysox.info('audio.wav')
print(f"Duration: {info['duration']:.2f}s, Sample rate: {info['sample_rate']} Hz")

# Convert with effects
cysox.convert('input.wav', 'output.mp3', effects=[
    fx.Normalize(),
    fx.Reverb(reverberance=60),
    fx.Fade(fade_in=0.5, fade_out=1.0),
])

# Play audio (macOS/Linux)
cysox.play('audio.wav')

# Play with effects
cysox.play('audio.wav', effects=[fx.Volume(db=-6)])

Core Functions

cysox.info(path) -> dict

Get audio file metadata:

info = cysox.info('audio.wav')
# Returns: {
#     'path': 'audio.wav',
#     'format': 'wav',
#     'duration': 11.5,
#     'sample_rate': 44100,
#     'channels': 2,
#     'bits_per_sample': 16,
#     'samples': 507150,
#     'encoding': 'signed-integer',
# }

cysox.convert(input, output, effects=[], **options)

Convert audio files with optional effects and format options:

# Simple format conversion
cysox.convert('input.wav', 'output.mp3')

# With effects
cysox.convert('input.wav', 'output.wav', effects=[
    fx.Volume(db=3),
    fx.Bass(gain=5),
    fx.Reverb(),
])

# With format options
cysox.convert('input.wav', 'output.wav',
    sample_rate=48000,
    channels=1,
    bits=24,
)

cysox.stream(path, chunk_size=8192) -> Iterator[memoryview]

Stream audio samples for processing:

import numpy as np

for chunk in cysox.stream('large.wav', chunk_size=8192):
    arr = np.frombuffer(chunk, dtype=np.int32)
    process(arr)

cysox.play(path, effects=[])

Play audio to the default audio device:

cysox.play('audio.wav')
cysox.play('audio.wav', effects=[fx.Volume(db=-6), fx.Reverb()])

cysox.concat(inputs, output)

Concatenate multiple audio files:

cysox.concat(['intro.wav', 'main.wav', 'outro.wav'], 'full.wav')

All input files must have the same sample rate and channel count.

Effects Module

The cysox.fx module provides 28 typed effect classes:

Volume & Dynamics

fx.Volume(db=3)                    # Adjust volume in dB
fx.Gain(db=6)                      # Apply gain
fx.Normalize(level=-3)             # Normalize to target level

Equalization

fx.Bass(gain=5, frequency=100)     # Boost/cut bass
fx.Treble(gain=-2, frequency=3000) # Boost/cut treble
fx.Equalizer(frequency=1000, width=1.0, gain=3)

Filters

fx.HighPass(frequency=200)         # Remove low frequencies
fx.LowPass(frequency=8000)         # Remove high frequencies
fx.BandPass(frequency=1000, width=100)
fx.BandReject(frequency=60, width=10)  # Notch filter

Spatial & Reverb

fx.Reverb(reverberance=50, room_scale=100)
fx.Echo(gain_in=0.8, gain_out=0.9, delays=[100], decays=[0.5])
fx.Chorus()
fx.Flanger()

Time-Based

fx.Trim(start=1.0, end=5.0)        # Extract portion
fx.Pad(before=0.5, after=1.0)      # Add silence
fx.Speed(factor=1.5)               # Change speed (affects pitch)
fx.Tempo(factor=1.5)               # Change tempo (preserves pitch)
fx.Pitch(cents=100)                # Shift pitch (preserves tempo)
fx.Reverse()                       # Reverse audio
fx.Fade(fade_in=0.5, fade_out=1.0) # Fade in/out
fx.Repeat(count=3)                 # Repeat audio

Conversion

fx.Rate(sample_rate=48000)         # Resample
fx.Channels(channels=1)            # Change channel count
fx.Remix(out_spec=[[1, 2]])        # Custom channel mixing
fx.Dither()                        # Add dither

Composite Effects

Create reusable effect combinations:

from cysox.fx import CompositeEffect, HighPass, LowPass, Reverb, Volume

class TelephoneEffect(CompositeEffect):
    """Simulate telephone audio quality."""

    @property
    def effects(self):
        return [
            HighPass(frequency=300),
            LowPass(frequency=3400),
            Volume(db=-3),
        ]

# Use like any other effect
cysox.convert('input.wav', 'output.wav', effects=[TelephoneEffect()])

Low-Level API

For advanced use cases, access the full libsox bindings:

from cysox import sox

# Manual initialization (high-level API handles this automatically)
sox.init()

# Open files
input_fmt = sox.Format('input.wav')
output_fmt = sox.Format('output.wav', signal=input_fmt.signal, mode='w')

# Build effects chain
chain = sox.EffectsChain(input_fmt.encoding, output_fmt.encoding)

e = sox.Effect(sox.find_effect("input"))
e.set_options([input_fmt])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)

e = sox.Effect(sox.find_effect("vol"))
e.set_options(["3dB"])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)

e = sox.Effect(sox.find_effect("output"))
e.set_options([output_fmt])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)

# Process
chain.flow_effects()

# Cleanup
input_fmt.close()
output_fmt.close()
sox.quit()

Building from Source

macOS

brew install sox libsndfile mad libpng flac lame mpg123 libogg opus opusfile libvorbis
make
make test

Linux

sudo apt-get install libsox-dev libsndfile1-dev pkg-config
make
make test

Status

Comprehensive test suite covering all functionality. All libsox C examples ported to Python (effects chains, waveform analysis, trim, concatenation, format conversion).

Known Issues

  • Memory I/O: libsox memory I/O functions have platform issues (tests skipped)
  • Init/Quit Cycles: Use high-level API to avoid init/quit issues (handled automatically)

See KNOWN_LIMITATIONS.md for details.

Platform Support

  • macOS: Full support
  • Linux: Full support
  • Windows: Placeholder (contributions welcome)

Building Documentation

pip install sphinx furo myst-parser
make docs
make docs-serve  # http://localhost:8000

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cysox-0.1.5.tar.gz (344.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cysox-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp314-cp314-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cysox-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cysox-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cysox-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cysox-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cysox-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cysox-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

cysox-0.1.5-cp39-cp39-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file cysox-0.1.5.tar.gz.

File metadata

  • Download URL: cysox-0.1.5.tar.gz
  • Upload date:
  • Size: 344.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for cysox-0.1.5.tar.gz
Algorithm Hash digest
SHA256 3cc28f73174470a7e92d0422cc67e90129a1fbca47b1e2897107c291ab6fc198
MD5 1474f4ac2917a161a02a03cf653d9841
BLAKE2b-256 74a6f9c4265f81c4b16804783f5c0decb619e4b891a7e353c599557a30170823

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b1005d25a191788f4c0dc1e6a71d3b292b0c1128e91d5c355a2aa4c0159ebc90
MD5 dad4b21791ab41c14506abc72c754dfd
BLAKE2b-256 fe0f93a62359216d6956df4e44c0036904b0a6777ca181d5e2cdd08cdb97ea1e

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e73e39fff2d498453137f883c024fde89f88659f49c6fac094b64bc4be7c4b24
MD5 f2db0539598bf99c75d2f7f80207806b
BLAKE2b-256 975b27a73ae1e0fff5164e3de3226a83d7150f52a6bc14247829961eb4b1e1b4

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74741560158e4971503c21a5ce3ed4e01557b78ab4b9704357ae32af16b355dc
MD5 f892d56c68628ca1747befdf2f718ce6
BLAKE2b-256 c5d09fb06cfc5bf89b30358411c7f7de65a0681c46353965d88a31dbc65bc875

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e63ef0d9ca2eafdabc7e35daf2a9b446552b91c5bdf911fdc338dc11aaaaf00
MD5 de0dc00d523a6aeece08bb44c22d423a
BLAKE2b-256 999d1972e3670d27f3554b1664093652cf0e7f82f016d944b0e86238e12ec056

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b9ee7c4821d843754de6b9369094da1f54f03052cb1b82e7592c09681c8024dc
MD5 734625f9315e9c82b57fa2211ff3f1a1
BLAKE2b-256 badf197a64fb97d7ebb4622000f6015a03d84d97c6a015150ec61e861b072dca

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01f03c6d093b1636b9178d68642399e9b70b881a97421ac72eee221a3dfaedbb
MD5 c936e7cc0e035b73a9e03b30819a272a
BLAKE2b-256 a3d6d1426ea7a0d91bb4257dfb65717c009e1ee5b8d38809d1222c0d08104d20

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c8058523223c657c2cd466c86fbd6160cd41ac507e2b1235be81565d96bd1d35
MD5 236f035f5340d2b8a4a6529ec79b9eab
BLAKE2b-256 12545fca117ed0eda2288dbc83a95d1580fd090a0979c2b1621c04cfc4a5c335

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f99dbb947ec6f7b33c5ebb33559cbba279ca677f0bac778dfd003206bfe64599
MD5 c4f831141f6c518b8f350ea6d867f01e
BLAKE2b-256 f7bccb3aeff7c729531e62c8fcfee17361fcd9981cb1f2b873fd5ed5462df33a

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 027ea2d7bc24235f18c13955099fc71d7982c345e1abe72dc46fca22a3697edc
MD5 0d5160a9617e5d92f162b38cbed8f3a0
BLAKE2b-256 7b3fd73c5d236dadb20f0321ca3e840cc10a6587d15b08193625d70235e70543

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 87a7d9aecede7a2eb35fcff72fc48bb85091a52a549105156f984e5b729657f6
MD5 2d27f091bafc431295d7076c685d8caf
BLAKE2b-256 797e763ce997fa89effa072d8864f73fb9aa29e3761d4650e254ef5ea5f79540

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5bc3d4f7416c6c74c3b5bce4adffdeb8cbf5b5a2d95cecd1dd9d6d12e857712a
MD5 dfcf609c448dd06f49560afee98ff9a3
BLAKE2b-256 f3420fb5ee7bf3878a3417b6f2c9b555b1a6b55560198256eb86e74bc540b3fc

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 485fa9ae265bc809e8aefc92ec66e8c9a8ccc00a19bfb399e88eba486a9542b6
MD5 6df995f242f3b1b398cde549da3a86de
BLAKE2b-256 b2006d201f1bfc57a8a0440f9525dd9eb536d4fb86be2f8d1a2eb34391ec3d82

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc3a709e59d9db8233ebf041f5f80ec5546b2c757e540fc4b160bec7ebbb2c09
MD5 0ae80dd57be6774ac72f6478eacf6a8e
BLAKE2b-256 c11b30c8cd6e6ff352784d50542da43d86551e94371648ca64e48a6a55b9cfcb

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 285311c658cf0a73e47f70d7a592f99a20d569f06220aae83f47f4dac6c5d87b
MD5 73ec4c83542562e0b67a72c3e515c4d8
BLAKE2b-256 b71d67ec5cc2a2c182bca926f21bf6f08e036ea5496795b65d9ee79313be03d8

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 549ddf5ddc4388036eb30226e2654c73c559a5a0de9a1aede85fb9c2dbe521b1
MD5 251aa614c0daffcc27a7a3c99e6158d5
BLAKE2b-256 7476ac9fee54ec448d37f0e5fe2dcdc8e2ee4e532e8ae89981540f56aed09bd9

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 662923e7ecc82b02490b49b5508acfddf457f6551d2ddf6fc910799cffaedbef
MD5 0ec3230b4ae99a18dc7aa1fc04d12340
BLAKE2b-256 81cec4a6752ab2c22141cdaaa470eaed4ec4ca1481d6634300a081654890c39b

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0a95e9a4f67e9ddd60fe9912dca726fb5a4f918a98b9d6bf89e31b8f249ebd6f
MD5 04987bfebb0ac16f0fbdf7dd40b37682
BLAKE2b-256 bc61a26fbde34df8b15c2a18a98c33861711081747388065f576ce10b8879935

See more details on using hashes here.

File details

Details for the file cysox-0.1.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cysox-0.1.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03ea15de2d5dc1ea66e474ca04c10456cfa019b2da4c6ae83cebe7b6e53b4185
MD5 544dc2ed532a33d707fd027bddef2f0b
BLAKE2b-256 3f81cf98a36236816af555d6dad2752f6d9d6890b736dee13145b4584db6b99d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page