Skip to main content

Python audio DSP library for synthesis, effects, and sequencing

Project description

PyPI Downloads

audio-dsp

A Python audio DSP library for synthesis, effects, and sequencing.

Open In Colab

Installation

# Core installation (numpy, scipy, soundfile)
pip install audio-dsp

# Full installation with all optional dependencies
pip install audio-dsp[full]

# Specific extras
pip install audio-dsp[synth]   # Synthesis modules
pip install audio-dsp[midi]    # MIDI processing
pip install audio-dsp[ml]      # Machine learning features
pip install audio-dsp[viz]     # Visualization
pip install audio-dsp[audio]   # Extended audio processing (librosa, pydub)

Features

Synthesizers (audio_dsp.synth)

  • SubtractiveSynth - Classic subtractive synthesis with oscillators, filters, LFO, ADSR
  • DX7FMSynth - DX7-style FM synthesis with 4 operators and 5 algorithms
  • PhysicalModelingSynth - Physical modeling synthesis
  • DrumSynth - Drum synthesis
  • ChipTone functions - Retro 8-bit chip synthesis (kick, snare, blip, etc.)
  • PluckSynth - Karplus-Strong plucked string synthesis
  • DialupSynth - Modem/dial-up sound synthesis

Effects (audio_dsp.effects)

All effects follow a unified API: effect(signal, sample_rate, **params) → numpy.ndarray

  • Dynamics: compress, multi-band saturation, sidechain compressor
  • Filters: filter (lowpass, bandpass)
  • Modulation: phaser_flanger, chorus, flutter, pitch drift
  • Time-based: delay, reverb (convolution), time slice
  • Spectral: Frequency splicer, melt spectrum, vocoder, spectral quantization
  • Character: Distortion (19 types), lofi, glitch, tape saturation
  • Specialized: autotune, sitar sympathetic resonance, variable_quantizer

Sequencers (audio_dsp.sequencer)

Unified API - All sequencers share a common interface:

  • BaseSequencer - Base class with generate(), export() methods
  • PatternSequencer - Pattern-based sequencing with samples
  • LiquidSequencer - Non-linear timing with swing/jitter
  • SampleManager - Load samples from files or numpy arrays

Specialized Sequencers:

  • RagaSequencer - Indian classical music with time-of-day raga selection
  • TreeSequencer - Tree traversal-based algorithmic composition
  • ChordProgressionSequencer - Microtonal chord progressions (24-TET, etc.)
  • MelodySequencer - Melody development with counterpoint generation
  • Game of Life sequencers with video output
  • Matrix composer for linear algebra sonification

MIDI (audio_dsp.midi)

  • Polyrhythmic MIDI generation
  • MIDI file looping
  • Alternate tuning systems
  • Logarithmic tunings

Utilities (audio_dsp.utils)

  • Audio I/O - Lightweight audio loading/saving with built-in WAV support (no external dependencies)
  • Scale and melody utilities
  • Spectral analysis
  • Transient extraction
  • Maqamat (Arabic scales)
  • Noise algorithms
  • Image to audio conversion

Quick Start

Notebook Description Link
00. Quickstart Generate your first sound in 30 seconds. Open In Colab
01. Synthesizers Deep dive into Oscillators, FM, and Envelopes. Open In Colab
02. Effects Rack How to chain Reverb, Delay, and Distortion. Open In Colab
03. Sequencing creating generative melodies and MIDI tools. Open In Colab
04. Utilities Audio file handling and analysis tools. Open In Colab
from audio_dsp.synth import SubtractiveSynth
import soundfile as sf

# Create a subtractive synth
synth = SubtractiveSynth(sample_rate=44100)
synth.osc_wave = "saw"
synth.filter_cutoff = 800
synth.filter_resonance = 2.0

# Synthesize a note
audio = synth.synthesize(freq=220, duration=2.0)

# Save to file
sf.write("output.wav", audio, 44100)
from audio_dsp.utils import load_audio
from audio_dsp.utils import wav_io
from audio_dsp.effects import filter, delay, reverb, compress

# Load audio
sr, audio = load_audio("input.wav", mono=True)

# Chain effects - all work on numpy arrays
audio = filter(audio, sr, cutoff=1000, filter_type="lowpass")
audio = delay(audio, sr, delay_time=0.25, feedback=0.5, mode="analog")
audio = reverb(audio, "impulse.wav", sr, wet_mix=0.3)
audio = compress(audio, sr, threshold=-20, ratio=4.0)

# Save output
wav_io.write("output.wav", sr, audio.astype('float32'))
from audio_dsp.sequencer import PatternSequencer, SampleManager
from audio_dsp.synth import SubtractiveSynth
import numpy as np

# Create samples from synth output
synth = SubtractiveSynth()
kick = synth.synthesize(freq=60, duration=0.1)
snare = synth.synthesize(freq=200, duration=0.1)

# Create pattern sequencer
seq = PatternSequencer(bpm=120)
seq.add_sample("kick", kick)    # numpy array
seq.add_sample("snare", snare)
seq.add_sample("hihat", "samples/hihat.wav")  # or file path

# Generate from patterns
patterns = {
    "kick": "1000100010001000",
    "snare": "0000100000001000",
    "hihat": "1010101010101010"
}
audio = seq.generate_from_patterns(patterns, duration=4.0)
from audio_dsp.sequencer import RagaSequencer

# Generate raga-based music appropriate for time of day
seq = RagaSequencer(bpm=90, root_frequency=220.0)
raga = seq.choose_raga()  # Selects based on current hour
print(f"Playing {raga['name']}")

audio = seq.generate_raga_phrase(raga, duration=30.0)

License

MIT License - see LICENSE for details.

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

audio_dsp-0.1.10.tar.gz (12.7 MB view details)

Uploaded Source

Built Distribution

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

audio_dsp-0.1.10-py3-none-any.whl (12.7 MB view details)

Uploaded Python 3

File details

Details for the file audio_dsp-0.1.10.tar.gz.

File metadata

  • Download URL: audio_dsp-0.1.10.tar.gz
  • Upload date:
  • Size: 12.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for audio_dsp-0.1.10.tar.gz
Algorithm Hash digest
SHA256 edbbdd49d288619f325dadb66e27c51a3db73c1df6c5f8160b1dbfb667206fbe
MD5 89e08f0583330df96062c6cbedd26b2d
BLAKE2b-256 98b8f3d002727d2945a7f23d7bcd14d49cfd627a55f2e71073f6d2b42dd628fa

See more details on using hashes here.

File details

Details for the file audio_dsp-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: audio_dsp-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for audio_dsp-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 55b0eb03c5db1ab09509bfe455ae31a19a6149a0d222f1b4ca0a137a86ade64c
MD5 6ce1292c6deea80375f385a722c05550
BLAKE2b-256 f8f651212d524702e819be3b2837d3279728ef3450cfdde6760bfbc7550748f5

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