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

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

apt-get install libsox-dev libsndfile1-dev
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.3.tar.gz (362.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.3-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.3-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.3-cp314-cp314-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cysox-0.1.3-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.3-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.3-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cysox-0.1.3-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.3-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.3-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cysox-0.1.3-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.3-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.3-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cysox-0.1.3-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.3-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.3-cp310-cp310-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cysox-0.1.3-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.3-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.3-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.3.tar.gz.

File metadata

  • Download URL: cysox-0.1.3.tar.gz
  • Upload date:
  • Size: 362.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.3.tar.gz
Algorithm Hash digest
SHA256 2d959241bc03b0eb2ea4032c0a2d59809919f2c9f68c054d5d211c8225aa975d
MD5 5aa39b898d784e529ab82583b04fc7d7
BLAKE2b-256 499c74a0107304ed386d77468025d328ee277a3178f78878fa3d2149b0354039

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ac4e5b0753b3380a62587fd10cef101596e074b1efb770705923afb91897236
MD5 601e2c45f044d07d898319f87e7b0ceb
BLAKE2b-256 20f35fab9931f4e40489bf1ac79d329a85d59ae0155e800e55c8eb8132813cd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 95ea5cb90f18990ad659e7116fa7cd9e62daa6cb67b8431e54d5f71cb4e02043
MD5 6ba5ad5cb0ea43d169830df1e74afa24
BLAKE2b-256 c4bd047e423eb81e1525104e60ff04a8f37b5841670253784bfa1dc55d453ae7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b1a0c6288baca717f6d211af931fa7e775f78961da12b2934e72993b82f21ec
MD5 f4a78431136ef184e31905130658454b
BLAKE2b-256 6f46dbef4f9a3c5c4fdaff018f1103d1928f61e1b77488373f326cc4fef0a636

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c473da6ee6ea0b5089732b440609453c28ef1995c4206d62758caa2a5e44e3b
MD5 20c1310d9b905e3245ce636502096b44
BLAKE2b-256 f77d2b108ab83bdf7e34fa5c97dac4c583df94af0d9dfe74d04801ea35b7b5ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2b3288c31946ca02b5203c371cddd76f4c72d3942404ca737e15f47b4555cdbd
MD5 e73a5c3c2e151941aed4542bf2ca651d
BLAKE2b-256 c06f664ad1a1b57910490c15421607805fd87c8e543f866a77452723bc35fed4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3c332b65c422fafc5f6b41b36761ba604e4776dc078c1f8696e233c8341adcd
MD5 57a2d1c140cbefed4410955696b10857
BLAKE2b-256 0ee99f12f272f8cd752f5beff0f881d24095b4b89e8571a90075af3a280d2c8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c02ef7bd6e34d14eaed99336309c0b824a2804c8618e12cd98f7df964016f94
MD5 77662a6f26a9101e7192514b8ca70002
BLAKE2b-256 1204b859d8d46f45b3dad32ed78e3198f765c0511aa509c6712846e26511e23a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9722d70b93ec8f571db798ded4dadb8f82b82d1f4bb2aee3d320cf627a41d78a
MD5 8297c758c4add2d05fa924084e3da6a5
BLAKE2b-256 7b9756438e3466e831a3c89e6e97ef87b5e6c6ef58dba45ae9f8b7de64a22aaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a09ee7dffcf029b738d22a524724fe50b0d3b5cebcca4bfedd886616c3db0e95
MD5 343740ba1a00a7c0c7c4140470e59956
BLAKE2b-256 3e77e3df9a65fd6bbcb2a46de839bca6950663602080d2982e2883bfa3836bf5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0772c3782ec680acac824bba3cc20fb60bc26500597d0ebed4b9fcc241f93aca
MD5 c69a27a76c79557c1f7f414f60bceb89
BLAKE2b-256 439209a5536b05106653420f0fa017b2ea09db7d86b59b9164981eb6f6017f8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb1f1f6a41d5f9d1f2943658755c5a9d7354d77d79ee8de3acdf1bc07093a102
MD5 f7c9265e46ffc56550c8bbd8a38274e9
BLAKE2b-256 75ee1554c39c11bc157a9916587bd2492c028ac7d290a4a9da6a27f26e811f01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02bcc6265fa96975ef02f43d88ae3a4698eb0cace9b8109223b5ac61c9013875
MD5 bc21d2532fad704a7cd6940cdf7615b6
BLAKE2b-256 3e85e54d92c62344bd53370a8bdab64bf74ae712d8b5870b1dd7bf42694ea5a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea4974021ec7b312df8e2ec75c5063fba114c884030f2c9e508382ddaa3fe080
MD5 aacdabe15e3c7ac9ad4509b77af183e7
BLAKE2b-256 0274a934e3e5d9340b27ec7840105ef1f2eb2582ada721f696cf8480b2753fd1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b56d2776a8243adfff18841205c24d08b90b7431e1924a7508598ba7e2336c06
MD5 20f212c6b655031fcfe4a279c1388e15
BLAKE2b-256 bb3bd82e6ca58a068c004a0dcfac0870d1628b8b903c98f0a912b0fb2d9b9792

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15a552bbceb8e0357a81542f2377c3537e43e1bbd51ceb6e56d809726a24ba52
MD5 c7707a367308fe1630df6b763289d4d5
BLAKE2b-256 c594bbd14b8a4be068b29c51695738db9dfebd4584ac548f38b41fbcc9b21c62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1d7baf6c046a110fb157bdafdf14195c9883ed270f59a8b60009de46384e0ae
MD5 d16e5c66e6fccf0b83c395ee93bc9eb2
BLAKE2b-256 2990705a571647ba00b2b043473e19f7994576e6468a3b7759372d667e35e353

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bec168f43faa3d3a20ebb69bde3988459724985839e555b954fdc46355d93592
MD5 fb410826e700952ed0deb3c9735ee002
BLAKE2b-256 027b3836458ac6867ce7f27feb11fbb56350951633b63f734adb85fd0d7666a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.1.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7fd83635a693f7795661d918186f3e89d366f3676564d758444b6803fddd585c
MD5 b593cea570b018c23994052ce4328ccf
BLAKE2b-256 6272dc56eed0fd385cb115c6e4e504826140f00fe37b7c48782fca2b20b83600

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