@pepperhorn/chordl-guitar 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # Guitar voicing generation and review
2
+
3
+ `guitarPositionFor(spelledChord, options?)` first validates chords-db positions,
4
+ then tries the regular power-chord shape, then ranks an exhaustive playable
5
+ candidate set. `generateGuitarVoicings(notes, options?)` exposes that ranked set.
6
+
7
+ ```ts
8
+ const position = guitarPositionFor(
9
+ { root: "A", pitchClasses: ["A", "C#", "Eb", "G", "Bb", "F#"] },
10
+ { level: 3 },
11
+ );
12
+ // A13(b9,b5): a rootless grip can retain 3, b5, b7, b9, 13.
13
+ // position.review.reasons includes "omits:1" and "rootless".
14
+ ```
15
+
16
+ The default teaching level is **2**. Levels 0–2 always retain the root. At
17
+ level 3, the root may be omitted from chords with six or more required tones,
18
+ from five-tone upper chords over a slash bass (including the formerly missing
19
+ Ab9/Eb), or from any five-tone chord with an explicit `{ comping: true }`.
20
+ A rootless grip must put a third/seventh lowest or sound the written slash bass
21
+ lowest. A rooted grip still puts the root/written slash bass lowest. A slash
22
+ bass equal to the root cannot be omitted. `rootless` and `omitted` disclose
23
+ root omissions; a renderer should explain “root left out; the bass player has
24
+ it”. Thirds, sevenths and named alterations are preserved in dense chords.
25
+
26
+ Natural 9 remains required under #11 alone. It is optional under a natural 11
27
+ or 13. These are spelling-aware rules: #11 differs from b5 even when the pitch
28
+ classes coincide.
29
+
30
+ Ranking penalizes register-dependent low seconds/thirds and minor ninths,
31
+ inner-string basses, wide finger reaches, long barres, high positions (convex
32
+ cost above fret 9), and opens under a high hand. Five-tone and larger chords
33
+ have no six-string bonus. These costs rank compromises; they do not certify
34
+ playability for a particular hand or enforce the future level-specific tiers.
35
+ The top tension need not be the highest voice.
36
+
37
+ Every returned position, including validated library shapes, carries `review`:
38
+
39
+ - `origin`: `chords-db`, `template:power-chord`, or `search`.
40
+ - `level`: requested teaching level, default 2.
41
+ - `reasons`: omission, register, dissonance, hand geometry and rejected-library
42
+ reason codes (`ReasonCode` is exported). Empty means no measured warning.
43
+ - `confidence`: deterministic attention heuristic in 0–1, **not a probability**
44
+ or teacher approval. Unflagged search starts at 0.88, library/template at 0.98.
45
+ - `needsReview`: `reasons.length > 0 || confidence < 0.8`.
46
+ - `reviewKey`: stable chord-constraint/level/absolute-grip/fingering identity.
47
+ Group by this key to review enharmonic twins once (Bb9/C# and Bb9/Db, for
48
+ example). Different fingerings or levels remain separate review items.
49
+
50
+ The key deduplicates review work without requiring a catalogue slug or a
51
+ stateful registry, and without marking otherwise clean twins as warnings.
52
+ The root's pitch class and each tone's degree/role remain in the key; merely sharing
53
+ an unordered pitch set does not conflate different bass or omission policies.
54
+ A non-chord bass is distinct from a seventh (which may double), even if both
55
+ spellings produce the same pitch set. No template origin is claimed for brute-force search results.
56
+
57
+ This package supplies metadata. Card/manifest consumers must forward it and
58
+ pass the teaching level; existing card rendering is unchanged.
59
+
60
+ ## Reproduce the independent-oracle comparison
61
+
62
+ From the repository root, with the existing review outputs available:
63
+
64
+ ```sh
65
+ node_modules/.bin/tsx packages/chordl-guitar/scripts/compare-voicings.mts \
66
+ --plain /path/to/plain/verdicts.json \
67
+ --slash /path/to/slash/verdicts.json \
68
+ --missing /path/to/missing38.json \
69
+ --out /path/to/generator-comparison \
70
+ --baseline-ref d307e3b378c6864cd61fc39f6571cf0ee1a81586
71
+ ```
72
+
73
+ Both versions regenerate all 3,157 oracle rows. The script refuses baseline
74
+ shape/fingering mismatches, validates new pitch coverage, reports changed
75
+ `replace` and `accept` rows separately, counts all 38 recoveries, and writes
76
+ review distributions, raw JSON and an HTML contact sheet. Comparison uses
77
+ explicit level 3; the default remains root-preserving level 2. Original verdicts
78
+ judge the old shapes: a changed `accept` is a regression watch item, and a
79
+ changed `replace` still needs a teacher's playing/listening check.
80
+
81
+ Package checks: `pnpm --filter @pepperhorn/chordl-guitar test:run` and
82
+ `pnpm --filter @pepperhorn/chordl-guitar build`.
@@ -1,5 +1,6 @@
1
1
  import type { ChordsDbPosition } from "./instruments.js";
2
- import type { GeneratedPosition } from "./voicingGenerator.js";
2
+ import type { GuitarReview } from "./voicingReview.js";
3
+ import type { ToneOptions, GeneratedPosition } from "./voicingGenerator.js";
3
4
  export interface SpelledChord {
4
5
  /** Root, spelled: "C", "F#", "Bb". */
5
6
  root: string;
@@ -13,6 +14,7 @@ export interface LibraryPosition extends ChordsDbPosition {
13
14
  source: "chords-db" | "power-chord";
14
15
  /** chords-db suffix the shape came from. */
15
16
  suffix?: string;
17
+ review: GuitarReview;
16
18
  }
17
19
  export type GuitarPosition = LibraryPosition | GeneratedPosition;
18
20
  /** The chords-db suffix carrying exactly this chord, or null. */
@@ -23,9 +25,9 @@ export declare function chordsDbSuffixFor(chord: SpelledChord): string | null;
23
25
  * the neck. The first is the one `guitarPositionFor` prints. Empty when
24
26
  * chords-db has no entry for the chord or none of its positions spells it.
25
27
  */
26
- export declare function guitarLibraryPositionsFor(chord: SpelledChord): LibraryPosition[];
28
+ export declare function guitarLibraryPositionsFor(chord: SpelledChord, options?: ToneOptions): LibraryPosition[];
27
29
  /**
28
30
  * The best guitar position for a spelled chord, or null if none is playable
29
31
  * under the generator's constraints.
30
32
  */
31
- export declare function guitarPositionFor(chord: SpelledChord): GuitarPosition | null;
33
+ export declare function guitarPositionFor(chord: SpelledChord, options?: ToneOptions): GuitarPosition | null;
@@ -11,6 +11,7 @@
11
11
  import guitarDb from "./generated/guitar.slim.json" with { type: "json" };
12
12
  import { powerChordPosition } from "./powerChords.js";
13
13
  import { analyzeChordTones, generateGuitarVoicings, positionSpellsChord, } from "./voicingGenerator.js";
14
+ import { reviewGuitarPosition } from "./voicingReview.js";
14
15
  const GUITAR_DB = guitarDb;
15
16
  // chords-db suffix → pitch classes above the root (the chord's definition, not
16
17
  // any one position's subset).
@@ -68,31 +69,47 @@ export function chordsDbSuffixFor(chord) {
68
69
  * the neck. The first is the one `guitarPositionFor` prints. Empty when
69
70
  * chords-db has no entry for the chord or none of its positions spells it.
70
71
  */
71
- export function guitarLibraryPositionsFor(chord) {
72
- const bass = isSlash(chord) ? chord.bass : undefined;
73
- const analysis = analyzeChordTones(chord.root, chord.pitchClasses, bass);
72
+ export function guitarLibraryPositionsFor(chord, options = {}) {
73
+ // The written bass (even one equal to the root) stays in the analysis: it is
74
+ // what stops rootless level 3 from dropping the root. Only suffix lookup and
75
+ // the power-chord template treat a root bass as root position.
76
+ const analysis = analyzeChordTones(chord.root, chord.pitchClasses, chord.bass, options);
74
77
  const suffix = chordsDbSuffixFor(chord);
75
78
  if (!suffix)
76
79
  return [];
77
80
  const entry = GUITAR_DB.chords[DB_KEY_BY_PC[pcOf(chord.root)]].find((e) => e.suffix === suffix);
78
81
  return entry.positions
79
82
  .filter((p) => positionSpellsChord(p, analysis))
80
- .map((p) => ({ ...p, generated: false, source: "chords-db", suffix }));
83
+ .map((p) => ({
84
+ ...p, generated: false, source: "chords-db", suffix,
85
+ review: reviewGuitarPosition(p, analysis, { level: options.level, origin: "chords-db" }),
86
+ }));
81
87
  }
82
88
  /**
83
89
  * The best guitar position for a spelled chord, or null if none is playable
84
90
  * under the generator's constraints.
85
91
  */
86
- export function guitarPositionFor(chord) {
87
- const bass = isSlash(chord) ? chord.bass : undefined;
88
- const library = guitarLibraryPositionsFor(chord)[0];
92
+ export function guitarPositionFor(chord, options = {}) {
93
+ const library = guitarLibraryPositionsFor(chord, options)[0];
89
94
  if (library)
90
95
  return library;
91
- if (!bass && sameSet(relativeSet(chord), [0, 7])) {
96
+ const analysis = analyzeChordTones(chord.root, chord.pitchClasses, chord.bass, options);
97
+ if (!isSlash(chord) && sameSet(relativeSet(chord), [0, 7])) {
92
98
  const pos = powerChordPosition(pcOf(chord.root), { stringSet: "E" });
93
99
  if (pos)
94
- return { ...pos, generated: false, source: "power-chord" };
100
+ return {
101
+ ...pos, generated: false, source: "power-chord",
102
+ review: reviewGuitarPosition(pos, analysis, { level: options.level, origin: "template:power-chord" }),
103
+ };
95
104
  }
96
- return generateGuitarVoicings(chord.pitchClasses, { root: chord.root, bass, limit: 1 })[0] ?? null;
105
+ const p = generateGuitarVoicings(chord.pitchClasses, { ...options, root: chord.root, bass: chord.bass, limit: 1 })[0];
106
+ if (!p)
107
+ return null;
108
+ if (chordsDbSuffixFor(chord)) {
109
+ p.review = reviewGuitarPosition(p, analysis, {
110
+ level: options.level, origin: "search", dbPositionRejected: true,
111
+ });
112
+ }
113
+ return p;
97
114
  }
98
115
  //# sourceMappingURL=guitarPosition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guitarPosition.js","sourceRoot":"","sources":["../src/guitarPosition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guitarPosition.js","sourceRoot":"","sources":["../src/guitarPosition.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { bassShapeFor, violinShapeFor, violinCoverage } from "./generatedShapes.
18
18
  export { EXPERIENCE_LADDER, levelForFacts, levelForTop3, selectForExperience, selectForResult, } from "./experience.js";
19
19
  export type { ExperienceLevel, ExperienceQuery, ExperienceSelection, } from "./experience.js";
20
20
  export { generateGuitarVoicings, analyzeChordTones, positionSpellsChord, fingeringFor, VOICING_RULES, } from "./voicingGenerator.js";
21
- export type { GeneratedPosition, GenerateOptions, ChordTone, ChordToneAnalysis, Fingering, ToneRole, VoicingRule, } from "./voicingGenerator.js";
21
+ export type { GeneratedPosition, GenerateOptions, ToneOptions, ChordTone, ChordToneAnalysis, Fingering, ToneRole, VoicingRule, } from "./voicingGenerator.js";
22
22
  export { guitarPositionFor, guitarLibraryPositionsFor, chordsDbSuffixFor } from "./guitarPosition.js";
23
23
  export type { GuitarPosition, LibraryPosition, SpelledChord } from "./guitarPosition.js";
24
+ export { reviewGuitarPosition } from "./voicingReview.js";
25
+ export type { GuitarReview, ReasonCode, TeachingLevel, ReviewOptions } from "./voicingReview.js";
package/dist/index.js CHANGED
@@ -15,4 +15,5 @@ export { bassShapeFor, violinShapeFor, violinCoverage } from "./generatedShapes.
15
15
  export { EXPERIENCE_LADDER, levelForFacts, levelForTop3, selectForExperience, selectForResult, } from "./experience.js";
16
16
  export { generateGuitarVoicings, analyzeChordTones, positionSpellsChord, fingeringFor, VOICING_RULES, } from "./voicingGenerator.js";
17
17
  export { guitarPositionFor, guitarLibraryPositionsFor, chordsDbSuffixFor } from "./guitarPosition.js";
18
+ export { reviewGuitarPosition } from "./voicingReview.js";
18
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,yCAAyC;AAEzC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASlE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,aAAa,GACd,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,yCAAyC;AAEzC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASlE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,aAAa,GACd,MAAM,uBAAuB,CAAC;AAY/B,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -72,7 +72,15 @@ export const INSTRUMENTS = {
72
72
  */
73
73
  export function dbPositionToChord(pos, stringCount, title) {
74
74
  const fingers = [];
75
- const barreFrets = new Set(pos.barres);
75
+ const barreContacts = pos.barres.map(fret => {
76
+ const atFret = pos.frets.flatMap((f, i) => f === fret ? [i] : []);
77
+ const repeated = atFret.find(i => pos.fingers[i] > 0 &&
78
+ atFret.filter(j => pos.fingers[j] === pos.fingers[i]).length > 1);
79
+ // A mini-barre can share a fret with another finger. Older database
80
+ // entries without finger labels retain their fret-based bounds.
81
+ return repeated === undefined ? atFret : atFret.filter(i => pos.fingers[i] === pos.fingers[repeated]);
82
+ });
83
+ const covered = new Set(barreContacts.flat());
76
84
  pos.frets.forEach((fret, dbIdx) => {
77
85
  // chords-db lists strings low→high; svguitar numbers strings high→low.
78
86
  const stringNum = stringCount - dbIdx;
@@ -85,16 +93,14 @@ export function dbPositionToChord(pos, stringCount, title) {
85
93
  return;
86
94
  }
87
95
  // Skip strings covered by a barre — the barre draws them.
88
- if (barreFrets.has(fret))
96
+ if (covered.has(dbIdx))
89
97
  return;
90
98
  const fingerNum = pos.fingers[dbIdx];
91
99
  const text = fingerNum && fingerNum > 0 ? String(fingerNum) : undefined;
92
100
  fingers.push(text ? [stringNum, fret, text] : [stringNum, fret]);
93
101
  });
94
- const barres = pos.barres.map((fret) => {
95
- const playingIdxs = pos.frets
96
- .map((f, i) => (f === fret ? i : -1))
97
- .filter((i) => i >= 0);
102
+ const barres = pos.barres.map((fret, index) => {
103
+ const playingIdxs = barreContacts[index];
98
104
  const stringNums = playingIdxs.map((i) => stringCount - i);
99
105
  const fromString = Math.max(...stringNums);
100
106
  const toString = Math.min(...stringNums);
@@ -1 +1 @@
1
- {"version":3,"file":"instruments.js","sourceRoot":"","sources":["../src/instruments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instruments.js","sourceRoot":"","sources":["../src/instruments.ts"],"names":[],"mappings":"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"}
@@ -1,61 +1,4 @@
1
- /**
2
- * Playable six-string voicings for chords chords-db has no shape for.
3
- *
4
- * chords-db stays the authority wherever it has an entry (see
5
- * guitarPosition.ts). This fills the gaps — 13(#11,b9), maj9(#11,#5), slash
6
- * chords over arbitrary basses — with shapes that obey the same physical rules
7
- * a teacher would check, and flags every one `generated: true` so it can be
8
- * reviewed before it is trusted.
9
- *
10
- * Output is a chords-db position (window-relative frets, baseFret, fingers,
11
- * barres), so it renders through `dbPositionToChord` like any other shape.
12
- *
13
- * ── Which tones must sound (VOICING_RULES) ────────────────────────────────
14
- *
15
- * Degrees are named by LETTER distance from the root, not by semitones, so a
16
- * spelled chord says what it means: D# over C is #9, Eb is b3; F# is #11, Gb
17
- * is b5; G# is #5, Ab is b13. Each tone then gets a role:
18
- *
19
- * required must sound
20
- * preferred should sound; dropping it costs heavily and is reported
21
- * optional may be dropped by standard practice; reported in `omitted`
22
- * excluded must NOT sound (it clashes, by convention)
23
- *
24
- * | id | when | effect |
25
- * |------------------------|--------------------------------------------|---------------------------------|
26
- * | root | always (no catalogue type is rootless) | 1 required |
27
- * | third | a 3rd is spelled | 3 / b3 required |
28
- * | sus | no 3rd; a 2nd or 4th is spelled | 2 / 4 required (replaces the 3rd) |
29
- * | seventh | a 7th is spelled (7, b7, bb7) | required |
30
- * | sixth | 6 with no 7th (6, m6, 6/9) | 6 required |
31
- * | add-tension | 9 / 11 with no 7th (add9, m(add9), 6/9) | required |
32
- * | altered | b9 #9 #11 b5 #5 b13 | required, always |
33
- * | omit-unaltered-5th | perfect 5th in a chord of 4+ tones | 5 optional |
34
- * | ninth-under-11-or-13 | natural 9 with a 7th and an 11, #11 or 13 | 9 optional |
35
- * | eleventh-under-13 | natural 11 with a 7th and a 13 | 11 optional; excluded against a major 3rd |
36
- * | thirteenth | 13 / b13 with a 7th | required |
37
- * | dominant-11-drops-3 | major 3rd + b7 + natural 11 | 3 excluded (b9 clash with 11) |
38
- * | minor-11-prefers-b3 | minor 3rd + b7 + natural 11 | b3 preferred, not required |
39
- * | slash-bass | a bass is given | bass required and lowest; a bass outside the chord is not doubled |
40
- *
41
- * 13ths therefore always keep 1 3 b7 13; 11ths keep 1 b7 11.
42
- *
43
- * ── What a hand can play ──────────────────────────────────────────────────
44
- *
45
- * - at most 4 fretting fingers; a barre is one finger, only at the lowest
46
- * fretted fret, across strings that are all fretted at or above it;
47
- * fretted strings below a partial barre sit at most one fret above it
48
- * (x32233 yes, 858555 no)
49
- * - stretch: highest − lowest fretted fret ≤ 3 (a 4-fret box), ≤ 4 when the
50
- * lowest fretted fret is above 5
51
- * - at least 3 sounding strings
52
- * - the lowest sounding string carries the bass (root, or the slash bass),
53
- * and it is the lowest pitch
54
- * - interior mutes: only one, directly above a bass on string 6 or 5 (the
55
- * jazz "root, skip, shell" pattern, e.g. 8x89(10)x); anything else is a
56
- * pick-hand problem
57
- * - open strings only when they are chord tones (every sounding note must be)
58
- */
1
+ import type { GuitarReview, TeachingLevel } from "./voicingReview.js";
59
2
  import type { ChordsDbPosition } from "./instruments.js";
60
3
  export type ToneRole = "required" | "preferred" | "optional" | "excluded";
61
4
  export interface ChordTone {
@@ -67,10 +10,13 @@ export interface ChordTone {
67
10
  }
68
11
  export interface ChordToneAnalysis {
69
12
  tones: ChordTone[];
70
- /** Pitch class that must be lowest. */
13
+ /** Written root/slash bass; rootless policy may permit guide-tone basses. */
71
14
  bassPc: number;
72
15
  /** VOICING_RULES ids that applied. */
73
16
  rules: string[];
17
+ /** Permitted lowest pitch classes; rootless shapes are further checked at evaluation. */
18
+ bassPcs: number[];
19
+ level: TeachingLevel;
74
20
  }
75
21
  export interface VoicingRule {
76
22
  id: string;
@@ -86,8 +32,16 @@ export interface GeneratedPosition extends ChordsDbPosition {
86
32
  omitted: string[];
87
33
  /** Lower is better; results are sorted ascending. */
88
34
  score: number;
35
+ rootless: boolean;
36
+ review: GuitarReview;
37
+ }
38
+ export interface ToneOptions {
39
+ /** Default 2. Only level 3 permits root omissions. */
40
+ level?: TeachingLevel;
41
+ /** Explicit comping context: permit root omission in 5+-tone chords at level 3. */
42
+ comping?: boolean;
89
43
  }
90
- export interface GenerateOptions {
44
+ export interface GenerateOptions extends ToneOptions {
91
45
  /** Chord root; defaults to pitchClasses[0]. */
92
46
  root?: string;
93
47
  /** Slash bass; defaults to the root. */
@@ -104,7 +58,7 @@ export interface GenerateOptions {
104
58
  * @param notes - chord tones, spelled (the root may or may not be included)
105
59
  * @param bass - slash bass, spelled; omit for root position
106
60
  */
107
- export declare function analyzeChordTones(root: string, notes: string[], bass?: string): ChordToneAnalysis;
61
+ export declare function analyzeChordTones(root: string, notes: string[], bass?: string, options?: ToneOptions): ChordToneAnalysis;
108
62
  export interface Fingering {
109
63
  /** Finger number per string, low to high (0 = none). */
110
64
  fingers: number[];
@@ -115,8 +69,8 @@ export interface Fingering {
115
69
  }
116
70
  /**
117
71
  * Whether a hand can hold these frets, and with which fingers — the generator's
118
- * "What a hand can play" rules (stretch, at most four fingers, one barre at
119
- * the lowest fret) applied to any shape, so a shape moved up the neck can be
72
+ * "What a hand can play" rules (stretch, at most four fingers, one lowest-fret
73
+ * index barre or a two-string mini-barre above it) applied to any shape, so a shape moved up the neck can be
120
74
  * checked by the same rule that produced it. Null when it cannot be held.
121
75
  *
122
76
  * Instrument-neutral: strings are listed low to high, as `abs` indices.
@@ -134,6 +88,7 @@ export declare function generateGuitarVoicings(pitchClasses: string[], options?:
134
88
  /**
135
89
  * True when a position (any source) sounds the chord under the rule table:
136
90
  * every required tone, nothing outside the chord or excluded, and the bass
137
- * lowest. chords-db positions are checked with this before they are trusted.
91
+ * lowest, plus the same register/doubling safety limits as generated grips.
92
+ * chords-db positions are checked with this before they are trusted.
138
93
  */
139
94
  export declare function positionSpellsChord(pos: ChordsDbPosition, analysis: ChordToneAnalysis): boolean;
@@ -1,19 +1,81 @@
1
+ /**
2
+ * Playable six-string voicings for chords chords-db has no shape for.
3
+ *
4
+ * chords-db stays the authority wherever it has an entry (see
5
+ * guitarPosition.ts). This fills the gaps — 13(#11,b9), maj9(#11,#5), slash
6
+ * chords over arbitrary basses — with shapes that obey the same physical rules
7
+ * a teacher would check, and flags every one `generated: true` so it can be
8
+ * reviewed before it is trusted.
9
+ *
10
+ * Output is a chords-db position (window-relative frets, baseFret, fingers,
11
+ * barres), so it renders through `dbPositionToChord` like any other shape.
12
+ *
13
+ * ── Which tones must sound (VOICING_RULES) ────────────────────────────────
14
+ *
15
+ * Degrees are named by LETTER distance from the root, not by semitones, so a
16
+ * spelled chord says what it means: D# over C is #9, Eb is b3; F# is #11, Gb
17
+ * is b5; G# is #5, Ab is b13. Each tone then gets a role:
18
+ *
19
+ * required must sound
20
+ * preferred should sound; dropping it costs heavily and is reported
21
+ * optional may be dropped by standard practice; reported in `omitted`
22
+ * excluded must NOT sound (it clashes, by convention)
23
+ *
24
+ * | id | when | effect |
25
+ * |------------------------|--------------------------------------------|---------------------------------|
26
+ * | root | always (level 3 dense/comping chords may omit root) | 1 required |
27
+ * | third | a 3rd is spelled | 3 / b3 required |
28
+ * | sus | no 3rd; a 2nd or 4th is spelled | 2 / 4 required (replaces the 3rd) |
29
+ * | seventh | a 7th is spelled (7, b7, bb7) | required |
30
+ * | sixth | 6 with no 7th (6, m6, 6/9) | 6 required |
31
+ * | add-tension | 9 / 11 with no 7th (add9, m(add9), 6/9) | required |
32
+ * | altered | b9 #9 #11 b5 #5 b13 | required, always |
33
+ * | omit-unaltered-5th | perfect 5th in a chord of 4+ tones, except 6/m6 | 5 optional |
34
+ * | ninth-under-11-or-13 | natural 9 with a 7th and a natural 11 or 13 | 9 optional |
35
+ * | eleventh-under-13 | natural 11 with a 7th and a 13 | 11 optional; excluded against a major 3rd |
36
+ * | thirteenth | 13 / b13 with a 7th | required |
37
+ * | dominant-11-drops-3 | major 3rd + b7 + natural 11 | 3 excluded (b9 clash with 11) |
38
+ * | minor-11-prefers-b3 | plain m11 (not m11(b5)) | b3 preferred, not required |
39
+ * | slash-bass | a bass is given | bass required and lowest; a bass outside the chord is not doubled |
40
+ *
41
+ * 13ths keep 3 b7 13; only explicit level-3 policy may omit the root.
42
+ * 11ths keep 1 b7 11.
43
+ *
44
+ * ── What a hand can play ──────────────────────────────────────────────────
45
+ *
46
+ * - at most 4 fretting fingers; a barre is one finger at the lowest
47
+ * fretted fret, or a two-string middle/ring mini-barre above it;
48
+ * every string inside a barre is fretted at or above it;
49
+ * fretted strings below a partial barre sit at most one fret above it
50
+ * (x32233 yes, 858555 no)
51
+ * - stretch: highest − lowest fretted fret ≤ 3 (a 4-fret box), ≤ 4 when the
52
+ * lowest fretted fret is above 5
53
+ * - at least 3 sounding strings
54
+ * - the lowest sounding string carries the bass (root, or the slash bass),
55
+ * and it is the lowest pitch (rootless level 3 permits a guide-tone bass)
56
+ * - interior mutes: only one, directly above a bass on string 6 or 5 (the
57
+ * jazz "root, skip, shell" pattern, e.g. 8x89(10)x); anything else is a
58
+ * pick-hand problem
59
+ * - open strings only when they are chord tones (every sounding note must be)
60
+ */
61
+ import { reviewGuitarPosition, voicingSignals } from "./voicingReview.js";
1
62
  import { INSTRUMENTS } from "./instruments.js";
2
63
  /** The rule table above, as data — `rule` on every GeneratedPosition cites these ids. */
3
64
  export const VOICING_RULES = [
4
- { id: "root", description: "1 required (no catalogue type is rootless)" },
65
+ { id: "root", description: "1 required except explicit level-3 rootless policy" },
66
+ { id: "rootless-level-3", description: "level 3: dense/comping chords without a written bass may omit root; guide tone lowest, at least A2 (major 7th at least C3)" },
5
67
  { id: "third", description: "3 / b3 required" },
6
68
  { id: "sus", description: "no 3rd: the 2 or 4 replaces it and is required" },
7
69
  { id: "seventh", description: "7, b7 or bb7 required" },
8
70
  { id: "sixth", description: "6 with no 7th is required" },
9
71
  { id: "add-tension", description: "9 or 11 with no 7th (add chords) is required" },
10
72
  { id: "altered", description: "b9, #9, #11, b5, #5, b13 are always required" },
11
- { id: "omit-unaltered-5th", description: "perfect 5th optional in chords of 4+ tones" },
12
- { id: "ninth-under-11-or-13", description: "natural 9 optional when an 11, #11 or 13 sits above a 7th" },
73
+ { id: "omit-unaltered-5th", description: "perfect 5th optional in chords of 4+ tones, except 6/m6 and 6/9" },
74
+ { id: "ninth-under-11-or-13", description: "natural 9 optional only under natural 11 or 13 above a 7th" },
13
75
  { id: "eleventh-under-13", description: "natural 11 optional in a 13th chord; excluded against a major 3rd" },
14
76
  { id: "thirteenth", description: "13 / b13 with a 7th is required" },
15
77
  { id: "dominant-11-drops-3", description: "major 3rd excluded against b7 + natural 11" },
16
- { id: "minor-11-prefers-b3", description: "b3 preferred (droppable at a cost) against b7 + natural 11" },
78
+ { id: "minor-11-prefers-b3", description: "b3 preferred in plain m11; always required with a diminished fifth" },
17
79
  { id: "slash-bass", description: "bass required and lowest; a non-chord bass is not doubled" },
18
80
  ];
19
81
  // ── spelling ────────────────────────────────────────────────────────────────
@@ -61,7 +123,7 @@ function rawDegree(root, note) {
61
123
  * @param notes - chord tones, spelled (the root may or may not be included)
62
124
  * @param bass - slash bass, spelled; omit for root position
63
125
  */
64
- export function analyzeChordTones(root, notes, bass) {
126
+ export function analyzeChordTones(root, notes, bass, options = {}) {
65
127
  const r = parseNote(root);
66
128
  const seen = new Set();
67
129
  const raw = [];
@@ -80,7 +142,6 @@ export function analyzeChordTones(root, notes, bass) {
80
142
  const hasSeventh = has(6, -1) || has(6, 0); // b7 / maj7 — dim7's bb7 acts as a 6
81
143
  const hasDim7 = has(6, -2);
82
144
  const natural11 = has(3, 0) && hasThird;
83
- const any11 = has(3) && hasThird;
84
145
  const has13 = hasSeventh && has(5);
85
146
  const rules = new Set(["root"]);
86
147
  const tones = raw.map((t) => {
@@ -96,7 +157,7 @@ export function analyzeChordTones(root, notes, bass) {
96
157
  const degree = `${acc}3`;
97
158
  if (majorThird && t.alter === 0 && has(6, -1) && natural11 && !has13)
98
159
  return tone(degree, "excluded", "dominant-11-drops-3");
99
- if (minorThird && t.alter === -1 && hasSeventh && natural11 && !has13)
160
+ if (minorThird && t.alter === -1 && hasSeventh && natural11 && !has13 && !has(4, -1))
100
161
  return tone(degree, "preferred", "minor-11-prefers-b3");
101
162
  return tone(degree, "required", "third");
102
163
  }
@@ -107,7 +168,7 @@ export function analyzeChordTones(root, notes, bass) {
107
168
  return tone("2", "required", "sus");
108
169
  if (!hasSeventh)
109
170
  return tone("9", "required", "add-tension");
110
- if (has13 || any11)
171
+ if (has13 || natural11)
111
172
  return tone("9", "optional", "ninth-under-11-or-13");
112
173
  return tone("9", "required", "seventh");
113
174
  }
@@ -127,6 +188,8 @@ export function analyzeChordTones(root, notes, bass) {
127
188
  case 4: {
128
189
  if (t.alter !== 0)
129
190
  return tone(`${acc}5`, "required", "altered");
191
+ if (!hasSeventh && has(5, 0))
192
+ return tone("5", "required", "sixth");
130
193
  if (raw.length >= 4)
131
194
  return tone("5", "optional", "omit-unaltered-5th");
132
195
  return tone("5", "required");
@@ -159,13 +222,25 @@ export function analyzeChordTones(root, notes, bass) {
159
222
  else
160
223
  tones.push({ note: bass, pc: b.pc, degree: `bass ${bass}`, role: "required" });
161
224
  }
162
- return { tones, bassPc, rules: VOICING_RULES.map((v) => v.id).filter((id) => rules.has(id)) };
225
+ const level = options.level ?? 2;
226
+ const rootTone = tones.find(t => t.degree === "1");
227
+ const guides = tones.filter(t => /^(b?3|b?b?7)$/.test(t.degree) && t.role !== "excluded");
228
+ const dense = tones.filter(t => t.role === "required").length >= 6;
229
+ if (level === 3 && guides.length >= 2 &&
230
+ (dense || (tones.length >= 5 && options.comping)) && bass === undefined) {
231
+ rootTone.role = "optional";
232
+ rules.add("rootless-level-3");
233
+ for (const guide of guides)
234
+ guide.role = "required";
235
+ }
236
+ const bassPcs = rootTone.role === "optional" ? [bassPc, ...guides.map(t => t.pc)] : [bassPc];
237
+ return { tones, bassPc, bassPcs, level, rules: VOICING_RULES.map((v) => v.id).filter((id) => rules.has(id)) };
163
238
  }
164
239
  /**
165
240
  * Fingers for absolute frets, or null if a hand cannot hold it. Individual
166
241
  * fingers when four suffice; otherwise one barre at the lowest fret.
167
242
  */
168
- function fingerFor(abs) {
243
+ function lowestBarreFingering(abs) {
169
244
  const fretted = abs.map((f, i) => ({ f, i })).filter((x) => x.f > 0);
170
245
  if (fretted.length === 0)
171
246
  return { fingers: abs.map(() => 0), barre: null, count: 0 };
@@ -212,10 +287,46 @@ function fingerFor(abs) {
212
287
  });
213
288
  return { fingers, barre, count: groups.length };
214
289
  }
290
+ /** Retain the usual index-barre assignment where possible. A two-string
291
+ * middle/ring-finger barre can also share a fret above the index finger,
292
+ * without flattening across intervening open or lower-fretted strings. */
293
+ function fingerFor(abs) {
294
+ const usual = lowestBarreFingering(abs);
295
+ if (usual)
296
+ return usual;
297
+ const fretted = abs.map((f, i) => ({ f, i })).filter(x => x.f > 0);
298
+ const lo = Math.min(...fretted.map(x => x.f));
299
+ for (let from = 0; from < abs.length - 1; from++) {
300
+ const fret = abs[from];
301
+ if (fret <= lo || abs[from + 1] !== fret)
302
+ continue;
303
+ const groups = [
304
+ { fret, strings: [from, from + 1] },
305
+ ...fretted.filter(x => x.i !== from && x.i !== from + 1).map(x => ({ fret: x.f, strings: [x.i] })),
306
+ ].sort((a, b) => a.fret - b.fret || a.strings[0] - b.strings[0]);
307
+ if (groups.length > 4)
308
+ continue;
309
+ const fingers = abs.map(() => 0);
310
+ let prev = 0;
311
+ for (let k = 0; k < groups.length; k++) {
312
+ const g = groups[k];
313
+ const desired = Math.min(4, 1 + g.fret - lo);
314
+ const finger = Math.max(prev + 1, Math.min(desired, 4 - (groups.length - 1 - k)));
315
+ for (const i of g.strings)
316
+ fingers[i] = finger;
317
+ prev = finger;
318
+ }
319
+ // Non-index mini-barres need the remaining fingers free above them.
320
+ if (fingers[from] > 3)
321
+ continue;
322
+ return { fingers, barre: fret, count: groups.length };
323
+ }
324
+ return null;
325
+ }
215
326
  /**
216
327
  * Whether a hand can hold these frets, and with which fingers — the generator's
217
- * "What a hand can play" rules (stretch, at most four fingers, one barre at
218
- * the lowest fret) applied to any shape, so a shape moved up the neck can be
328
+ * "What a hand can play" rules (stretch, at most four fingers, one lowest-fret
329
+ * index barre or a two-string mini-barre above it) applied to any shape, so a shape moved up the neck can be
219
330
  * checked by the same rule that produced it. Null when it cannot be held.
220
331
  *
221
332
  * Instrument-neutral: strings are listed low to high, as `abs` indices.
@@ -234,7 +345,7 @@ export function fingeringFor(abs) {
234
345
  // ── search ──────────────────────────────────────────────────────────────────
235
346
  const OPEN_MIDI = INSTRUMENTS.guitar.openMidi;
236
347
  const STRINGS = 6;
237
- const OMIT_COST = { required: 0, preferred: 12, optional: 1, excluded: 0 };
348
+ const OMIT_COST = { required: 0, preferred: 12, optional: 4, excluded: 0 };
238
349
  function score(abs, fingering, analysis, omittedCost) {
239
350
  const fretted = abs.filter((f) => f > 0);
240
351
  const played = abs.filter((f) => f >= 0);
@@ -252,7 +363,9 @@ function score(abs, fingering, analysis, omittedCost) {
252
363
  if (n < 2)
253
364
  continue;
254
365
  const degree = analysis.tones.find((t) => t.pc === p)?.degree ?? "";
255
- const cost = p === analysis.bassPc || degree === "1" || degree === "5" ? 0 : /^b?3$/.test(degree) ? 0.5 : 2;
366
+ const repeatedSlashColour = analysis.rules.includes("slash-bass") && p === analysis.bassPc &&
367
+ !/^(1|b?3|b?b?7)$/.test(degree);
368
+ const cost = repeatedSlashColour ? 2.5 : p === analysis.bassPc || degree === "1" || degree === "5" ? 0 : /^b?3$/.test(degree) ? 0.5 : 2;
256
369
  doubling += (n - 1) * cost;
257
370
  }
258
371
  const firstPlayed = abs.findIndex((f) => f >= 0);
@@ -272,22 +385,84 @@ function score(abs, fingering, analysis, omittedCost) {
272
385
  const hasSeventh = analysis.tones.some((t) => /^b?b?7$/.test(t.degree));
273
386
  const shellBonus = analysis.tones.length >= 5 && hasSeventh && midi.length <= 5 && counts.size === midi.length ? 3 : 0;
274
387
  // Low-interval limit: a second directly above the bass is mud.
275
- const lowSecond = sorted.length >= 2 && sorted[1] - sorted[0] <= 2 ? 4 : 0;
388
+ const signals = voicingSignals(abs, fingering.fingers, analysis);
389
+ // Low thirds cost less: open G7 is idiomatic. Semitones/minor ninths
390
+ // below their register limits need much stronger separation.
391
+ const lowSecond = 12 * signals.lowIntervals + (!analysis.rules.includes("slash-bass") && analysis.tones.length >= 5 ? 100 : 3) * signals.lowThirds + 100 * signals.lowMinorNinths;
392
+ // Semitone clusters, doubled dominant thirds and adjacent minor ninths
393
+ // take precedence over position comfort, including for fretted notes.
394
+ let musicalRisk = 0;
395
+ const dominantThird = analysis.tones.find(t => t.degree === "3");
396
+ if (!analysis.rules.includes("slash-bass") && analysis.tones.length >= 5 && dominantThird && analysis.tones.some(t => t.degree === "b7"))
397
+ musicalRisk += 100 * Math.max(0, (counts.get(dominantThird.pc) ?? 0) - 1);
398
+ for (let i = 0; i < sorted.length - 1; i++) {
399
+ const gap = sorted[i + 1] - sorted[i];
400
+ if (gap === 1 && sorted[i] < 52)
401
+ musicalRisk += 100;
402
+ if (gap >= 13 && gap % 12 === 1 && !analysis.rules.includes("slash-bass"))
403
+ musicalRisk += 100;
404
+ }
405
+ const barreFinger = fingering.barre === null ? 0 : fingering.fingers.find((f, i) => f > 0 && abs[i] === fingering.barre && fingering.fingers.filter(v => v === f).length > 1) ?? 0;
406
+ const miniBarreCost = barreFinger > 1 ? 40 : 0;
407
+ const bassRegister = Math.max(0, firstPlayed - 1) * (analysis.rules.includes("slash-bass") ? 12 : 6);
408
+ const minorNinth = 4 * signals.minorNinths;
409
+ const spacing = 20 * signals.fingerSpacing;
276
410
  // Open strings ringing under a hand that has moved up the neck.
277
- const openAway = opens * Math.max(0, lo - 2) * 0.8;
411
+ const openAway = opens * Math.max(0, lo - 3) * 3 + (opens && lo >= 5 ? 30 : 0);
278
412
  return (2 * fingering.count +
279
413
  1.5 * (hi - lo) +
280
- 0.4 * Math.max(0, lo - 1) +
281
- (fingering.barre !== null ? 3 : 0) +
414
+ 0.9 * Math.max(0, lo - 1) +
415
+ 1.5 * Math.max(0, hi - 9) ** 2 +
416
+ 4 * Math.max(0, lo - 9) +
417
+ (fingering.barre !== null ? 2 + 0.75 * signals.barreStrings : 0) +
282
418
  omittedCost +
283
419
  doubling +
284
- 2.5 * interiorMutes +
285
- 2.5 * (STRINGS - played.length) +
420
+ 4 * interiorMutes +
421
+ (hasSeventh ? Math.max(0, 4 - played.length) : 2.5 * (STRINGS - played.length)) +
286
422
  openAway +
287
- lowSecond -
423
+ lowSecond +
424
+ musicalRisk +
425
+ miniBarreCost +
426
+ bassRegister +
427
+ minorNinth +
428
+ spacing +
429
+ 2 * signals.unisons +
430
+ 3 * midi.filter((m, i) => i > 0 && m < midi[i - 1]).length -
431
+ (lo <= 3 ? opens : 0) -
288
432
  guideBonus -
289
433
  shellBonus);
290
434
  }
435
+ /** Register and doubling constraints apply equally to search and library grips. */
436
+ function registerSafe(abs, analysis) {
437
+ const voices = abs.flatMap((f, i) => f < 0 ? [] : [{ midi: OPEN_MIDI[i] + f, open: f === 0 }]);
438
+ if (!voices.length)
439
+ return false;
440
+ const root = analysis.tones.find(t => t.degree === "1");
441
+ const bass = Math.min(...voices.map(v => v.midi));
442
+ if (!voices.some(v => v.midi % 12 === root.pc)) {
443
+ if (bass < 45)
444
+ return false;
445
+ if (bass < 48 && analysis.tones.some(t => t.degree === "7" && t.pc === bass % 12))
446
+ return false;
447
+ }
448
+ const third = analysis.tones.find(t => t.degree === "3");
449
+ const dominant = third && analysis.tones.some(t => t.degree === "b7");
450
+ for (let i = 0; i < voices.length; i++) {
451
+ for (let j = i + 1; j < voices.length; j++) {
452
+ const a = voices[i], b = voices[j];
453
+ const interval = Math.abs(a.midi - b.midi);
454
+ if ((a.open || b.open) && Math.min(a.midi, b.midi) < 52 && (interval === 1 || interval === 13))
455
+ return false;
456
+ if ((a.open || b.open) && interval === 0 && dominant && a.midi % 12 === third.pc)
457
+ return false;
458
+ }
459
+ }
460
+ for (const tone of analysis.tones.filter(t => /^(b|#)?13$/.test(t.degree))) {
461
+ if (voices.filter(v => v.midi % 12 === tone.pc).length > 1)
462
+ return false;
463
+ }
464
+ return true;
465
+ }
291
466
  /**
292
467
  * Ranked playable voicings, best first. Empty when nothing satisfies the
293
468
  * constraints — this never relaxes a hard rule to find something.
@@ -298,7 +473,7 @@ export function generateGuitarVoicings(pitchClasses, options = {}) {
298
473
  const root = options.root ?? pitchClasses[0];
299
474
  const limit = options.limit ?? 8;
300
475
  const maxFret = options.maxFret ?? 15;
301
- const analysis = analyzeChordTones(root, pitchClasses, options.bass);
476
+ const analysis = analyzeChordTones(root, pitchClasses, options.bass, options);
302
477
  const allowed = new Set(analysis.tones.filter((t) => t.role !== "excluded").map((t) => t.pc));
303
478
  const required = analysis.tones.filter((t) => t.role === "required").map((t) => t.pc);
304
479
  const bassIsChordTone = analysis.tones.some((t) => t.pc === analysis.bassPc && !t.degree.startsWith("bass"));
@@ -327,7 +502,7 @@ export function generateGuitarVoicings(pitchClasses, options = {}) {
327
502
  return null;
328
503
  const midi = played.map((i) => OPEN_MIDI[i] + abs[i]);
329
504
  const bassMidi = midi[0];
330
- if (bassMidi % 12 !== analysis.bassPc)
505
+ if (!analysis.bassPcs.includes(bassMidi % 12))
331
506
  return null;
332
507
  for (let k = 1; k < midi.length; k++)
333
508
  if (midi[k] <= bassMidi)
@@ -338,11 +513,18 @@ export function generateGuitarVoicings(pitchClasses, options = {}) {
338
513
  for (const p of required)
339
514
  if (!pcs.has(p))
340
515
  return null;
516
+ const rootTone = analysis.tones.find(t => t.degree === "1");
517
+ // A rooted grip retains the written root/slash bass. Only a genuinely
518
+ // rootless grip may start on a guide tone.
519
+ if (pcs.has(rootTone.pc) && bassMidi % 12 !== analysis.bassPc)
520
+ return null;
521
+ if (!registerSafe(abs, analysis))
522
+ return null;
341
523
  const fingering = fingeringFor(abs);
342
524
  if (!fingering)
343
525
  return null;
344
526
  const missing = analysis.tones.filter((t) => (t.role === "optional" || t.role === "preferred") && !pcs.has(t.pc));
345
- const omittedCost = missing.reduce((s, t) => s + OMIT_COST[t.role], 0);
527
+ const omittedCost = missing.reduce((s, t) => s + (t.degree === "1" ? 3 : t.degree === "5" ? 6 : OMIT_COST[t.role]), 0);
346
528
  return {
347
529
  abs,
348
530
  fingering,
@@ -390,7 +572,7 @@ export function generateGuitarVoicings(pitchClasses, options = {}) {
390
572
  continue;
391
573
  const m = OPEN_MIDI[s] + f;
392
574
  if (phase === "before") {
393
- if (m % 12 !== analysis.bassPc)
575
+ if (!analysis.bassPcs.includes(m % 12))
394
576
  continue;
395
577
  walk(s + 1, "sounding", skipped, m);
396
578
  }
@@ -422,20 +604,33 @@ function toPosition(c, analysis) {
422
604
  rule: analysis.rules.join("+"),
423
605
  omitted: c.omitted,
424
606
  score: Math.round(c.score * 100) / 100,
607
+ rootless: c.omitted.includes("1"),
608
+ review: reviewGuitarPosition({
609
+ frets: c.abs, baseFret: 1, fingers: c.fingering.fingers,
610
+ barres: c.fingering.barre === null ? [] : [c.fingering.barre],
611
+ }, analysis, { level: analysis.level }),
425
612
  };
426
613
  }
427
614
  /**
428
615
  * True when a position (any source) sounds the chord under the rule table:
429
616
  * every required tone, nothing outside the chord or excluded, and the bass
430
- * lowest. chords-db positions are checked with this before they are trusted.
617
+ * lowest, plus the same register/doubling safety limits as generated grips.
618
+ * chords-db positions are checked with this before they are trusted.
431
619
  */
432
620
  export function positionSpellsChord(pos, analysis) {
621
+ const abs = pos.frets.map(f => f <= 0 ? f : f + pos.baseFret - 1);
622
+ if (!registerSafe(abs, analysis))
623
+ return false;
433
624
  const midi = pos.frets
434
625
  .map((f, i) => (f < 0 ? -1 : f === 0 ? OPEN_MIDI[i] : OPEN_MIDI[i] + pos.baseFret + f - 1))
435
626
  .filter((m) => m >= 0);
436
627
  if (midi.length === 0)
437
628
  return false;
438
- if (Math.min(...midi) % 12 !== analysis.bassPc)
629
+ const lowestPc = Math.min(...midi) % 12;
630
+ if (!analysis.bassPcs.includes(lowestPc))
631
+ return false;
632
+ const rootPc = analysis.tones.find(t => t.degree === "1").pc;
633
+ if (midi.some(m => m % 12 === rootPc) && lowestPc !== analysis.bassPc)
439
634
  return false;
440
635
  const allowed = new Set(analysis.tones.filter((t) => t.role !== "excluded").map((t) => t.pc));
441
636
  const pcs = new Set(midi.map((m) => m % 12));
@@ -1 +1 @@
1
- {"version":3,"file":"voicingGenerator.js","sourceRoot":"","sources":["../src/voicingGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voicingGenerator.js","sourceRoot":"","sources":["../src/voicingGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** Deterministic musical/hand signals shared by ranking and review metadata. */
2
+ import type { ChordsDbPosition } from "./instruments.js";
3
+ import type { ChordToneAnalysis } from "./voicingGenerator.js";
4
+ export type TeachingLevel = 0 | 1 | 2 | 3;
5
+ export type ReasonCode = `omits:${string}` | "rootless" | "bass-not-low" | "high-position" | "above-12" | "open-under-high-hand" | "low-interval" | "b9-clash" | "unison" | "doubled-tension" | "barre-5+" | "span-4" | "three-strings" | "finger-spacing" | "db-position-rejected";
6
+ export interface GuitarReview {
7
+ confidence: number;
8
+ origin: "chords-db" | `template:${string}` | "search";
9
+ level: TeachingLevel;
10
+ reasons: ReasonCode[];
11
+ /** Same chord constraints, level and physical grip = one review, regardless of spelling. */
12
+ reviewKey: string;
13
+ needsReview: boolean;
14
+ }
15
+ export interface ReviewOptions {
16
+ level?: TeachingLevel;
17
+ origin?: GuitarReview["origin"];
18
+ dbPositionRejected?: boolean;
19
+ }
20
+ export declare function voicingSignals(abs: number[], fingers: number[], analysis: ChordToneAnalysis): {
21
+ lo: number;
22
+ hi: number;
23
+ midi: number[];
24
+ counts: Map<number, number>;
25
+ first: number;
26
+ lowIntervals: number;
27
+ lowThirds: number;
28
+ minorNinths: number;
29
+ lowMinorNinths: number;
30
+ unisons: number;
31
+ fingerSpacing: number;
32
+ barreStrings: number;
33
+ doubledTensions: number;
34
+ };
35
+ export declare function reviewGuitarPosition(pos: ChordsDbPosition, analysis: ChordToneAnalysis, options?: ReviewOptions): GuitarReview;
@@ -0,0 +1,90 @@
1
+ import { INSTRUMENTS } from "./instruments.js";
2
+ export function voicingSignals(abs, fingers, analysis) {
3
+ const fretted = abs.filter(f => f > 0);
4
+ const lo = fretted.length ? Math.min(...fretted) : 0;
5
+ const hi = fretted.length ? Math.max(...fretted) : 0;
6
+ const midi = abs.flatMap((f, i) => f < 0 ? [] : [INSTRUMENTS.guitar.openMidi[i] + f]).sort((a, b) => a - b);
7
+ const counts = new Map();
8
+ for (const m of midi)
9
+ counts.set(m % 12, (counts.get(m % 12) ?? 0) + 1);
10
+ let lowIntervals = 0, lowThirds = 0, minorNinths = 0, lowMinorNinths = 0, unisons = 0;
11
+ for (let i = 0; i < midi.length; i++)
12
+ for (let j = i + 1; j < midi.length; j++) {
13
+ const gap = midi[j] - midi[i];
14
+ if (gap > 0 && gap <= 2 && midi[i] < 52)
15
+ lowIntervals++;
16
+ if ((gap === 3 && midi[i] < 48) || (gap === 4 && midi[i] < 46))
17
+ lowThirds++;
18
+ if (gap === 13) {
19
+ minorNinths++;
20
+ if (midi[i] < 48)
21
+ lowMinorNinths++;
22
+ }
23
+ if (gap === 0)
24
+ unisons++;
25
+ }
26
+ // Conservative reach warning: adjacent fingers far apart laterally, or a
27
+ // fret reach beyond the finger-number gap (one extra fret above position 5).
28
+ let fingerSpacing = 0;
29
+ const used = [...new Set(fingers.filter(f => f > 0))].sort();
30
+ for (const a of used)
31
+ for (const b of used.filter(b => b > a)) {
32
+ const sa = fingers.flatMap((f, i) => f === a ? [i] : []);
33
+ const sb = fingers.flatMap((f, i) => f === b ? [i] : []);
34
+ const delta = abs[sb[0]] - abs[sa[0]];
35
+ const lateral = Math.min(...sa.flatMap(i => sb.map(j => Math.abs(i - j))));
36
+ if (delta > b - a + (lo >= 7 || (lo >= 5 && a === 1) ? 1 : 0) || (b - a === 1 && delta === 0 && lateral >= 4))
37
+ fingerSpacing++;
38
+ }
39
+ const barreStrings = used.reduce((n, f) => {
40
+ const strings = fingers.flatMap((v, i) => v === f ? [i] : []);
41
+ return Math.max(n, strings.length > 1 ? strings[strings.length - 1] - strings[0] + 1 : 0);
42
+ }, 0);
43
+ const doubledTensions = analysis.tones.filter(t => /9|11|13/.test(t.degree)).reduce((n, t) => n + Math.max(0, (counts.get(t.pc) ?? 0) - 1), 0);
44
+ return { lo, hi, midi, counts, first: abs.findIndex(f => f >= 0), lowIntervals, lowThirds, minorNinths, lowMinorNinths, unisons, fingerSpacing, barreStrings, doubledTensions };
45
+ }
46
+ export function reviewGuitarPosition(pos, analysis, options = {}) {
47
+ // Re-reviewing keeps the analysis's level, so one grip has one review identity.
48
+ const level = options.level ?? analysis.level;
49
+ const origin = options.origin ?? "search";
50
+ const abs = pos.frets.map(f => f <= 0 ? f : f + pos.baseFret - 1);
51
+ const s = voicingSignals(abs, pos.fingers, analysis);
52
+ const omitted = analysis.tones.filter(t => t.role !== "excluded" && !s.counts.has(t.pc)).map(t => t.degree);
53
+ const reasons = omitted.map(d => `omits:${d}`);
54
+ if (omitted.includes("1"))
55
+ reasons.push("rootless");
56
+ if (s.first >= 2)
57
+ reasons.push("bass-not-low");
58
+ if (s.lo >= 8)
59
+ reasons.push("high-position");
60
+ if (s.hi > 12)
61
+ reasons.push("above-12");
62
+ if (s.lo >= 5 && abs.includes(0))
63
+ reasons.push("open-under-high-hand");
64
+ if (s.lowIntervals || s.lowThirds || s.lowMinorNinths)
65
+ reasons.push("low-interval");
66
+ if (s.minorNinths)
67
+ reasons.push("b9-clash");
68
+ if (s.unisons)
69
+ reasons.push("unison");
70
+ if (s.doubledTensions)
71
+ reasons.push("doubled-tension");
72
+ if (s.barreStrings >= 5)
73
+ reasons.push("barre-5+");
74
+ if (s.hi - s.lo >= 4)
75
+ reasons.push("span-4");
76
+ if (s.midi.length === 3)
77
+ reasons.push("three-strings");
78
+ if (s.fingerSpacing)
79
+ reasons.push("finger-spacing");
80
+ if (options.dbPositionRejected)
81
+ reasons.push("db-position-rejected");
82
+ // Heuristic attention score, not a probability or a teacher's approval.
83
+ const penalty = reasons.reduce((n, r) => n + (r === "low-interval" || r === "finger-spacing" ? 0.16 : r === "rootless" ? 0.1 : 0.04), 0);
84
+ const confidence = Math.max(0, Math.round(((origin === "search" ? 0.88 : 0.98) - penalty) * 100) / 100);
85
+ const tones = analysis.tones.map(t => `${t.pc}:${t.degree.startsWith("bass ") ? "bass" : t.degree}:${t.role}`).sort().join(";");
86
+ const root = analysis.tones.find(t => t.degree === "1").pc;
87
+ const reviewKey = `guitar:v1:${level}:${root}:${analysis.bassPc}:${tones}:${abs.join(",")}:${pos.fingers.join(",")}:${pos.barres.map(b => b + pos.baseFret - 1).join(",")}`;
88
+ return { confidence, origin, level, reasons, reviewKey, needsReview: reasons.length > 0 || confidence < .8 };
89
+ }
90
+ //# sourceMappingURL=voicingReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voicingReview.js","sourceRoot":"","sources":["../src/voicingReview.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pepperhorn/chordl-guitar",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Guitar/ukulele chord-shape lookup and svguitar diagram data — chords-db backed, with alternate fret positions",
5
5
  "repository": {
6
6
  "type": "git",