Skip to main content

cysox

PyPI Python License: MIT Docs

A Python audio processing tool / library which uses Cython to wrap libsox.

Documentation | API Reference | Examples

Features

  • Simple API: Convert, analyze, and play audio with one-liners

  • Typed Effects: 27 base effect classes with IDE autocomplete and validation

  • 53 Effect Presets: Ready-to-use composite effects for voice, lo-fi, drums, mastering, and more

  • Sample Processing: Auto-trim silence, split recordings into one-shots, generate chromatic pitch scales, batch process directories

  • Drum Loop Tools: Slice loops by BPM, create stutter effects, apply beat-synced processing

  • High Performance: Direct C bindings through Cython, KissFFT-accelerated onset detection

  • 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
cysox convert input.wav output.wav -p Telephone

# Play audio
cysox play audio.wav

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

# List available effect presets
cysox preset list
cysox preset list drums          # Filter by category

# Get preset info and parameters
cysox preset info Chipmunk

# Apply a preset to audio
cysox preset apply Telephone input.wav output.wav
cysox preset apply Chipmunk input.wav output.wav --intensity=2.0

# Slice audio into segments
cysox slice drums.wav output_dir/ -n 8
cysox slice drums.wav output_dir/ --bpm 120 --beats 1
cysox slice drums.wav output_dir/ -n 4 -p DrumPunch

# Slice at detected transients (automatic beat detection)
# -t threshold (e.g. 0.3), -s sensitivity (default 1.5), -m method (default hfc)
cysox slice drums.wav output_dir/ -t 0.3
cysox slice drums.wav output_dir/ -t 0.2 -s 1.2 -m flux

# Create stutter effects
cysox stutter drums.wav stutter.wav -d 0.125 -r 8
cysox stutter drums.wav stutter.wav -s 0.5 -d 0.25 -r 4 -p GatedReverb

# Trim silence from beginning and end of audio
cysox auto-trim raw.wav trimmed.wav
cysox auto-trim raw.wav trimmed.wav --thresh -36 --fadein 10 --fadeout 50
cysox auto-trim raw.wav trimmed.wav --speedup 2

# Split continuous recording into one-shots at silence gaps
cysox split recording.wav one_shots/
cysox split recording.wav one_shots/ --thresh -36 --min-silence 0.5

# Generate pitch-shifted copies (chromatic scale)
cysox pitch-scale sample.wav scale/                    # 12 semitones (1 octave)
cysox pitch-scale sample.wav scale/ --range 24 --offset -12

# Batch process all audio files in a directory
cysox batch raw_samples/ processed/ -p Normalize
cysox batch raw_samples/ processed/ --rate 44100 --channels 1 --format wav
cysox batch raw_samples/ processed/ --no-recursive -p DrumPunch

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) -> AudioInfo

Get audio file metadata. Returns an AudioInfo object supporting both attribute access and dict-style access:

info = cysox.info('audio.wav')
print(info.duration)         # Attribute access
print(info['sample_rate'])   # Dict-style access (backwards compatible)
# Fields: path, format, duration, sample_rate, channels,
#         bits_per_sample, samples, encoding

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 27 base effect classes and 53 composite presets:

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
fx.Silence(threshold=-48)          # Remove silence by amplitude

Conversion

fx.Rate(sample_rate=48000)         # Resample
fx.Channels(channels=1)            # Change channel count
fx.Remix(mix=["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()])

Effect Presets

The library includes 54 ready-to-use composite effect presets organized by category:

Voice Effects

fx.Chipmunk(intensity=1.8)         # High-pitched voice
fx.DeepVoice(intensity=0.6)        # Low, slowed voice
fx.Robot(intensity=70)             # Metallic robotic voice
fx.HauntedVoice(pitch_shift=5)     # Spooky ghost effect
fx.VocalClarity(presence_boost=4)  # Enhanced vocal presence
fx.Whisper()                       # Intimate whisper effect

Lo-Fi Effects

fx.Telephone(sample_rate=8000)     # Classic telephone sound
fx.AMRadio()                       # AM radio broadcast
fx.Megaphone(volume_boost=6)       # Bullhorn effect
fx.Underwater(depth=500)           # Submerged/muffled sound
fx.VinylWarmth(bass_boost=3)       # Warm vinyl aesthetic
fx.LoFiHipHop(warmth=4)            # Lo-fi hip hop style
fx.Cassette()                      # Cassette tape degradation

Spatial Effects

fx.SmallRoom(wetness=30)           # Intimate room reverb
fx.LargeHall(size=100, decay=70)   # Concert hall ambience
fx.Cathedral()                     # Church reverb
fx.Bathroom()                      # Tiled room reverb
fx.Stadium()                       # Arena with echo

Broadcast Effects

fx.Podcast()                       # Voice cleanup + presence
fx.RadioDJ(presence=4)             # Punchy broadcast voice
fx.Voiceover()                     # Professional VO processing
fx.Intercom()                      # PA system effect
fx.WalkieTalkie()                  # Two-way radio

Musical Effects

fx.EightiesChorus(depth=4)         # Classic 80s chorus
fx.DreamyPad()                     # Ethereal ambient texture
fx.SlowedReverb(slow_factor=0.85)  # Slowed + reverb aesthetic
fx.SlapbackEcho(delay_ms=120)      # Rockabilly short delay
fx.DubDelay(tempo_ms=375)          # Rhythmic dub delays
fx.JetFlanger()                    # Extreme flanger sweep
fx.ShoegazeWash()                  # Heavy reverb/chorus wash

Drum Loop Effects

fx.HalfTime(preserve_pitch=True)   # Slow to half speed
fx.DoubleTime(preserve_pitch=True) # Speed up to double
fx.DrumPunch(punch=4, attack=3)    # Enhance punch and attack
fx.DrumCrisp(brightness=4)         # Crisp, bright drums
fx.DrumFat(fatness=5)              # Thick, heavy drums
fx.Breakbeat()                     # Classic breakbeat processing
fx.VintageBreak()                  # Lo-fi sampled break sound
fx.DrumRoom(room_size=40)          # Natural room ambience
fx.GatedReverb()                   # 80s gated reverb
fx.DrumSlice(start=0, duration=0.5)# Extract a segment
fx.ReverseCymbal(fade_duration=0.5)# Reverse riser effect
fx.LoopReady()                     # Prepare for seamless looping

Mastering Effects

fx.BroadcastLimiter(target_level=-1)  # Broadcast-ready limiting
fx.WarmMaster(warmth=1.5)             # Warm mastering preset
fx.BrightMaster(air=2)                # Bright/airy mastering
fx.LoudnessMaster(target_level=-0.3)  # Maximum loudness

Cleanup Effects

fx.RemoveRumble(cutoff=60)         # High-pass for rumble
fx.RemoveHiss(cutoff=12000)        # Low-pass for tape hiss
fx.RemoveHum(frequency=60)         # Notch filter for hum (50/60Hz)
fx.CleanVoice()                    # Basic voice cleanup
fx.TapeRestoration()               # Restore tape recordings

Transition Effects

fx.FadeInOut(fade_in_secs=0.3, fade_out_secs=0.3)
fx.CrossfadeReady(fade_duration=0.3)

Chaining Presets

Presets can be combined with each other and base effects:

cysox.convert('input.wav', 'output.wav', effects=[
    fx.RemoveRumble(),      # Cleanup first
    fx.VinylWarmth(),       # Apply lo-fi aesthetic
    fx.SmallRoom(),         # Add room ambience
    fx.WarmMaster(),        # Final mastering
])

Drum Loop Slicing

cysox provides utilities for slicing drum loops and creating stutter effects.

cysox.slice_loop() - Split Loops into Segments

Split an audio file into multiple segment files:

import cysox
from cysox import fx

# Slice into equal parts
slices = cysox.slice_loop('drums.wav', 'output_dir/', slices=8)
# Creates: output_dir/drums_slice_000.wav through drums_slice_007.wav

# Slice by BPM (one beat per slice)
slices = cysox.slice_loop('drums.wav', 'output_dir/', bpm=120, beats_per_slice=1)

# Slice with effects applied to each segment
slices = cysox.slice_loop('drums.wav', 'output_dir/',
    slices=8,
    effects=[fx.DrumPunch()]
)

Parameters:

  • path: Input audio file

  • output_dir: Directory for slice files (created if needed)

  • slices: Number of equal slices (default: 4)

  • bpm: Calculate slice duration from BPM (overrides slices)

  • beats_per_slice: Beats per slice when using BPM (default: 1)

  • beat_duration: Explicit duration per slice in seconds

  • threshold: Onset detection threshold 0.0-1.0 (enables automatic transient slicing)

  • sensitivity: Onset detection sensitivity 1.0-3.0 (default: 1.5)

  • onset_method: Detection method - 'hfc', 'flux', 'energy', 'complex', or 'superflux'

  • output_format: Output format (default: "wav")

  • effects: Effects to apply to each slice

Returns: List of created file paths

Automatic Transient Slicing

Slice loops automatically at detected transients (drum hits, etc.):

# Slice at detected onsets with default sensitivity
slices = cysox.slice_loop('drums.wav', 'output_dir/', threshold=0.3)

# More sensitive detection (catches subtle hits)
slices = cysox.slice_loop('drums.wav', 'output_dir/',
    threshold=0.2,
    sensitivity=1.2
)

# Use different detection method
slices = cysox.slice_loop('drums.wav', 'output_dir/',
    threshold=0.3,
    onset_method='flux'  # Good for tonal changes
)

cysox.onset - Direct Onset Detection

For more control, use the onset detection module directly:

from cysox import onset

# Detect onsets in a file
onsets = onset.detect('drums.wav', threshold=0.3)
print(f"Found {len(onsets)} transients")
for t in onsets:
    print(f"  {t:.3f}s")

# With custom parameters
onsets = onset.detect('drums.wav',
    threshold=0.3,      # Detection threshold (0.0-1.0)
    sensitivity=1.5,    # Peak picking sensitivity (1.0-3.0)
    min_spacing=0.05,   # Min time between onsets (seconds)
    method='hfc'        # 'hfc', 'flux', 'energy', 'complex', or 'superflux'
)

Detection Methods:

  • hfc (default) - High-Frequency Content

    • Weights frequency bins by their index, emphasizing high frequencies

    • High frequencies are prominent in transient attacks (the "click" of a drum hit)

    • Best for: drums, percussion, plucked instruments

    • Fast and reliable for most percussive material

  • flux - Spectral Flux

    • Measures the change in spectral energy between consecutive frames

    • Detects when the frequency content changes significantly

    • Best for: mixed material, melodic instruments, detecting note changes

    • Good all-around choice when HFC misses softer onsets

  • energy - Energy-based

    • Simply measures the RMS energy (loudness) of each frame

    • Fastest method, minimal computation

    • Best for: very clean recordings, isolated drums, quick processing

    • May miss onsets that are spectrally distinct but similar in volume

  • complex - Complex Domain

    • Analyzes both magnitude AND phase of the spectrum

    • Detects deviations from expected phase trajectories

    • Best for: maximum accuracy, subtle onsets, research applications

    • Slowest method but catches onsets other methods miss

  • superflux - Superflux (Boeck & Widmer, DAFx 2013)

    • Mel-scaled spectral flux with vibrato suppression

    • Maximum filter along frequency axis to reject false onsets from frequency modulation

    • Backtracking from peaks to nearest local minimum for precise transient placement

    • Best for: polyphonic material, vibrato-heavy sources, maximum precision

Understanding threshold vs sensitivity:

threshold (0.0-1.0) and sensitivity (1.0-3.0) control different stages:

  • threshold - Global minimum floor

    • Sets the absolute minimum level a peak must reach

    • Applied to the normalized detection function (0-1 scale)

    • Lower values = more sensitive, catches quieter transients

    • threshold=0.3 means peaks must reach at least 30% of max energy

    • Think of it as: "ignore everything below this level"

  • sensitivity - Adaptive peak picking strictness

    • Controls how much a peak must exceed the local average

    • Uses a moving median filter to compute the local baseline

    • Higher values = stricter, only picks prominent peaks

    • sensitivity=1.5 means a peak must be 1.5x the local median

    • Think of it as: "how much must a peak stand out from neighbors"

Typical combinations:

  • Drums with clear hits: threshold=0.3, sensitivity=1.5 (defaults)

  • Subtle transients: threshold=0.2, sensitivity=1.2

  • Only loud hits: threshold=0.5, sensitivity=2.0

cysox.stutter() - Create Stutter Effects

Extract a segment and repeat it:

# Basic stutter: 8x repeat of first 1/8 note at 120 BPM
cysox.stutter('drums.wav', 'stutter.wav',
    segment_duration=0.125,  # 1/8 note at 120 BPM
    repeats=8
)

# Stutter from a specific position (e.g., the snare hit)
cysox.stutter('drums.wav', 'snare_stutter.wav',
    segment_start=0.5,       # Start at 0.5 seconds
    segment_duration=0.125,
    repeats=4
)

# Stutter with effects
cysox.stutter('drums.wav', 'stutter_punchy.wav',
    segment_duration=0.25,
    repeats=4,
    effects=[fx.DrumPunch(), fx.DrumRoom()]
)

Parameters:

  • path: Input audio file

  • output_path: Output file path

  • segment_start: Start position in seconds (default: 0)

  • segment_duration: Length of segment in seconds (default: 0.125)

  • repeats: Total times segment plays (default: 8)

  • effects: Effects to apply after stuttering

Practical Examples

Chop an Amen Break

import cysox
from cysox import fx

# Get loop info
info = cysox.info('amen.wav')
print(f"Duration: {info['duration']:.3f}s")

# Assuming 2-bar loop at 175 BPM
bpm = 175

# Slice into individual beats
slices = cysox.slice_loop('amen.wav', 'amen_beats/', bpm=bpm)
print(f"Created {len(slices)} beat slices")

# Slice into 16th notes with breakbeat processing
slices = cysox.slice_loop('amen.wav', 'amen_16ths/',
    slices=16,
    effects=[fx.Breakbeat()]
)

# Create kick stutter fill
cysox.stutter('amen.wav', 'kick_fill.wav',
    segment_start=0,
    segment_duration=info['duration'] / 16,  # First 16th note
    repeats=16
)

Process Drum Loops

# Half-time for slow, heavy feel
cysox.convert('drums.wav', 'halftime.wav', effects=[fx.HalfTime()])

# Lo-fi vintage break sound
cysox.convert('drums.wav', 'vintage.wav', effects=[
    fx.VintageBreak(),
    fx.DrumRoom(wetness=20)
])

# 80s gated reverb snare
cysox.convert('drums.wav', 'gated.wav', effects=[fx.GatedReverb()])

# Full processing chain
cysox.convert('drums.wav', 'processed.wav', effects=[
    fx.RemoveRumble(cutoff=40),
    fx.DrumPunch(punch=5, attack=4),
    fx.DrumRoom(room_size=30, wetness=20),
    fx.BroadcastLimiter(),
])

Sample Processing

cysox includes sample processing utilities ported from AudioHit for preparing audio samples for software and hardware samplers.

cysox.auto_trim() - Trim Silence

Detect and remove silence from the beginning and end of audio based on amplitude threshold:

# Basic silence trimming
cysox.auto_trim('raw.wav', 'trimmed.wav')

# Custom threshold (less sensitive)
cysox.auto_trim('raw.wav', 'trimmed.wav', threshold_db=-36)

# With fade in/out (milliseconds)
cysox.auto_trim('raw.wav', 'trimmed.wav', fade_in=10, fade_out=50)

# Speed up after trimming
cysox.auto_trim('raw.wav', 'trimmed.wav', speed_factor=2.0)

# With additional effects
cysox.auto_trim('raw.wav', 'trimmed.wav', effects=[fx.Normalize()])

Parameters:

  • path: Input audio file

  • output_path: Output audio file

  • threshold_db: Amplitude threshold in dB (default: -48dB)

  • min_silence: Minimum non-silence duration in seconds (default: 0.1)

  • fade_in: Fade-in duration in milliseconds (default: 0)

  • fade_out: Fade-out duration in milliseconds (default: 0)

  • speed_factor: Playback speed multiplier (default: None)

  • effects: Additional effects to apply after trimming

cysox.split_by_silence() - Split at Silence Gaps

Split a continuous recording into separate one-shot samples at silence boundaries:

# Split at default threshold
segments = cysox.split_by_silence('recording.wav', 'one_shots/')

# Custom detection parameters
segments = cysox.split_by_silence('recording.wav', 'one_shots/',
    threshold_db=-36,     # Less sensitive
    min_silence=0.5,      # Require 500ms of silence to split
    min_segment=0.25,     # Discard segments shorter than 250ms
)

# With fades and effects on each segment
segments = cysox.split_by_silence('recording.wav', 'one_shots/',
    fade_in=5, fade_out=20,
    effects=[fx.Normalize()],
)

Parameters:

  • path: Input audio file

  • output_dir: Directory for segment files (created if needed)

  • threshold_db: Amplitude threshold in dB (default: -48dB)

  • min_silence: Minimum silence duration to trigger split, in seconds (default: 0.25)

  • min_segment: Minimum segment duration, in seconds (default: 0.25)

  • fade_in: Fade-in per segment in milliseconds (default: 0)

  • fade_out: Fade-out per segment in milliseconds (default: 0)

  • speed_factor: Playback speed multiplier (default: None)

  • output_format: Output format (default: "wav")

  • effects: Effects to apply to each segment

Returns: List of created file paths

cysox.pitch_scale() - Generate Chromatic Pitch Variants

Create multiple pitch-shifted copies of a sample at semitone intervals, useful for building playable melodic sample libraries:

# Generate one octave (12 semitones) of chromatic variations
files = cysox.pitch_scale('c3_piano.wav', 'scale/')
# Creates: scale/c3_piano_pitch_+0.wav through scale/c3_piano_pitch_+11.wav

# Two octaves starting from one octave below
files = cysox.pitch_scale('sample.wav', 'scale/',
    semitones=24, offset=-12)

# With effects on each copy
files = cysox.pitch_scale('sample.wav', 'scale/',
    semitones=12, effects=[fx.Normalize()])

Parameters:

  • path: Input audio file

  • output_dir: Directory for pitch-shifted files (created if needed)

  • semitones: Number of copies to generate (default: 12)

  • offset: Starting semitone offset (default: 0)

  • output_format: Output format (default: "wav")

  • effects: Effects to apply to each copy after pitch shifting

Returns: List of created file paths

cysox.batch() - Batch Process Directories

Process all audio files in a directory tree:

# Convert a folder to mono 22050Hz
processed = cysox.batch('samples/', 'processed/',
    sample_rate=22050, channels=1)

# Apply effects to all files
processed = cysox.batch('raw/', 'ready/',
    effects=[fx.Normalize(), fx.Fade(fade_in=0.01)])

# Convert format, non-recursive
processed = cysox.batch('input/', 'output/',
    output_format='flac', recursive=False)

# With progress callback
cysox.batch('raw/', 'done/',
    on_file=lambda i, o: print(f"  {i} -> {o}"))

Parameters:

  • input_dir: Directory containing audio files

  • output_dir: Directory for processed files (created if needed)

  • effects: Effects to apply to each file

  • sample_rate: Target sample rate in Hz

  • channels: Target number of channels

  • bits: Target bits per sample

  • recursive: Process subdirectories (default: True)

  • output_format: Output format (None keeps original)

  • on_file: Callback called after each file (input_path, output_path)

Returns: List of processed output file paths

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 mkdocs-material
make docs          # Build static site
make docs-serve    # Live preview at http://localhost:8000

License

MIT

KissFFT (vendored in vendor/kissfft/) is BSD-3-Clause licensed. See vendor/kissfft/COPYING.

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

cysox-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (875.6 kB view details)

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

cysox-0.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (849.9 kB view details)

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

cysox-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (873.3 kB view details)

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

cysox-0.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (846.4 kB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

cysox-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (874.5 kB view details)

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

cysox-0.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (847.5 kB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

cysox-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (888.1 kB view details)

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

cysox-0.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (862.6 kB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

cysox-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (887.6 kB view details)

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

cysox-0.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (862.8 kB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

cysox-0.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (888.2 kB view details)

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

cysox-0.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (863.1 kB view details)

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

cysox-0.2.0-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.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cysox-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30e29d0d03407a9ad343002d76744bbebf5b3d103c2d5dbb3af3a9a1c362258c
MD5 b1c5b516e1bf65f2f15dd81d25cd0a1a
BLAKE2b-256 502a1dcb5f0056c2c655c538fc437840e418cf0258f5447bd9a0ac0670b12e38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8e943d2534467d305241cef6d45dcf5fd4b08cf9e63a8bac431ce6e826bb8f9b
MD5 fc3767c661e30ed7aa1a71e97d021e91
BLAKE2b-256 13032a56d5e56d28d0ad07e8be4b783a64b635139be0c2f4179625901405a1ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7e6b794a1810385271f9a53b8e5ce4404e568e7723f2f2051a0b6efd38129bd
MD5 e0e76561513c5c6d7762f3596c499cb8
BLAKE2b-256 3a6548c8edf2df621bf5f2e713336386e96c80f0f4643fa157af114c55ce0dfa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6e65a4c1f5eca50453c58764baff2faafea5b0e917ebd65f0ab41ab5013156b
MD5 941bb2a1f4f17bb24a8136a880a756df
BLAKE2b-256 dc64c8809f69de46c40f4daea1ccbd54a8e73a5dc7a2edd67e7ba1d2094fb7d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 49449adc549b0249055f94d571c8cf2a9fff41fffd724b546779372781227d41
MD5 a7203e6fb7c2ddc9d00cfd86ffcd9033
BLAKE2b-256 5a057d1f5a06c6d9f193fbdd09788d3bd7ed23b083ce1b65f978bee6051db2a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 afdf93250b558ee7cba3a0a7954afc0041674318357f8825b0e5135836f18958
MD5 d6bdb23024d62b5fe44d9e6e8798e24b
BLAKE2b-256 f2947ab7041781c2ed7538526d44d549228733692c81e153eb94a3a5ff983bc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 03473936c3717764fdcc13c4138aa2c1f3963466342721b06d95ab3706bc6299
MD5 7b50ae17fe36181854662b1209cb6c43
BLAKE2b-256 b4681479c2a7b4b9374254781a3c4c22fb0ea14944f1247b5d10497cfd3e7a3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d6269866c4051776a70e2afb6dd08941f25bac9ee8590404cd01905f1b088c6f
MD5 9b7e6df7debcfc5748e0e693f1f9a3df
BLAKE2b-256 c203dabe87fe09922b76a37dd7465c22ba7cb4b4446bd26959433d77a079bf42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fa52eec4b4d33c1964677e16404541a287f00d0bf2b2faecfd603e402bce0703
MD5 331846c6296021f40608ab95a5bf780b
BLAKE2b-256 13a3dc359dad21f19f9729ba484781e3ba9aafa5c9e09996ed3a62dda8c5550e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0039057fc0ec9fb561c268ed0809f8ff37346ec3d9b5862a180022abc6815d97
MD5 cd72822edd6e15d481a51a308e24e6e4
BLAKE2b-256 ece7c31ad7e2ddaf5a9eeb0e24f0f0499fb906eb1b90a5a8f07ae5f7740365f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e2bcc089a1ca60915b18dbf4eea4bc3781d2e602a5bcbeae52e2dd55c5d6939
MD5 b6bca5128ba55048981889541f6ec36e
BLAKE2b-256 dda351b77d55e3088945960a25fa462f30335d5c9e9a799676ff72b46d84ca38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1f94a7cf8239b0fb40e6177646170eff1e89dcaa4d6a993f1637ac349339b2d
MD5 7250d0a15abb4f475c1f45f3fd1f0980
BLAKE2b-256 13adb99c11f50cd1eace768b4fa989595796af5aa57c183f9733c1b9fcc1fccd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e93257805a1597be39ea54e1370522db504e7cfcdf86171ea32457e9259c577
MD5 9f9cdbf1134204b89fed1120f7d85115
BLAKE2b-256 c3f87f58466f643c471e30c5ac9da3dc96ed4e7c383fdfc32edc64b7ab0adac8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 64d3227c2926a42b6751f4f2e2940bc5ecd12e26eeefc43cdbe50c5cb56a0368
MD5 de32d9a1428f37364611688b3801628c
BLAKE2b-256 7c4b0b489cf27cdd7645017dcd9903ad791968ecd52548889c6bae33566b67c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00ea33ea82a44a65623033d9abf089e530b93c6a629bb7f1e4958df04dd713fc
MD5 b2f08c0c6f7e1c5fe9c9064fd466627f
BLAKE2b-256 27bc22c638bc9079632eba44a48e7f0a72cbadcee19ae346d4bec45bd08593be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f277a6694219e3210139317b9a2762acd9093fc1f0d6551782ce37fdc895430f
MD5 49fa4ac6cc6ce745f1962e1a95f7f0b6
BLAKE2b-256 7a7de3380f177bff70df3b87717747d07bd2ec0832317ac3f5613de99a58a436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cysox-0.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1c0fb2243990ce6a4078ad55cfaccf87ff5212e5cb6053d3cfef6b3fefced28c
MD5 0f245eeff52887552f85f3b630d76859
BLAKE2b-256 85ad5c63945475383f3ea02de105f03c401c572742807ea35d5e8b39f58432cf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cysox-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.15

File hashes

Hashes for cysox-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d99b6bc690fc4f671b7dbaea4f27bba834f3b77b6f4aba1390ef2a994d4642e
MD5 7cd50236d3ed8b747eb3359483d028c5
BLAKE2b-256 c273fa386af480e4fd67371b548896f59078d8632efae5c8d7998c6b8736d5eb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

18 files

0.1.11

19 files

0.1.10

19 files

0.1.9

19 files

0.1.8

19 files

0.1.7

19 files

0.1.6

19 files

0.1.5

19 files

0.1.4

19 files

0.1.3

19 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page