Sync docs changelog with CHANGELOG.md (0.15.1 through 0.25.4)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-25 21:36:22 -04:00
parent 2a5ffcf78a
commit 30dacc4fbf
+167 -5
View File
@@ -3,12 +3,160 @@ Changelog
All notable changes to PyTheory are documented here.
0.25.4
------
- Add master bus compressor/limiter — louder, punchier, more cohesive mixes
- Feed-forward compression with configurable threshold, ratio, attack, release
- Makeup gain restores loudness after compression
- Brick-wall limiter at 0.95 prevents clipping
- Replaces simple normalization in render_score()
0.25.3
------
- Add ``pytheory repl`` — interactive music theory scratchpad and composition tool
- Context-aware prompt shows key, bpm, drums, active part + effects
- Theory commands: key, chords, modes, scales, circle, interval, identify, system
- Composition: drums, part, add, rest, arp, prog, effects, automation, LFO
- Guitar: fingering, scale diagram
- 6 musical systems with correct default tonics
- REPL guide documentation
0.25.1
------
- Add ``pytheory demo`` CLI command — plays a randomly generated track, different every time
- Rewrite README to showcase the full feature set (composition, effects, drums, MIDI export)
0.25.0
------
- Add sidechain compression — kick ducks pad/bass for the classic EDM pump effect
- Add song structure: ``score.section("verse")``, ``score.section("chorus")``, ``score.repeat("verse")``
- Punchier kick drum: 808-style with faster pitch sweep (200→45Hz), sub thump, and soft saturation
- Section repeat copies all part notes, drum hits, and automation with proper offset
0.24.1
------
- Add ``humanize`` parameter on Parts — random micro-timing and velocity variation
- Makes programmed parts feel like a real player (0.1 = subtle, 0.3 = natural, 0.5+ = loose)
0.24.0
------
- Add per-note velocity: ``lead.add("C5", Duration.QUARTER, velocity=90)`` — dynamics, accents, ghost notes
- Add swing/groove: ``Score("4/4", bpm=120, swing=0.5)`` — shuffles every other note for human feel
- Add tempo changes mid-song: ``score.set_tempo(140)`` — accelerando, ritardando, tempo drops
- Add ``Part.fade_in(bars)`` and ``Part.fade_out(bars)`` — volume envelopes over sections
- Arpeggiator supports velocity parameter
- Per-part swing override (set independently from score swing)
- Tempo map engine: beat-to-sample conversion handles variable BPM throughout a score
0.23.0
------
- Add convolution reverb with 7 synthetic impulse responses: Taj Mahal, cathedral, plate, spring, cave, parking garage, canyon
- Each IR models real acoustic properties: early reflections, frequency-dependent absorption, diffusion density, and modulation
- FFT-based convolution via ``scipy.signal.fftconvolve`` for fast processing even with long tails (12s Taj Mahal)
- Select via ``reverb_type`` parameter on ``Score.part()`` — drop-in alongside existing algorithmic reverb
- IR cache for zero-cost reuse across parts
- Automatable via ``Part.set(reverb_type="cathedral")`` mid-song
0.22.0
------
- Add ``Part.lfo()`` for automated parameter modulation (filter sweeps, tremolo, auto-wah)
- 4 LFO shapes: sine, triangle, saw, square
- Configurable rate (cycles per bar), min/max range, duration, and resolution
- Stack multiple LFOs on different parameters for complex modulation
0.21.0
------
- Add ``Part.set()`` for mid-song effect automation (filter sweeps, reverb swells, distortion kicks)
- Add chorus effect (LFO-modulated delay, Juno-style)
- Renderer segments audio at automation points for per-section effect processing
- Updated effect chain: distortion → chorus → lowpass → delay → reverb
- Document automation, chorus, and updated signal chain
0.20.0
------
- Add ``Part.arpeggio()`` — arpeggiator with up/down/updown/downup/random patterns, octave spanning
- Fix Roman numeral parser to handle flat/sharp degree prefixes (bVI, bVII, bIII, #IV)
- Add ``song_showoff.py`` — generative composition that's different every time, uses every feature
- 4 mood palettes (dark, bright, ethereal, aggressive) with matched keys, progressions, drums, and effects
0.19.1
------
- Add ``Part.arpeggio()`` — arpeggiator with up/down/updown/downup/random patterns, octave spanning, and division control
- Arpeggiator chains with legato + glide for classic acid/trance sequencer sound
- Rename rhythm docs to "Sequencing: Rhythm and Scores"
- Document arpeggiator, legato, and glide in rhythm guide
0.19.0
------
- Add legato mode for parts — continuous waveform without retriggering envelope per note
- Add glide/portamento — smooth pitch slides between consecutive notes (303-style)
- Legato renders entire phrase as one oscillator with phase-accumulating frequency changes
- Glide uses exponential interpolation for perceptually linear pitch slides
0.18.1
------
- Add distortion effect (tanh soft-clip waveshaping) with drive and mix controls
- 3 new example songs: Dub Delay Madness (separate delay snare), Liquid DnB (174bpm), Late Night Texts (Drake-style trap)
- 16 total songs in the song player
0.18.0
------
- Add per-part audio effects: reverb, delay, and lowpass filter
- Reverb: Schroeder algorithm with configurable mix and decay
- Delay: tempo-synced echoes with feedback control
- Lowpass: 12 dB/octave biquad filter with resonance (Q) control
- All effects set at part creation: ``score.part("lead", reverb=0.3, delay=0.25, lowpass=2000, lowpass_q=1.5)``
- Effects applied per-part before mixing for independent processing
0.17.0
------
- Add 10 new groove presets: country, ska, dub, jungle, techno, gospel, swing, bolero, tango, flamenco (58 total)
- Add 10 new fill presets: reggae, afrobeat, bossa nova, house, trap, hip hop, disco, cumbia, highlife, second line (21 total)
- Every major genre family now has matching groove + fill presets
0.16.0
------
- Add drum fill system with 11 genre-specific presets: rock, rock crash, jazz, jazz brush, salsa, samba, funk, metal, blast, buildup, breakdown
- ``Pattern.fill("rock")`` returns a 1-bar fill pattern
- ``Score.fill("rock")`` inserts a fill at the current position
- ``Score.drums("rock", repeats=8, fill="rock", fill_every=4)`` auto-fills every Nth bar
- Without ``fill_every``, fill replaces only the last bar
0.15.1
------
- Add ``Synth.PWM_SLOW`` and ``Synth.PWM_FAST`` — pulse width modulation with LFO sweep (Juno-style pads)
- Add ``Score.drums()`` shorthand for ``score.add_pattern(Pattern.preset(...), repeats=...)``
- Update all docs to use ``score.drums()`` syntax and document all 10 synth waveforms
0.15.0
------
- Add 5 new synth waveforms: ``Synth.SQUARE``, ``Synth.PULSE``, ``Synth.FM``, ``Synth.NOISE``, ``Synth.SUPERSAW``
- Square wave (chiptune), pulse wave (NES), FM synthesis (DX7), white noise, supersaw (trance pads)
- All 8 synths available in API and Part strings
- Square wave: classic chiptune / 8-bit sound (odd harmonics at 1/n)
- Pulse wave: variable duty cycle for NES-style timbres (25%, 12.5%)
- FM synthesis: DX7-style frequency modulation (electric piano, bells, brass, metallic)
- Noise: white noise for percussion textures and effects
- Supersaw: 7 detuned saw oscillators for trance/EDM pads
- All 8 synths available in both the API (``Synth.FM``) and Part strings (``synth="fm"``)
- CLI play command supports all 8 waveforms
0.14.0
@@ -21,6 +169,11 @@ All notable changes to PyTheory are documented here.
- Parts accept raw float beat values alongside ``Duration`` enums
- All 10 example songs rewritten with drums + chords + lead + bass parts
0.13.1
------
- Fix drum pattern repeats: hits now correctly offset across cycles instead of piling up on the first bar
0.13.0
------
@@ -34,11 +187,20 @@ All notable changes to PyTheory are documented here.
- Add rhythm module: ``Duration``, ``TimeSignature``, ``Note``, ``Rest``, ``Score``
- ``Duration`` enum with 8 note lengths (whole through sixteenth, dotted, triplet)
- ``TimeSignature`` with string parsing ("4/4", "3/4", "6/8", "12/8") and ``beats_per_measure``
- ``TimeSignature`` with string parsing ("4/4", "3/4", "6/8", "12/8") and beats_per_measure
- ``Score`` class with fluent ``.add()`` / ``.rest()`` chaining, measure counting, and ``save_midi()`` export
- Measure-aware MIDI export with proper time signature and tempo meta events
- Add ``DrumSound`` enum with 27 General MIDI percussion sounds
- Add ``Pattern`` class with 48 drum pattern presets (rock, jazz, bebop, salsa, bossa nova, samba, afrobeat, funk, reggae, house, trap, metal, and many more)
- Add ``Pattern`` class with 48 drum pattern presets covering:
- **Rock/Pop**: rock, half time, double time, disco, motown, train beat
- **Jazz**: jazz, bebop, shuffle, linear, paradiddle
- **Latin**: salsa, bossa nova, samba, cumbia, merengue, baiao, maracatu
- **Afro-Cuban**: son clave 3-2/2-3, rumba clave 3-2/2-3, cascara, guaguanco, mozambique, nanigo, bembe, 6/8 afro-cuban, tresillo, habanera
- **African**: afrobeat, highlife
- **Caribbean**: reggae, dancehall
- **Electronic**: house, trap, drum and bass, breakbeat
- **Metal/Punk**: metal, blast beat, punk
- **Other**: funk, hip hop, bo diddley, second line, new orleans, waltz, 12/8 blues
- ``Pattern.to_score()`` renders drum patterns to Score for MIDI export
0.11.0
@@ -51,7 +213,7 @@ All notable changes to PyTheory are documented here.
- Add ``Tone.solfege`` property for fixed-Do solfege syllables (Do, Re, Mi, Fi, etc.)
- Add CLI ``identify`` command for full chord analysis from a symbol
- Add CLI ``midi`` command for exporting progressions to Standard MIDI Files
- Expand documentation with all features from v0.9.0v0.11.0
- Expand documentation: solfege, Helmholtz, cents, slash chords, drop voicings, chord extensions, borrowed chord analysis, ADSR envelopes, MIDI export, new CLI commands
0.10.0
------