diff --git a/CHANGELOG.md b/CHANGELOG.md index f020d5f..3a6c589 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to PyTheory are documented here. +## 0.34.0 + +- **16 dedicated instrument synths** — physical modeling and specialized + synthesis for: piano (hammer + steel strings + soundboard), bass guitar + (thick KS + pickup), flute (breath + tube resonance), trumpet (lip buzz + + bell), clarinet (odd harmonics + reed), oboe (double reed + conical + bore), marimba (inharmonic bar modes), harpsichord (quill pluck), + cello (deep bowed + body), harp (soft pluck + soundboard bloom), + upright bass (pizzicato + wooden body), acoustic guitar (KS + body + resonance), electric guitar (KS + pickup comb filter), sitar (jawari + + chikari), plus organ and bowed strings +- **Speaker cabinet simulation** — tames distorted guitar fizz +- **Guitar strumming** — `Part.strum("Am")` with fretboard lookup +- **Analog oscillator drift** — subtle per-note pitch wobble on synth presets +- **World percussion:** dhol, dholak, mridangam, djembe, metal kit + with 22 new drum patterns +- **Piano improvements:** brightness scales with pitch, two-stage decay, + hammer impact with felt character +- 27 synth waveforms, 10 envelopes, 40+ instrument presets, 80+ drum patterns + ## 0.33.1 - **Electric guitar synth** — Karplus-Strong with magnetic pickup comb filter diff --git a/pyproject.toml b/pyproject.toml index 280861f..d238fbc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pytheory" -version = "0.33.0" +version = "0.34.0" description = "Music Theory for Humans" readme = "README.md" license = "MIT" diff --git a/pytheory/__init__.py b/pytheory/__init__.py index dab8e49..6b9e40d 100644 --- a/pytheory/__init__.py +++ b/pytheory/__init__.py @@ -1,6 +1,6 @@ """PyTheory: Music Theory for Humans.""" -__version__ = "0.33.0" +__version__ = "0.34.0" from .tones import Tone, Interval from .systems import System, SYSTEMS, TET diff --git a/pytheory/cli.py b/pytheory/cli.py index 40354f2..ecaa315 100644 --- a/pytheory/cli.py +++ b/pytheory/cli.py @@ -275,6 +275,30 @@ def cmd_demo(args): "lead": ("pluck_synth", "none", 0.3, 0.2), "pad": ("strings_synth", "pad", 0.0), "bass_lp": 200, "reverb_type": "taj_mahal"}, + {"name": "Classical", "key": ("D", "minor"), "drums": "bolero", + "fill": "bossa nova", "bpm": 72, + "prog": ("i", "iv", "V", "i"), + "lead": ("flute_synth", "strings", 0.35, 0.2), + "pad": ("cello_synth", "bowed", -0.2), + "bass_lp": 400, "reverb_type": "cathedral"}, + {"name": "Harpsichord Suite", "key": ("A", "minor"), "drums": "bolero", + "fill": "bossa nova", "bpm": 92, + "prog": ("i", "iv", "V", "i"), + "lead": ("harpsichord_synth", "none", 0.2, 0.1), + "pad": ("strings_synth", "pad", -0.3), + "bass_lp": 500, "reverb_type": "plate"}, + {"name": "Bhangra", "key": ("G", "minor"), "drums": "bhangra", + "fill": "rock", "bpm": 140, + "prog": ("i", "iv", "V", "i"), + "lead": ("sitar_synth", "none", 0.3, 0.2), + "pad": ("strings_synth", "pad", 0.0), + "bass_lp": 400, "reverb_type": "taj_mahal"}, + {"name": "Jazz Trio", "key": ("F", "major"), "drums": "swing", + "fill": "jazz", "bpm": 100, + "prog": ("I", "vi", "ii", "V"), + "lead": ("trumpet_synth", "bowed", 0.3, 0.2), + "pad": ("piano_synth", "none", -0.2), + "bass_lp": 600, "reverb_type": "plate"}, ] mood = random.choice(moods) diff --git a/uv.lock b/uv.lock index e3099ae..1bfa0c2 100644 --- a/uv.lock +++ b/uv.lock @@ -707,7 +707,7 @@ wheels = [ [[package]] name = "pytheory" -version = "0.33.0" +version = "0.34.0" source = { editable = "." } dependencies = [ { name = "numeral" },