Files
pytheory/docs/changelog.rst
T
kennethreitz 4f3b706336 v0.15.0: Add square, pulse, FM, noise, and supersaw synth waveforms
- Square wave: chiptune / 8-bit (odd harmonics at 1/n)
- Pulse wave: variable duty cycle NES-style timbres
- FM synthesis: DX7-style carrier/modulator for bells, e-piano, brass
- Noise: white noise for percussion and texture
- Supersaw: 7 detuned saws for trance/EDM pads
- Refactor Synth enum to string-valued with callable dispatch
- All 8 waveforms available via API, Part strings, and CLI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:37:21 -04:00

191 lines
7.7 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Changelog
=========
All notable changes to PyTheory are documented here.
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
- CLI play command supports all 8 waveforms
0.14.0
------
- Add ``Part`` class for multi-voice Score arrangements (lead, bass, pads, etc.)
- ``Score.part()`` creates named parts with independent synth, envelope, and volume
- ``Score.add_pattern()`` for attaching drum patterns
- ``render_score()`` exported for headless buffer rendering
- Parts accept raw float beat values alongside ``Duration`` enums
- All 10 example songs rewritten with drums + chords + lead + bass parts
0.13.0
------
- Add drum synthesizer with 27 individual instrument voices (kick, snare, hat, conga, timbale, etc.)
- Add ``play_pattern()`` for playing drum patterns through the speakers
- Add ``play_score()`` for playing mixed drum patterns + chord progressions together
- Every ``DrumSound`` has a dedicated synthesis algorithm (pitch sweeps, noise bursts, membrane resonance, metallic rings)
0.12.0
------
- 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``
- ``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)
- ``Pattern.to_score()`` renders drum patterns to Score for MIDI export
0.11.0
------
- Add drop voicings: ``Chord.close_voicing()``, ``Chord.open_voicing()``, ``Chord.drop2()``, ``Chord.drop3()``
- Add ``Key.modulation_path(target)`` for chord-by-chord modulation suggestions via pivot chords
- Add ``Scale.degree_name(n)`` returning traditional names (tonic, dominant, leading tone, etc.)
- Add ``Chord.extensions()`` to suggest available 9th/11th/13th extensions
- 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
0.10.0
------
- Add ``Scale.fitness()`` to score how well a set of notes fits a scale (0.01.0)
- Add ``Key.suggest_next(chord)`` for chord progression suggestions based on functional harmony
- Add ``Tone.helmholtz`` and ``Tone.scientific`` properties for alternate pitch notation
- Add ``Chord.slash(bass)`` and ``Chord.slash_name`` for slash chord notation (C/G, Am/E)
- Add ``save_midi()`` for exporting tones, chords, and progressions as Standard MIDI Files
- Add chord tone highlighting in ``Fretboard.scale_diagram()`` — chord tones uppercase, passing tones lowercase
- Extend ``Chord.analyze()`` to recognize borrowed chords (bVI, bVII, bIII, etc.)
0.9.0
-----
- Add ADSR envelope system with 8 presets: ``Envelope.PIANO``, ``ORGAN``, ``PLUCK``, ``PAD``, ``STRINGS``, ``BELL``, ``STACCATO``, ``NONE``
- Add ``Chord.from_symbol()`` parser — handles any standard chord symbol (e.g. "F#m7b5", "Bbmaj9", "Gsus4") without lookup tables
- Add ``Key.pivot_chords(target)`` for finding modulation pivot chords between two keys
- Add ``Scale.parallel_modes()`` to show all modes sharing the same notes (C major → D dorian, E phrygian, etc.)
- Add ``Tone.cents_difference(other)`` for measuring fine pitch differences in cents
- Add ``--envelope`` flag to CLI play command
- CLI play command now uses ``Chord.from_symbol()`` for broader chord parsing
- Replace hardcoded ``c_index = 3`` with named ``C_INDEX`` constant throughout
0.8.3
-----
- Add ``Chord.symbol`` property for standard shorthand notation (Cmaj7, Dm, G7, m7b5, etc.)
- Add ``Key.common_progressions()`` to realize all named progressions in a key
- Add CLI commands: ``modes``, ``circle``, ``progressions``
0.8.2
-----
- Use flat spellings in CHARTS ``acceptable_tone_names`` (e.g. Bbm now shows Bb/Db/F instead of A#/C#/F)
0.8.1
-----
- Use musically correct flat spellings in flat keys (F major gives Bb, not A#)
0.8.0
-----
- Add ``Fretboard.scale_diagram()`` for visual scale layouts on any instrument
- Add ``play_progression()`` for sequential chord playback with gaps
- Add cookbook documentation page with practical recipes
- Curated guitar fingering overrides for common open chords
- Fingering memoization with bounded cache, barre detection, 4-fret span constraint
- API ergonomics: ``Fretboard.chord()``, convenience constructors, slow test markers
0.7.0
-----
- Add ``Fretboard.chord()`` method for named chord lookups
- Improve fingering algorithm with better voicing selection
- Rewrite all documentation in REPL style with verified output
0.6.1
-----
- Fix sawtooth and triangle wave generation
- Add WAV export via ``save()``
- Add CLI tests and play module tests
- Skip play module tests when PortAudio is not available
0.6.0
-----
- Support flat note names (Db, Bb, Eb, etc.) throughout the system
- Add ``Fingering`` class for labeled chord fingerings
- Add ``pytheory play`` CLI command for playing notes and chords
- Add 12 example scripts showcasing pytheory features
- Expand documentation with undocumented features and CLI guide
0.4.1
-----
- Add ``--temperament`` flag to CLI tone command
- Add Symbolic Pitch section to tones docs
0.4.0
-----
- Add key signatures, scale diagrams, chord building, and progression analysis
- Add CLI tool (``pytheory tone``, ``pytheory chord``, ``pytheory key``, etc.)
- Add Jupyter notebook tutorial
- Improve test coverage from 93% to 97% (476 tests)
- Add type hints, docstrings, and property caching throughout
0.3.2
-----
- Add type hints and docstrings throughout the library
0.3.1
-----
- Add capo support, chord merging (``+``), tritone substitution
- Add secondary dominants, Nashville number system
- Add more common progressions (blues, jazz, flamenco, modal)
0.3.0
-----
- Add interval naming (``Tone.interval_to()``)
- Add MIDI conversion (``Tone.midi``, ``Tone.from_midi()``)
- Add ``Tone.from_frequency()``, ``Tone.transpose()``
- Add ``Chord.root``, ``Chord.quality`` properties
- Add ``Chord.from_name()``, ``Chord.from_intervals()``, ``Chord.from_midi_message()``
- Add ``Interval`` constants (MINOR_THIRD, PERFECT_FIFTH, etc.)
- Add ``PROGRESSIONS`` dict with common named progressions
- Add ``Tone.enharmonic`` property
- Add inversions, harmonize, and Roman numeral progressions
- Add ``Key`` class with detection, signatures, relative/parallel keys
- Add ``Scale.detect()`` and ``Chord.from_tones()`` convenience constructors
- Add 25 instrument presets (mandolin family, violin family, banjo, harp, world instruments, keyboard)
- Add ``Tone.circle_of_fifths()`` and ``Tone.circle_of_fourths()``
- Add chord identification (17 types), voice leading, tension scoring
- Add beat frequencies, Plomp-Levelt dissonance model, harmony scoring
0.2.0
-----
- Add ``Fretboard`` class for guitar fretboards
- Add ``play()`` function with sine, sawtooth, and triangle wave synthesis
- Add chord harmony and dissonance calculations
- Modernize project structure (pyproject.toml, sounddevice)
0.1.0
-----
- Initial release
- Western 12-tone system with tones, scales, and basic chord support
- Temperament support (equal, Pythagorean, meantone)
- Indian (Hindustani), Arabic, Japanese, Blues, and Gamelan systems