You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+25Lines changed: 25 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,31 @@ All notable changes to `@jmove/generator` will be documented in this file.
4
4
5
5
This project follows [Semantic Versioning](https://semver.org/).
6
6
7
+
## [1.3.0] - 2026-07-17
8
+
9
+
### Added
10
+
11
+
-**Harmonic analysis engine** (`harmonicAnalysis.ts`) - analyzes chord progressions for key centers, Roman numeral degrees, harmonic function (tonic/predominant/dominant), ii-V-I patterns, cadences, secondary dominants, modulations, and per-chord tension values
12
+
- New types: `ChordAnalysis`, `HarmonicFunction`, `CadenceType`, `HarmonicAnalysisResult`
13
+
-`ChordEvent.analysis` - optional per-chord harmonic annotation populated by `analyzeHarmony()`
14
+
-`BandContext.harmonicAnalysis` - full analysis result available to all generators
15
+
-`analyzeHarmony()` exported from package for standalone use
16
+
- 61 new tests covering key detection, degree assignment, ii-V-I detection, secondary dominants, cadences, tension values, modulation detection, real jazz progressions, key transposition accuracy, and voicing deduplication across styles
17
+
18
+
### Fixed
19
+
20
+
-**Key transposition bug** - `detectTemplateKey()` used last-chord heuristic, causing wrong key for templates ending on non-tonic chords (e.g. "Blues in Bb" produced chords in Ab). Replaced with explicit `TEMPLATE_KEY` map covering all ~60 template variants
21
+
-**Duplicate MIDI notes in voicings** - cluster, inversion, open, and root-position voicing builders lacked pitch deduplication after octave clamping. Added `[...new Set()]` to 4 fallback paths
22
+
-**Harsh minor-2nd clusters in Alfa Mist** - minor cluster intervals `[2,3,5,10]` always placed 9th and b3rd one semitone apart. Changed to `[3,5,7,10]` (b3-4-5-b7)
23
+
24
+
### Changed
25
+
26
+
-**Ensemble** runs harmonic analysis once before generation; all three generators receive annotated chords with per-chord function, tension, and cadence data
27
+
-**Piano comping** uses `chord.analysis` for ii-V-I awareness instead of ad-hoc `isDominantQuality`/`isResolvingDominant`; altered voicings now trigger on secondary dominants and authentic cadence dominants, not just V-I root motion; anticipation probability modulated by per-chord tension (high-tension dominants anticipate more)
28
+
-**Walking bass** beat 1 selection is harmonic-aware: 85% root on tonic resolution (strong arrival), 55% root on dominant chords (more variety for tension); leading-tone approach on beat 4 of V-I cadences (45% probability) creates strongest resolution motion
29
+
-**Drum fills** placed before authentic cadence resolutions using harmonic analysis, not just form/phrase markers
30
+
-`planMusicalIntents` uses average phrase tension to modulate anticipation and passing chord probabilities per phrase
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,6 +38,7 @@ Deep technical articles about how JMove and the generator work:
38
38
-**Drum Patterns** - 19 styles with humanization, ghost notes, groove templates based on GrooVAE research. Holdsworth preset features Chad Wackerman-inspired drumming: cross-stick interjections, ghost cascades, linear fills, 11/8-specific patterns
39
39
40
40
**Intelligence**
41
+
-**Harmonic Analysis Engine** - `analyzeHarmony()` detects key centers, assigns Roman numeral degrees, identifies ii-V-I patterns, cadences, secondary dominants, and modulations. Per-chord tension values drive musical decisions across all generators
41
42
-**Musicality Engine** - phrase-level intelligence: dynamic drops, air gaps, harmonic anticipation, passing chords, conversation dynamics, motif memory. Four parameters (creativity, conversation, airGaps, harmonicFreedom) control musical character
42
43
-**Per-Instrument Complexity** - 3 general sliders drive 13 granular sub-controls via piecewise linear mapping. Manual overrides take precedence over derived values
43
44
-**Full Song Form** - multi-section arrangements with dynamic shaping and section-driven dynamics (intro sparse, shout dense)
0 commit comments