- Drums are real Parts with full effects pipeline
- split=True creates kick/snare/hats/toms/cymbals/percussion Parts
- Sidechain triggers on kick only
- Score.from_midi() imports Standard MIDI Files
- Document split drums workflow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
score.drums("rock", split=True) creates independent Parts per group.
Each gets its own effects chain. set_drum_effects() applies to all.
Sidechain triggers on kick only. Render loop handles multiple drum Parts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hi-hats and snares no longer duck the pad — only the kick does.
This is how sidechain compression works in real mixes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
_drum_hits and _drum_pattern_beats proxy through score.parts['drums'].
Drum Part goes through _apply_part_effects like any other Part.
set_drum_effects() is now sugar over the Part's attributes.
All 789 tests pass with no API changes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
score.set_drum_effects(reverb=0.2, reverb_type="plate", lowpass=8000)
Uses _apply_effects_with_params on each stereo channel.
Supports all effects: reverb, delay, lowpass, distortion, chorus.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Every song now has: stereo panning, convolution reverb (plate/cathedral),
humanize (0.2), detune (8-12) on pads, sidechain on electronic tracks,
lowpass on bass, delay on leads. No melodies changed — just better sound.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Load any Standard MIDI File into a Score. Zero-dependency parser
handles Type 0 and Type 1 files. Each channel becomes a Part,
channel 10 becomes drum hits. Roundtrip with save_midi works.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drums now have micro-timing and velocity imperfections like a real
drummer. Default 0.3 (subtle). Control via Score(drum_humanize=0.5).
Kick stays tightest, hats and ghost notes drift naturally.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Every page now ends on prose instead of a code block.
Chords, tones, scales, effects, drums, CLI, cookbook,
fretboard, playback, systems, theory — each with a
sentence that ties the page together.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Chord.figured_bass: classical inversion notation (6, 6/4, 7, 6/5, 4/3, 2)
- Chord.analyze_figured(): Roman numerals with figured bass (V6/5, ii6)
- Chord.pitch_classes, normal_form, prime_form, forte_number: set theory
- Scale.recommend(): ranked scale suggestions from note sets
- Forte catalog: all trichords and tetrachords
- Documented in chords and scales guides
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sparse triangle koto over E hirajoshi scale, Taj Mahal reverb,
sine drone, FM bells. Silence as instrument.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Context-aware: commands on first word, drum presets after 'drums',
synth names after 'part', chord symbols after 'arp'/'chord',
note names after 'add', systems after 'system', LFO params after
'set'/'lfo', envelope names as third arg for 'part'.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All 15 drum sounds rewritten with inharmonic partials, proper
transients, multi-mode resonance, and saturation. Song #19:
Dance Party at the Reitz House — for Sarah and Malachi.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kick/snare center, hat right, crash left, toms spread L-to-R,
congas/timbales/agogos across the field. Sounds like a real kit.
Mono sidechain trigger preserved for compression.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pure sine and triangle only. Ab major waltz at 72bpm. Cathedral
and Taj Mahal reverb. Triangle legato melody with glide.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two independently generated impulse responses create natural stereo
width in the convolution reverb tail. Works with all 7 presets
(Taj Mahal, cathedral, plate, spring, cave, parking garage, canyon).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dual 303s arping in opposite directions on opposite sides,
supersaw pad with full spread, ping-pong FM bells, sidechain sub.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Different comb filter delay times per channel create natural stereo
width in the reverb tail. Effects chain skips mono reverb in favor
of stereo reverb applied in the mixer after panning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Renders three oscillators per note: center + up + down by the
specified cents. Creates analog-style beating/width on any waveform.
detune=15 is classic Juno drift, detune=25 is trance supersaw territory.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drum hits on fractional beat positions now get pushed later by
the score's swing amount. Everything locks into the same pocket.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
No more maintaining a separate RST changelog. The docs now include
the markdown file directly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Feed-forward compression (threshold=0.5, ratio=4:1) with envelope
following, makeup gain, and brick-wall limiter at 0.95. Replaces
simple normalization. Everything sounds louder and punchier.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers the prompt, theory commands, composition flow, effects,
automation, LFOs, playback, export, and a full start-to-finish session.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>