@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 +82 -0
- package/dist/guitarPosition.d.ts +5 -3
- package/dist/guitarPosition.js +27 -10
- package/dist/guitarPosition.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/instruments.js +12 -6
- package/dist/instruments.js.map +1 -1
- package/dist/voicingGenerator.d.ts +19 -64
- package/dist/voicingGenerator.js +222 -27
- package/dist/voicingGenerator.js.map +1 -1
- package/dist/voicingReview.d.ts +35 -0
- package/dist/voicingReview.js +90 -0
- package/dist/voicingReview.js.map +1 -0
- package/package.json +1 -1
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`.
|
package/dist/guitarPosition.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ChordsDbPosition } from "./instruments.js";
|
|
2
|
-
import type {
|
|
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;
|
package/dist/guitarPosition.js
CHANGED
|
@@ -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
|
-
|
|
73
|
-
|
|
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) => ({
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;GASG;AACH,OAAO,QAAQ,MAAM,8BAA8B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;
|
|
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;
|
|
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"}
|
package/dist/instruments.js
CHANGED
|
@@ -72,7 +72,15 @@ export const INSTRUMENTS = {
|
|
|
72
72
|
*/
|
|
73
73
|
export function dbPositionToChord(pos, stringCount, title) {
|
|
74
74
|
const fingers = [];
|
|
75
|
-
const
|
|
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 (
|
|
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 =
|
|
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);
|
package/dist/instruments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruments.js","sourceRoot":"","sources":["../src/instruments.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAC,MAAM,WAAW,GAA2C;IACjE,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wCAAwC;QACrD,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACtC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KACnC;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC3B;IACD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,8EAA8E;YAC9E,uCAAuC;QACzC,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACtC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KACnC;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,uEAAuE;YACvE,sEAAsE;YACtE,gEAAgE;QAClE,OAAO,EAAE,CAAC;QACV,wEAAwE;QACxE,0EAA0E;QAC1E,uDAAuD;QACvD,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC3B;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACjC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC/B;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,+EAA+E;YAC/E,2EAA2E;YAC3E,mFAAmF;QACrF,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC3B;CACF,CAAC;AA+BF;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAqB,EACrB,WAAmB,EACnB,KAAc;IAEd,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,
|
|
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
|
-
/**
|
|
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
|
|
119
|
-
*
|
|
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
|
|
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;
|
package/dist/voicingGenerator.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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 ||
|
|
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
|
-
|
|
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
|
|
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
|
|
218
|
-
*
|
|
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:
|
|
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
|
|
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
|
|
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 -
|
|
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.
|
|
281
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA4B/C,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,oDAAoD,EAAE;IACjF,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,4HAA4H,EAAE;IACrK,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gDAAgD,EAAE;IAC5E,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE;IACvD,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IACzD,EAAE,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,8CAA8C,EAAE;IAClF,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,8CAA8C,EAAE;IAC9E,EAAE,EAAE,EAAE,oBAAoB,EAAE,WAAW,EAAE,iEAAiE,EAAE;IAC5G,EAAE,EAAE,EAAE,sBAAsB,EAAE,WAAW,EAAE,4DAA4D,EAAE;IACzG,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,mEAAmE,EAAE;IAC7G,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,iCAAiC,EAAE;IACpE,EAAE,EAAE,EAAE,qBAAqB,EAAE,WAAW,EAAE,4CAA4C,EAAE;IACxF,EAAE,EAAE,EAAE,qBAAqB,EAAE,WAAW,EAAE,oEAAoE,EAAE;IAChH,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,2DAA2D,EAAE;CAC/F,CAAC;AAgCF,+EAA+E;AAE/E,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAEvC,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG;YAAE,GAAG,IAAI,CAAC,CAAC;aAClC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG;YAAE,GAAG,IAAI,CAAC,CAAC;aACvC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,CAAC,CAAC;aACxC,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,CAAC,CAAC;;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,6EAA6E;AAC7E,SAAS,SAAS,CAAC,IAAoC,EAAE,IAAoC;IAC3F,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,IAAI,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;QAAE,KAAK,IAAI,EAAE,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAe,EAAE,IAAa,EAAE,UAAuB,EAAE;IACvG,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAqE,EAAE,CAAC;IACjF,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE,CAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;IACjF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,MAAM,KAAK,GAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAc,EAAE,GAAG,GAAa,EAAa,EAAE;YAC3E,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,CAAC;gBACJ,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;gBACzB,IAAI,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,KAAK;oBAClE,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;gBACzD,IAAI,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClF,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACjE,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC9D,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;gBAC7D,IAAI,KAAK,IAAI,SAAS;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;gBAC7E,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBACnD,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;gBAC9D,IAAI,KAAK,IAAI,UAAU;oBAAE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;gBAC5E,IAAI,KAAK;oBAAE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;gBACxE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/B,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;oBAChF,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACzE,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IAClB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAE,CAAC;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QACjC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5E,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAChH,CAAC;AAaD;;;GAGG;AACH,SAAS,oBAAoB,CAAC,GAAa;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACtF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAGhD,IAAI,MAAe,CAAC;IACpB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,oEAAoE;QACpE,uEAAuE;QACvE,yEAAyE;QACzE,uCAAuC;QACvC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClE,KAAK,GAAG,EAAE,CAAC;QACX,MAAM,GAAG;YACP,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACjF,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,uEAAuE;QACvE,qCAAqC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAC/C,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAClD,CAAC;AAED;;0EAE0E;AAC1E,SAAS,SAAS,CAAC,GAAa;IAC9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI;YAAE,SAAS;QACnD,MAAM,MAAM,GAAG;YACb,EAAC,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EAAC;YACjC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;SACjG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;gBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;YAC/C,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC;QACD,oEAAoE;QACpE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAa;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,+EAA+E;AAE/E,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAM,SAAS,GAA6B,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AASrG,SAAS,KAAK,CAAC,GAAa,EAAE,SAAoB,EAAE,QAA2B,EAAE,WAAmB;IAClG,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,wEAAwE;IACxE,6DAA6D;IAC7D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QACpE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM;YACxF,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxI,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE;QAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,aAAa,EAAE,CAAC;IAEhF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,yEAAyE;IACzE,2DAA2D;IAC3D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAAE,UAAU,GAAG,CAAC,CAAC;IACvG,kEAAkE;IAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,UAAU,GACd,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,+DAA+D;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjE,qEAAqE;IACrE,6DAA6D;IAC7D,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IAClL,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;QACtI,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YAAE,WAAW,IAAI,GAAG,CAAC;QACpD,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,WAAW,IAAI,GAAG,CAAC;IAChG,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACjF,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACjG,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC3C,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAC3C,gEAAgE;IAChE,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,CACL,CAAC,GAAG,SAAS,CAAC,KAAK;QACnB,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QAC9B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,WAAW;QACX,QAAQ;QACR,CAAC,GAAG,aAAa;QACjB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/E,QAAQ;QACR,SAAS;QACT,WAAW;QACX,aAAa;QACb,YAAY;QACZ,UAAU;QACV,OAAO;QACP,CAAC,GAAG,OAAO,CAAC,OAAO;QACnB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;QAC1D,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,UAAU;QACV,UAAU,CACX,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,GAAa,EAAE,QAA2B;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAE,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/C,IAAI,IAAI,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IAClG,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7G,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;QACjG,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAAsB,EACtB,UAA2B,EAAE;IAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAChE,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3C,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAoB,EAAE;QACnD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;YAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ;gBAAE,OAAO,IAAI,CAAC;QAC3E,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAE,CAAC;QAC7D,sEAAsE;QACtE,2CAA2C;QAC3C,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,GAAG,EAAE,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3E,CAAC;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvH,OAAO;YACL,GAAG;YACH,SAAS;YACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACrC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;SACpD,CAAC;IACJ,CAAC,CAAC;IACF,8EAA8E;IAC9E,uEAAuE;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAID,MAAM,GAAG,GAAa,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,KAAY,EAAE,OAAgB,EAAE,QAAgB,EAAE,EAAE;YAC3E,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBAClB,IAAI,KAAK,KAAK,MAAM;oBAAE,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACV,IAAI,KAAK,KAAK,QAAQ;wBAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;yBAC5D,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;wBACnD,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;wBACxC,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBAChD,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;4BAChF,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,KAAK,OAAO;oBAAE,SAAS;gBAChC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;wBAAE,SAAS;oBACjD,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,QAAQ;wBAAE,SAAS;oBAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;QACF,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9E,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,CAAY,EAAE,QAA2B;IAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO;QAC5B,QAAQ;QACR,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAClE,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;QACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjC,MAAM,EAAE,oBAAoB,CAAC;YAC3B,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO;YACvD,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;SAC9D,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAqB,EAAE,QAA2B;IACpF,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1F,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAE,CAAC,EAAE,CAAC;IAC9D,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvD,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -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