mirror of
https://github.com/kennethreitz/pytheory.git
synced 2026-06-05 23:00:20 +00:00
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:
+167
-5
@@ -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.0–v0.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
|
||||
------
|
||||
|
||||
Reference in New Issue
Block a user