@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, e.g. ["5"]. */
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 slash names. Within each of those
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") — plus, when `inversionAgnostic` is false, inversions ("C/E").
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`. A slash bass must be one of the
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"). `normalized` is the canonical spelling of whatever parsed,
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
- mask |= bit(((semis % 12) + 12) % 12);
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 { type, mask };
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. The single letters M and m keep their case-sensitive meaning.
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 TONAL_ORDER = new Map(TONAL_SHAPES.map((s, i) => [s.type, i]));
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 + (TONAL_ORDER.get(type) ?? TONAL_SHAPES.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 shape = shapeForQuality(quality);
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. A pedal bass (one that is not a chord tone, "C/Ab") requires
197
- * the whole chord above it: omitting the 5th there yields names like
198
- * "Abmaj7/E" that describe the notes but no musician would write.
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, allowOmittedFifth) {
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
- // The 5th cannot be "omitted" while it is sounding as the bass.
209
- if (allowOmittedFifth && !isPedal && shape.mask & bit(FIFTH) && bassPc !== fifthPc) {
210
- const without = full & ~bit(fifthPc);
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: ["5"] };
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 slash names. Within each of those
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") — plus, when `inversionAgnostic` is false, inversions ("C/E").
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 ? TONAL_SHAPES.filter((s) => allowed.has(s.type)) : TONAL_SHAPES;
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 rank = (bass ? 4 : 0) + (omitted ? 2 : 0) + (rootPc === parsed.bass && !bass ? 0 : 1);
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, allowOmittedFifth);
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, allowOmittedFifth);
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`. A slash bass must be one of the
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"). `normalized` is the canonical spelling of whatever parsed,
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 normalized = makeCandidate(sym.root, sym.shape.type, sym.bass, undefined).symbol;
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, allowOmittedFifth);
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.0",
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": "^6.3.0",
26
- "@pepperhorn/chordl-voicings": "0.4.0"
25
+ "tonal": "~6.4.3",
26
+ "@pepperhorn/chordl-voicings": "0.4.1"
27
27
  },
28
28
  "devDependencies": {
29
29
  "typescript": "^5.7.0",