Python audio DSP library for synthesis, effects, and sequencing
Project description
audio-dsp
A Python audio DSP library for synthesis, effects, and sequencing.
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 withgenerate(),export()methodsPatternSequencer- Pattern-based sequencing with samplesLiquidSequencer- Non-linear timing with swing/jitterSampleManager- Load samples from files or numpy arrays
Specialized Sequencers:
RagaSequencer- Indian classical music with time-of-day raga selectionTreeSequencer- Tree traversal-based algorithmic compositionChordProgressionSequencer- 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
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edbbdd49d288619f325dadb66e27c51a3db73c1df6c5f8160b1dbfb667206fbe
|
|
| MD5 |
89e08f0583330df96062c6cbedd26b2d
|
|
| BLAKE2b-256 |
98b8f3d002727d2945a7f23d7bcd14d49cfd627a55f2e71073f6d2b42dd628fa
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55b0eb03c5db1ab09509bfe455ae31a19a6149a0d222f1b4ca0a137a86ade64c
|
|
| MD5 |
6ce1292c6deea80375f385a722c05550
|
|
| BLAKE2b-256 |
f8f651212d524702e819be3b2837d3279728ef3450cfdde6760bfbc7550748f5
|