@pepperhorn/chordl-core 0.5.0 → 0.5.2
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.
|
@@ -17,8 +17,24 @@ export interface IdentifyOptions {
|
|
|
17
17
|
chordTypes?: string[];
|
|
18
18
|
/** Accept slash names — inversions ("C/E") and pedal basses ("C/Ab"). Default true. */
|
|
19
19
|
allowSlash?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Accept pedal-bass (foreign-bass) slash names, whose bass is not a tone of
|
|
22
|
+
* the chord above it: "C/Ab" for Ab–C–E–G, "A/C" for E–A–C#–C. Default
|
|
23
|
+
* true. When false, only inversion slash names ("C/E", "C/G" for C–E–G)
|
|
24
|
+
* are allowed. Has no effect when `allowSlash` is false.
|
|
25
|
+
*/
|
|
26
|
+
allowPedalBass?: boolean;
|
|
20
27
|
/** Accept a chord whose perfect 5th is missing (C–D–E → "Cadd9"). Default true. */
|
|
21
28
|
allowOmittedFifth?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Accept a chord whose 3rd (major or minor) is missing: D–A–C → "D7",
|
|
31
|
+
* recorded as `omitted: ["3"]`. Default false. Combines with
|
|
32
|
+
* `allowOmittedFifth` (A–C–D → "C6/9", `omitted: ["3", "5"]`) as long as at
|
|
33
|
+
* least three notes sound. Never applies to sus or power chords, which have
|
|
34
|
+
* no 3rd. A name typed with an explicit marker ("D7no3", "D7(omit3)") is
|
|
35
|
+
* accepted whatever this option says.
|
|
36
|
+
*/
|
|
37
|
+
allowOmittedThird?: boolean;
|
|
22
38
|
/**
|
|
23
39
|
* Name an inversion by its root ("C" for E–G–C). Default true. When false,
|
|
24
40
|
* the first note passed is taken as the bass: a chord whose root is not the
|
|
@@ -35,7 +51,7 @@ export interface ChordCandidate {
|
|
|
35
51
|
type: string;
|
|
36
52
|
/** Bass note of a slash name, spelled as given. */
|
|
37
53
|
bass?: string;
|
|
38
|
-
/** Chord tones left out of the notes,
|
|
54
|
+
/** Chord tones left out of the notes: ["5"], ["3"] or ["3", "5"]. */
|
|
39
55
|
omitted?: string[];
|
|
40
56
|
}
|
|
41
57
|
export interface ChordNameMatch {
|
|
@@ -51,11 +67,13 @@ export interface ChordNameMatch {
|
|
|
51
67
|
* Every chord name the given notes spell.
|
|
52
68
|
*
|
|
53
69
|
* Root-position names come first (the name whose root is the first note given
|
|
54
|
-
* leads), then omitted-5th readings, then
|
|
70
|
+
* leads), then omitted-5th readings, then omitted-3rd readings, then readings
|
|
71
|
+
* missing both, then slash names. Within each of those
|
|
55
72
|
* groups, common chord types come before rare ones (see `TYPE_PRIORITY`). A black-key root is
|
|
56
73
|
* offered in both spellings ("C#" and "Db") as separate candidates. Slash
|
|
57
74
|
* names returned here are pedal basses — a non-chord-tone under a chord
|
|
58
|
-
* ("C/Ab")
|
|
75
|
+
* ("C/Ab"), unless `allowPedalBass` is false — plus, when `inversionAgnostic`
|
|
76
|
+
* is false, inversions ("C/E").
|
|
59
77
|
* Returns `[]` when any note is unparseable or nothing matches.
|
|
60
78
|
*/
|
|
61
79
|
export declare function identifyChords(notes: string[], opts?: IdentifyOptions): ChordCandidate[];
|
|
@@ -64,9 +82,15 @@ export declare function identifyChords(notes: string[], opts?: IdentifyOptions):
|
|
|
64
82
|
*
|
|
65
83
|
* The name is parsed tolerantly (see `normalizeQuality`) and is correct when
|
|
66
84
|
* its pitch-class set equals the notes' set — or equals it with the perfect
|
|
67
|
-
* 5th omitted, when `allowOmittedFifth
|
|
85
|
+
* 5th omitted, when `allowOmittedFifth`, and/or the 3rd omitted, when
|
|
86
|
+
* `allowOmittedThird`. Explicit markers ("D7no3", "Cmaj7(omit5)",
|
|
87
|
+
* "C6/9(no3,5)") require the marked tone to be absent and are accepted
|
|
88
|
+
* whatever the options; `normalized` writes them as "(no3)", "(no5)" or
|
|
89
|
+
* "(no3,5)". A slash bass must be one of the
|
|
68
90
|
* notes; the chord above it may contain it (an inversion, "C/E") or not (a
|
|
69
|
-
* pedal, "C/Ab"
|
|
91
|
+
* pedal, "C/Ab"; rejected when `allowPedalBass` is false). Whether the bass is
|
|
92
|
+
* a chord tone is judged against the whole chord, so "Cadd9/E" over E–C–D is
|
|
93
|
+
* an inversion even with its 5th omitted. `normalized` is the canonical spelling of whatever parsed,
|
|
70
94
|
* right or wrong, so a UI can echo it back.
|
|
71
95
|
*/
|
|
72
96
|
export declare function matchesChordName(input: string, notes: string[], opts?: IdentifyOptions): ChordNameMatch;
|
|
@@ -4,7 +4,7 @@ import { resolveChord } from "../resolver/chord-resolver.js";
|
|
|
4
4
|
// ── Pitch-class sets as 12-bit masks ──
|
|
5
5
|
const SHARP_NAMES = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
6
6
|
const FIFTH = 7;
|
|
7
|
-
/** An omitted-5th reading must still leave a triad's worth of notes. */
|
|
7
|
+
/** An omitted-3rd or omitted-5th reading must still leave a triad's worth of notes. */
|
|
8
8
|
const MIN_NOTES_AFTER_OMISSION = 3;
|
|
9
9
|
/** A slash chord's upper structure must be at least a triad. */
|
|
10
10
|
const MIN_PEDAL_UPPER_NOTES = 3;
|
|
@@ -79,20 +79,52 @@ const CANONICAL_TYPE = {
|
|
|
79
79
|
};
|
|
80
80
|
function shapeFromIntervals(type, intervals) {
|
|
81
81
|
let mask = 0;
|
|
82
|
+
const pcs = [];
|
|
83
|
+
let third;
|
|
82
84
|
for (const ivl of intervals) {
|
|
83
85
|
const semis = Interval.semitones(ivl);
|
|
84
|
-
if (Number.isInteger(semis))
|
|
85
|
-
|
|
86
|
+
if (!Number.isInteger(semis))
|
|
87
|
+
continue;
|
|
88
|
+
const pc = ((semis % 12) + 12) % 12;
|
|
89
|
+
mask |= bit(pc);
|
|
90
|
+
pcs.push(pc);
|
|
91
|
+
if (Interval.get(ivl).num === 3)
|
|
92
|
+
third = pc;
|
|
93
|
+
}
|
|
94
|
+
const shape = { type, mask };
|
|
95
|
+
if (third !== undefined &&
|
|
96
|
+
!/sus/.test(type) &&
|
|
97
|
+
pcs.filter((pc) => pc === third).length === 1) {
|
|
98
|
+
shape.third = third;
|
|
86
99
|
}
|
|
87
|
-
return
|
|
100
|
+
return shape;
|
|
88
101
|
}
|
|
89
102
|
const TONAL_SHAPES = ChordType.all().map((t) => shapeFromIntervals(CANONICAL_TYPE[t.aliases[0]] ?? t.aliases[0], t.intervals));
|
|
103
|
+
/**
|
|
104
|
+
* Chord types chordl names that tonal's dictionary lacks. `resolveChord`
|
|
105
|
+
* already builds these; listing them here lets `identifyChords` find them and
|
|
106
|
+
* the `chordTypes` allow-list name them. Aliases are matched after
|
|
107
|
+
* `normalizeQuality`, so "min7sus4" and "m7(sus4)" need no entry of their own.
|
|
108
|
+
*/
|
|
109
|
+
const CHORDL_EXTRA_TYPES = [
|
|
110
|
+
// Minor 7th with an added 4th (A–C–D–E–G). "sus" is informal here, as in
|
|
111
|
+
// "msus": the minor 3rd stays.
|
|
112
|
+
{ type: "m7sus4", aliases: ["m7sus4", "m7sus", "min7sus4"], intervals: ["1P", "3m", "4P", "5P", "7m"] },
|
|
113
|
+
].filter((t) => ChordType.get(t.type).empty);
|
|
114
|
+
const EXTRA_SHAPES = CHORDL_EXTRA_TYPES.map((t) => shapeFromIntervals(t.type, t.intervals));
|
|
115
|
+
/** Every chord shape identification considers: tonal's, then chordl's extras. */
|
|
116
|
+
const ALL_SHAPES = [...TONAL_SHAPES, ...EXTRA_SHAPES];
|
|
117
|
+
function extraShape(normalized) {
|
|
118
|
+
const i = CHORDL_EXTRA_TYPES.findIndex((t) => t.aliases.some((a) => normalizeQuality(a) === normalized));
|
|
119
|
+
return i >= 0 ? EXTRA_SHAPES[i] : null;
|
|
120
|
+
}
|
|
90
121
|
/**
|
|
91
122
|
* Rewrite a typed chord quality into a symbol tonal recognises. Tolerates
|
|
92
123
|
* spaces, parentheses, unicode accidentals and the common written synonyms:
|
|
93
124
|
* maj/major → M, Δ → maj7 (Δ9 → maj9), min/minor/- → m, ø → m7b5, ° → dim,
|
|
94
125
|
* + → aug, sus → sus4,
|
|
95
|
-
* add2 → add9
|
|
126
|
+
* add2 → add9, msus/msus4/m(sus4)/minsus4/-sus4 → madd4 (minor add 4: the
|
|
127
|
+
* informal "msus" keeps its minor 3rd, unlike a true sus chord). The single letters M and m keep their case-sensitive meaning.
|
|
96
128
|
*/
|
|
97
129
|
function normalizeQuality(raw) {
|
|
98
130
|
let s = raw
|
|
@@ -115,6 +147,10 @@ function normalizeQuality(raw) {
|
|
|
115
147
|
if (s === "+")
|
|
116
148
|
s = "aug";
|
|
117
149
|
s = s.replace(/sus(?![24])/, "sus4").replace(/add2/, "add9");
|
|
150
|
+
// "msus" is informal: a sus chord replaces its 3rd, but "Amsus" (A–C–D–E)
|
|
151
|
+
// keeps the minor 3rd and adds the 4th, so it is tonal's madd4.
|
|
152
|
+
if (s === "msus4")
|
|
153
|
+
s = "madd4";
|
|
118
154
|
return s;
|
|
119
155
|
}
|
|
120
156
|
/** Resolve a typed quality to a chord shape, or null when it is not a chord. */
|
|
@@ -124,6 +160,9 @@ function shapeForQuality(raw) {
|
|
|
124
160
|
if (!t.empty) {
|
|
125
161
|
return shapeFromIntervals(CANONICAL_TYPE[t.aliases[0]] ?? t.aliases[0], t.intervals);
|
|
126
162
|
}
|
|
163
|
+
const extra = extraShape(s);
|
|
164
|
+
if (extra)
|
|
165
|
+
return extra;
|
|
127
166
|
// Names tonal does not know but `resolveChord` builds (m6/9, 7omit3,
|
|
128
167
|
// compound alterations like maj9#5#13): reuse its fallback rather than
|
|
129
168
|
// re-deriving those chords here.
|
|
@@ -142,12 +181,12 @@ function shapeForQuality(raw) {
|
|
|
142
181
|
*/
|
|
143
182
|
const TYPE_PRIORITY = [
|
|
144
183
|
"M", "m", "7", "maj7", "m7", "dim", "aug", "sus4", "sus2", "m7b5", "dim7",
|
|
145
|
-
"6", "m6", "add9", "madd9", "7sus4", "9", "maj9", "m9", "maj7#5", "mMaj7",
|
|
184
|
+
"6", "m6", "add9", "madd9", "7sus4", "m7sus4", "9", "maj9", "m9", "maj7#5", "mMaj7",
|
|
146
185
|
];
|
|
147
|
-
const
|
|
186
|
+
const SHAPE_ORDER = new Map(ALL_SHAPES.map((s, i) => [s.type, i]));
|
|
148
187
|
function typePriority(type) {
|
|
149
188
|
const i = TYPE_PRIORITY.indexOf(type);
|
|
150
|
-
return i >= 0 ? i : TYPE_PRIORITY.length + (
|
|
189
|
+
return i >= 0 ? i : TYPE_PRIORITY.length + (SHAPE_ORDER.get(type) ?? ALL_SHAPES.length);
|
|
151
190
|
}
|
|
152
191
|
const displaySuffix = (type) => (type === "M" ? "" : type);
|
|
153
192
|
function allowedTypes(chordTypes) {
|
|
@@ -159,6 +198,22 @@ function allowedTypes(chordTypes) {
|
|
|
159
198
|
}
|
|
160
199
|
return set;
|
|
161
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* One trailing omission marker: "omit3", "no5", "(no3)", " omit 5",
|
|
203
|
+
* "(omit3,5)", "(no3, no5)".
|
|
204
|
+
*/
|
|
205
|
+
const OMISSION_MARKER = /[\s,]*\(?\s*(?:omit|no)\s*([35](?:\s*,\s*(?:(?:omit|no)\s*)?[35])*)\s*\)?\s*$/i;
|
|
206
|
+
/** Strip trailing omission markers off a typed quality. */
|
|
207
|
+
function stripOmissions(quality) {
|
|
208
|
+
const omit = new Set();
|
|
209
|
+
let q = quality;
|
|
210
|
+
for (let m = q.match(OMISSION_MARKER); m && m[0].length; m = q.match(OMISSION_MARKER)) {
|
|
211
|
+
for (const d of m[1].match(/[35]/g) ?? [])
|
|
212
|
+
omit.add(d);
|
|
213
|
+
q = q.slice(0, m.index);
|
|
214
|
+
}
|
|
215
|
+
return { quality: q, omit: ["3", "5"].filter((d) => omit.has(d)) };
|
|
216
|
+
}
|
|
162
217
|
/** Parse a typed chord symbol: root, quality, optional "/bass". */
|
|
163
218
|
function parseSymbol(input) {
|
|
164
219
|
const m = input
|
|
@@ -179,37 +234,68 @@ function parseSymbol(input) {
|
|
|
179
234
|
return null;
|
|
180
235
|
bass = spelled;
|
|
181
236
|
}
|
|
182
|
-
const
|
|
237
|
+
const stripped = stripOmissions(quality);
|
|
238
|
+
const shape = shapeForQuality(stripped.quality);
|
|
183
239
|
if (!shape || !(root in PC_SEMITONES))
|
|
184
240
|
return null;
|
|
241
|
+
// A marker must name a tone the chord has: "Csus4no3" and "C5no3" are not chords.
|
|
242
|
+
if (stripped.omit.includes("3") && shape.third === undefined)
|
|
243
|
+
return null;
|
|
244
|
+
if (stripped.omit.includes("5") && !(shape.mask & bit(FIFTH)))
|
|
245
|
+
return null;
|
|
185
246
|
return {
|
|
186
247
|
root,
|
|
187
248
|
rootPc: PC_SEMITONES[root],
|
|
188
249
|
shape,
|
|
189
250
|
bass,
|
|
190
251
|
bassPc: bass === undefined ? undefined : PC_SEMITONES[bass],
|
|
252
|
+
omit: stripped.omit,
|
|
191
253
|
};
|
|
192
254
|
}
|
|
255
|
+
/** Omission sets in ranking order: none, 5th, 3rd, both. */
|
|
256
|
+
const OMISSION_SETS = [[], ["5"], ["3"], ["3", "5"]];
|
|
193
257
|
/**
|
|
194
258
|
* Does `shape` on `root`, with an optional slash bass, spell exactly `target`?
|
|
195
259
|
* Tries the whole chord first, then — if allowed — the chord minus its
|
|
196
|
-
* perfect 5th
|
|
197
|
-
*
|
|
198
|
-
* "
|
|
260
|
+
* perfect 5th, minus its 3rd, and minus both. At least three notes must
|
|
261
|
+
* remain after any omission. A pedal bass (one that is not a chord tone,
|
|
262
|
+
* "C/Ab") requires the whole chord above it: omitting a tone there yields
|
|
263
|
+
* names like "Abmaj7/E" that describe the notes but no musician would write.
|
|
264
|
+
* A tone that is sounding as the bass cannot be omitted.
|
|
199
265
|
*/
|
|
200
|
-
function spells(shape, root, target, bassPc,
|
|
266
|
+
function spells(shape, root, target, bassPc, rules) {
|
|
201
267
|
const chord = transpose(shape.mask, root);
|
|
202
268
|
const bassBit = bassPc === undefined ? 0 : bit(bassPc);
|
|
203
269
|
const full = chord | bassBit;
|
|
204
|
-
if (full === target)
|
|
205
|
-
return { ok: true };
|
|
206
270
|
const isPedal = bassBit !== 0 && !(chord & bassBit);
|
|
271
|
+
const required = rules.required ?? [];
|
|
207
272
|
const fifthPc = (root + FIFTH) % 12;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
273
|
+
const thirdPc = shape.third === undefined ? undefined : (root + shape.third) % 12;
|
|
274
|
+
const can = {
|
|
275
|
+
"5": (rules.allowOmittedFifth || required.includes("5")) &&
|
|
276
|
+
!!(shape.mask & bit(FIFTH)) &&
|
|
277
|
+
bassPc !== fifthPc,
|
|
278
|
+
"3": (rules.allowOmittedThird || required.includes("3")) &&
|
|
279
|
+
thirdPc !== undefined &&
|
|
280
|
+
bassPc !== thirdPc,
|
|
281
|
+
};
|
|
282
|
+
for (const set of OMISSION_SETS) {
|
|
283
|
+
if (!required.every((o) => set.includes(o)))
|
|
284
|
+
continue;
|
|
285
|
+
if (set.length === 0) {
|
|
286
|
+
if (full === target)
|
|
287
|
+
return { ok: true };
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (isPedal || !set.every((o) => can[o]))
|
|
291
|
+
continue;
|
|
292
|
+
let without = full;
|
|
293
|
+
if (set.includes("5"))
|
|
294
|
+
without &= ~bit(fifthPc);
|
|
295
|
+
if (set.includes("3"))
|
|
296
|
+
without &= ~bit(thirdPc);
|
|
211
297
|
if (without === target && popcount(without) >= MIN_NOTES_AFTER_OMISSION) {
|
|
212
|
-
return { ok: true, omitted:
|
|
298
|
+
return { ok: true, omitted: set };
|
|
213
299
|
}
|
|
214
300
|
}
|
|
215
301
|
return { ok: false };
|
|
@@ -230,32 +316,36 @@ function makeCandidate(root, type, bass, omitted) {
|
|
|
230
316
|
* Every chord name the given notes spell.
|
|
231
317
|
*
|
|
232
318
|
* Root-position names come first (the name whose root is the first note given
|
|
233
|
-
* leads), then omitted-5th readings, then
|
|
319
|
+
* leads), then omitted-5th readings, then omitted-3rd readings, then readings
|
|
320
|
+
* missing both, then slash names. Within each of those
|
|
234
321
|
* groups, common chord types come before rare ones (see `TYPE_PRIORITY`). A black-key root is
|
|
235
322
|
* offered in both spellings ("C#" and "Db") as separate candidates. Slash
|
|
236
323
|
* names returned here are pedal basses — a non-chord-tone under a chord
|
|
237
|
-
* ("C/Ab")
|
|
324
|
+
* ("C/Ab"), unless `allowPedalBass` is false — plus, when `inversionAgnostic`
|
|
325
|
+
* is false, inversions ("C/E").
|
|
238
326
|
* Returns `[]` when any note is unparseable or nothing matches.
|
|
239
327
|
*/
|
|
240
328
|
export function identifyChords(notes, opts = {}) {
|
|
241
|
-
const { allowSlash = true, allowOmittedFifth = true, inversionAgnostic = true } = opts;
|
|
329
|
+
const { allowSlash = true, allowPedalBass = true, allowOmittedFifth = true, allowOmittedThird = false, inversionAgnostic = true, } = opts;
|
|
330
|
+
const rules = { allowOmittedFifth, allowOmittedThird };
|
|
242
331
|
const parsed = parseNotes(notes);
|
|
243
332
|
if (!parsed)
|
|
244
333
|
return [];
|
|
245
334
|
const allowed = allowedTypes(opts.chordTypes);
|
|
246
|
-
const shapes = allowed ?
|
|
335
|
+
const shapes = allowed ? ALL_SHAPES.filter((s) => allowed.has(s.type)) : ALL_SHAPES;
|
|
247
336
|
const found = [];
|
|
248
337
|
const push = (rootPc, type, bassPc, omitted) => {
|
|
249
338
|
const bass = bassPc === undefined ? undefined : parsed.spelling.get(bassPc);
|
|
250
|
-
const
|
|
339
|
+
const group = omitted ? OMISSION_SETS.findIndex((s) => s.join() === omitted.join()) : 0;
|
|
340
|
+
const rank = (bass ? 2 * OMISSION_SETS.length : 0) + 2 * group + (rootPc === parsed.bass && !bass ? 0 : 1);
|
|
251
341
|
for (const root of rootSpellings(rootPc)) {
|
|
252
342
|
found.push({ c: makeCandidate(root, type, bass, omitted), rank, priority: typePriority(type) });
|
|
253
343
|
}
|
|
254
344
|
};
|
|
255
|
-
// Plain names: the notes are exactly the chord (or the chord minus its 5th).
|
|
345
|
+
// Plain names: the notes are exactly the chord (or the chord minus its 5th and/or 3rd).
|
|
256
346
|
for (const root of pcsOf(parsed.mask)) {
|
|
257
347
|
for (const shape of shapes) {
|
|
258
|
-
const r = spells(shape, root, parsed.mask, undefined,
|
|
348
|
+
const r = spells(shape, root, parsed.mask, undefined, rules);
|
|
259
349
|
if (!r.ok)
|
|
260
350
|
continue;
|
|
261
351
|
if (inversionAgnostic || root === parsed.bass)
|
|
@@ -265,7 +355,7 @@ export function identifyChords(notes, opts = {}) {
|
|
|
265
355
|
}
|
|
266
356
|
}
|
|
267
357
|
// Pedal basses: one note under a chord that does not contain it.
|
|
268
|
-
if (allowSlash) {
|
|
358
|
+
if (allowSlash && allowPedalBass) {
|
|
269
359
|
const basses = inversionAgnostic ? pcsOf(parsed.mask) : [parsed.bass];
|
|
270
360
|
for (const b of basses) {
|
|
271
361
|
const upper = parsed.mask & ~bit(b);
|
|
@@ -276,7 +366,7 @@ export function identifyChords(notes, opts = {}) {
|
|
|
276
366
|
// A chord that contains the bass is an inversion, named above.
|
|
277
367
|
if (transpose(shape.mask, root) & bit(b))
|
|
278
368
|
continue;
|
|
279
|
-
const r = spells(shape, root, parsed.mask, b,
|
|
369
|
+
const r = spells(shape, root, parsed.mask, b, rules);
|
|
280
370
|
if (r.ok)
|
|
281
371
|
push(root, shape.type, b, r.omitted);
|
|
282
372
|
}
|
|
@@ -295,18 +385,25 @@ export function identifyChords(notes, opts = {}) {
|
|
|
295
385
|
*
|
|
296
386
|
* The name is parsed tolerantly (see `normalizeQuality`) and is correct when
|
|
297
387
|
* its pitch-class set equals the notes' set — or equals it with the perfect
|
|
298
|
-
* 5th omitted, when `allowOmittedFifth
|
|
388
|
+
* 5th omitted, when `allowOmittedFifth`, and/or the 3rd omitted, when
|
|
389
|
+
* `allowOmittedThird`. Explicit markers ("D7no3", "Cmaj7(omit5)",
|
|
390
|
+
* "C6/9(no3,5)") require the marked tone to be absent and are accepted
|
|
391
|
+
* whatever the options; `normalized` writes them as "(no3)", "(no5)" or
|
|
392
|
+
* "(no3,5)". A slash bass must be one of the
|
|
299
393
|
* notes; the chord above it may contain it (an inversion, "C/E") or not (a
|
|
300
|
-
* pedal, "C/Ab"
|
|
394
|
+
* pedal, "C/Ab"; rejected when `allowPedalBass` is false). Whether the bass is
|
|
395
|
+
* a chord tone is judged against the whole chord, so "Cadd9/E" over E–C–D is
|
|
396
|
+
* an inversion even with its 5th omitted. `normalized` is the canonical spelling of whatever parsed,
|
|
301
397
|
* right or wrong, so a UI can echo it back.
|
|
302
398
|
*/
|
|
303
399
|
export function matchesChordName(input, notes, opts = {}) {
|
|
304
|
-
const { allowSlash = true, allowOmittedFifth = true, inversionAgnostic = true } = opts;
|
|
400
|
+
const { allowSlash = true, allowPedalBass = true, allowOmittedFifth = true, allowOmittedThird = false, inversionAgnostic = true, } = opts;
|
|
305
401
|
const candidates = identifyChords(notes, opts);
|
|
306
402
|
const sym = parseSymbol(input);
|
|
307
403
|
if (!sym)
|
|
308
404
|
return { ok: false, candidates };
|
|
309
|
-
const
|
|
405
|
+
const marker = sym.omit.length ? `(no${sym.omit.join(",")})` : "";
|
|
406
|
+
const normalized = sym.root + displaySuffix(sym.shape.type) + marker + (sym.bass ? `/${sym.bass}` : "");
|
|
310
407
|
const fail = { ok: false, normalized, candidates };
|
|
311
408
|
const parsed = parseNotes(notes);
|
|
312
409
|
if (!parsed || popcount(parsed.mask) < 2)
|
|
@@ -318,10 +415,17 @@ export function matchesChordName(input, notes, opts = {}) {
|
|
|
318
415
|
if (sym.bassPc !== undefined) {
|
|
319
416
|
if (!allowSlash || !(parsed.mask & bit(sym.bassPc)))
|
|
320
417
|
return fail;
|
|
418
|
+
const isChordTone = transpose(sym.shape.mask, sym.rootPc) & bit(sym.bassPc);
|
|
419
|
+
if (!allowPedalBass && !isChordTone)
|
|
420
|
+
return fail;
|
|
321
421
|
}
|
|
322
422
|
if (!inversionAgnostic && lowest !== parsed.bass)
|
|
323
423
|
return fail;
|
|
324
|
-
const r = spells(sym.shape, sym.rootPc, parsed.mask, sym.bassPc,
|
|
424
|
+
const r = spells(sym.shape, sym.rootPc, parsed.mask, sym.bassPc, {
|
|
425
|
+
allowOmittedFifth,
|
|
426
|
+
allowOmittedThird,
|
|
427
|
+
required: sym.omit,
|
|
428
|
+
});
|
|
325
429
|
if (!r.ok)
|
|
326
430
|
return fail;
|
|
327
431
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chord-identify.js","sourceRoot":"","sources":["../../src/theory/chord-identify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chord-identify.js","sourceRoot":"","sources":["../../src/theory/chord-identify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pepperhorn/chordl-core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "Pure TypeScript chord parsing, resolving, layout, and export engine",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"tonal": "
|
|
26
|
-
"@pepperhorn/chordl-voicings": "0.4.
|
|
25
|
+
"tonal": "~6.4.3",
|
|
26
|
+
"@pepperhorn/chordl-voicings": "0.4.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"typescript": "^5.7.0",
|