@musodojo/music-theory-data 30.0.0 → 31.0.0
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/esm/src/utils/chords.d.ts +1 -1
- package/esm/src/utils/chords.d.ts.map +1 -1
- package/esm/src/utils/chords.js +13 -28
- package/esm/src/utils/intervals.d.ts +1 -0
- package/esm/src/utils/intervals.d.ts.map +1 -1
- package/esm/src/utils/intervals.js +4 -1
- package/package.json +1 -1
- package/script/src/utils/chords.d.ts +1 -1
- package/script/src/utils/chords.d.ts.map +1 -1
- package/script/src/utils/chords.js +13 -28
- package/script/src/utils/intervals.d.ts +1 -0
- package/script/src/utils/intervals.d.ts.map +1 -1
- package/script/src/utils/intervals.js +5 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type NoteCollectionKey } from "../data/note-collections/mod.js";
|
|
2
2
|
import type { ChordQuality, RomanSeventhChord, RomanTriad, SeventhChord, Triad } from "../types/chords";
|
|
3
|
-
import type
|
|
3
|
+
import { type NoteCollectionKeyTransformOptions, type RootAndNoteCollectionKeyTransformOptions } from "./intervals.js";
|
|
4
4
|
import { type RootNote } from "../data/labels/note-labels.js";
|
|
5
5
|
export declare function getRomanNumeralForScaleIndexAndChordQuality(scaleIndex: number, quality: ChordQuality): string | undefined;
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chords.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chords.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"chords.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chords.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,EAEL,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAC9C,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,2CAA2C,CACzD,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,GACpB,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EAAE,GACvB,iBAAiB,EAAE,CAQrB;AA0KD;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAMvB;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAM9B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAO5B;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAOnC;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAsBxB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAY5B;AAED;;;;GAIG;AACH,wBAAgB,gDAAgD,CAC9D,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAYnC"}
|
package/esm/src/utils/chords.js
CHANGED
|
@@ -5,6 +5,7 @@ import { harmonicMinorModes, } from "../data/note-collections/harmonic-minor-mod
|
|
|
5
5
|
import { melodicMinorModes, } from "../data/note-collections/melodic-minor-modes.js";
|
|
6
6
|
import { intervalToIntegerMap, } from "../data/labels/note-labels.js";
|
|
7
7
|
import { diatonicModes, } from "../data/note-collections/diatonic-modes.js";
|
|
8
|
+
import { isOctaveInterval, } from "./intervals.js";
|
|
8
9
|
import { createChromaticTuple, normalizeChromaticIndex } from "./chromatic.js";
|
|
9
10
|
import { getNoteNamesForRootAndNoteCollectionKey } from "./note-names.js";
|
|
10
11
|
import { noteNameToIntegerMap, } from "../data/labels/note-labels.js";
|
|
@@ -68,7 +69,7 @@ function getChromaticArray(items, intervals) {
|
|
|
68
69
|
undefined,
|
|
69
70
|
];
|
|
70
71
|
intervals.forEach((interval, i) => {
|
|
71
|
-
if (interval
|
|
72
|
+
if (isOctaveInterval(interval)) {
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
74
75
|
const semitones = intervalToIntegerMap.get(interval);
|
|
@@ -108,6 +109,14 @@ function getModeData(modeKey) {
|
|
|
108
109
|
}
|
|
109
110
|
return undefined;
|
|
110
111
|
}
|
|
112
|
+
function getUndefinedChordPlaceholders(intervals, fillChromatic) {
|
|
113
|
+
if (fillChromatic) {
|
|
114
|
+
return createChromaticTuple(Array.from({ length: 12 }, () => undefined));
|
|
115
|
+
}
|
|
116
|
+
return intervals
|
|
117
|
+
.filter((interval) => !isOctaveInterval(interval))
|
|
118
|
+
.map(() => undefined);
|
|
119
|
+
}
|
|
111
120
|
/**
|
|
112
121
|
* A generic core helper function to evaluate and return chords for any given NoteCollectionKey.
|
|
113
122
|
*
|
|
@@ -162,33 +171,9 @@ function getChordsForNoteCollectionKey(noteCollectionKey, options, extractChords
|
|
|
162
171
|
// 2d. Otherwise, return the sequentially packed list.
|
|
163
172
|
return applyRotations(processedChords, false);
|
|
164
173
|
}
|
|
165
|
-
// 3.
|
|
166
|
-
//
|
|
167
|
-
|
|
168
|
-
const similarData = getModeData(similarScaleKey);
|
|
169
|
-
if (!similarData)
|
|
170
|
-
return [];
|
|
171
|
-
// 3a. Retrieve and rotate the chords for the similar scale exactly like step 2.
|
|
172
|
-
const similarChords = rotateArrayLeft(extractChords(similarData), similarData.rotation);
|
|
173
|
-
const similarProcessedChords = transformRoman
|
|
174
|
-
? transformRoman(similarChords)
|
|
175
|
-
: similarChords;
|
|
176
|
-
// 3b. Pluck out only the chords that align with the intervals actually present in the custom scale.
|
|
177
|
-
// E.g. For Minor Pentatonic (intervals 1, b3, 4, 5, b7), we grab the 1st, 3rd, 4th, 5th, and 7th chords of Aeolian.
|
|
178
|
-
const collectionChordsByInterval = collection.intervals
|
|
179
|
-
.map((interval) => {
|
|
180
|
-
const index = similarData.intervals.indexOf(interval);
|
|
181
|
-
return index !== -1 ? similarProcessedChords[index] : undefined;
|
|
182
|
-
});
|
|
183
|
-
// Keep a placeholder-preserving array for fillChromatic;
|
|
184
|
-
// otherwise a missing interval, such as the blues scale ♭5, shifts later chords.
|
|
185
|
-
const collectionChords = collectionChordsByInterval
|
|
186
|
-
.filter((chord) => chord !== undefined);
|
|
187
|
-
// 3c. Format and return just like step 2.
|
|
188
|
-
if (fillChromatic) {
|
|
189
|
-
return applyRotations(getChromaticArray(collectionChordsByInterval, collection.intervals), true);
|
|
190
|
-
}
|
|
191
|
-
return applyRotations(collectionChords, false);
|
|
174
|
+
// 3. Collections without authored chord systems should not infer harmony from
|
|
175
|
+
// mostSimilarScale. Return undefined placeholders so array positions stay meaningful.
|
|
176
|
+
return applyRotations(getUndefinedChordPlaceholders(collection.intervals, fillChromatic), fillChromatic === true);
|
|
192
177
|
}
|
|
193
178
|
/**
|
|
194
179
|
* Retrieves the triads for a given note collection key.
|
|
@@ -2,6 +2,7 @@ import { type CompoundInterval, type Interval, type IntervalQuality, type RootNo
|
|
|
2
2
|
import type { ChromaticIndex, ChromaticTuple } from "../data/chromatic.js";
|
|
3
3
|
import { type NoteCollectionKey } from "../data/note-collections/mod.js";
|
|
4
4
|
export type ChromaticIntervalTuple = ChromaticTuple<Interval>;
|
|
5
|
+
export declare function isOctaveInterval(interval: Interval): boolean;
|
|
5
6
|
/**
|
|
6
7
|
* Removes octave intervals (such as "8" or "♮8") from a given list of intervals.
|
|
7
8
|
* Highly useful for standardizing chord and scale definitions (scales conventionally include the octave,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervals.d.ts","sourceRoot":"","sources":["../../../src/src/utils/intervals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intervals.d.ts","sourceRoot":"","sources":["../../../src/src/utils/intervals.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,QAAQ,EACb,KAAK,eAAe,EAIpB,KAAK,QAAQ,EACb,KAAK,cAAc,EAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,iCAAiC,CAAC;AASzC,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,QAAQ,EAAE,CAEZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,QAAQ,EAAE,CAuBZ;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAmC1E;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,QAAQ,EAAE,CAIZ;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,cAAc,GAAG,SAAS,CAU5B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,cAAc,EAAE,CAIlB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAU9B;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,gBAAgB,EAAE,CAIpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAOxE;AAED,4FAA4F;AAC5F,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,kEAAkE;AAClE,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mFAAmF;AACnF,MAAM,WAAW,sCACf,SAAQ,6BAA6B;IACrC;;;;OAIG;IACH,aAAa,EAAE,IAAI,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;OAEG;IACH,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,mFAAmF;AACnF,MAAM,WAAW,+BACf,SAAQ,6BAA6B;IACrC,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,oBAAoB,CAAC,EAAE,KAAK,CAAC;CAC9B;AAED,kFAAkF;AAClF,MAAM,MAAM,yBAAyB,GACjC,sCAAsC,GACtC,+BAA+B,CAAC;AAEpC,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,yBAAyB,EACvB,wBAAwB,GACxB,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,eAAe,CAClB,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG,IAAI,CACzD,yBAAyB,EACvB,wBAAwB,GACxB,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,sBAAsB,CACzB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,OAAO,EAAE,sCAAsC,GAC9C,sBAAsB,CAAC;AAC1B,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,OAAO,CAAC,EAAE,yBAAyB,GAClC,QAAQ,EAAE,CAAC;AA+Fd;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,QAAQ,EAAE,CAKZ;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,iCAAiC,GAAG;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GACnE,sBAAsB,CAAC;AAC1B,wBAAgB,gCAAgC,CAC9C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,iCAAiC,GAC1C,QAAQ,EAAE,CAAC;AAuBd;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EACH,IAAI,CACJ,iCAAiC,EACjC,wBAAwB,CACzB,GACC;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC1B,sBAAsB,CAAC;AAC1B,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,IAAI,CACZ,iCAAiC,EACjC,wBAAwB,CACzB,GACA,QAAQ,EAAE,CAAC;AAed;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EACH,IAAI,CACJ,iCAAiC,EACjC,wBAAwB,CACzB,GACC;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC1B,sBAAsB,CAAC;AAC1B,wBAAgB,wCAAwC,CACtD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,IAAI,CACZ,iCAAiC,EACjC,wBAAwB,CACzB,GACA,QAAQ,EAAE,CAAC;AAed;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,wCAAwC,GAAG;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC1E,sBAAsB,CAAC;AAC1B,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,wCAAwC,GACjD,QAAQ,EAAE,CAAC;AA4Bd;;;;;;;;GAQG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EACH,IAAI,CACJ,wCAAwC,EACxC,wBAAwB,CACzB,GACC;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC1B,sBAAsB,CAAC;AAC1B,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,IAAI,CACZ,wCAAwC,EACxC,wBAAwB,CACzB,GACA,QAAQ,EAAE,CAAC;AAgBd;;;;;;;;GAQG;AACH,wBAAgB,+CAA+C,CAC7D,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EACH,IAAI,CACJ,wCAAwC,EACxC,wBAAwB,CACzB,GACC;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC1B,sBAAsB,CAAC;AAC1B,wBAAgB,+CAA+C,CAC7D,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,IAAI,CACZ,wCAAwC,EACxC,wBAAwB,CACzB,GACA,QAAQ,EAAE,CAAC"}
|
|
@@ -6,6 +6,9 @@ import { normalizeAccidentalString } from "./accidentals.js";
|
|
|
6
6
|
import { isValidNoteCollectionKey } from "./note-collections.js";
|
|
7
7
|
import { createChromaticTuple, normalizeChromaticIndex } from "./chromatic.js";
|
|
8
8
|
const INTERVAL_NUMBER_REGEX = /\d+$/;
|
|
9
|
+
export function isOctaveInterval(interval) {
|
|
10
|
+
return interval === "8" || interval === "♮8";
|
|
11
|
+
}
|
|
9
12
|
/**
|
|
10
13
|
* Removes octave intervals (such as "8" or "♮8") from a given list of intervals.
|
|
11
14
|
* Highly useful for standardizing chord and scale definitions (scales conventionally include the octave,
|
|
@@ -15,7 +18,7 @@ const INTERVAL_NUMBER_REGEX = /\d+$/;
|
|
|
15
18
|
* @returns A new array excluding any octave intervals.
|
|
16
19
|
*/
|
|
17
20
|
export function filterOutOctaveIntervals(intervals) {
|
|
18
|
-
return intervals.filter((
|
|
21
|
+
return intervals.filter((interval) => !isOctaveInterval(interval));
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
24
|
* Removes any intervals that mathematically resolve to the root note (0 modulo 12),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type NoteCollectionKey } from "../data/note-collections/mod.js";
|
|
2
2
|
import type { ChordQuality, RomanSeventhChord, RomanTriad, SeventhChord, Triad } from "../types/chords";
|
|
3
|
-
import type
|
|
3
|
+
import { type NoteCollectionKeyTransformOptions, type RootAndNoteCollectionKeyTransformOptions } from "./intervals.js";
|
|
4
4
|
import { type RootNote } from "../data/labels/note-labels.js";
|
|
5
5
|
export declare function getRomanNumeralForScaleIndexAndChordQuality(scaleIndex: number, quality: ChordQuality): string | undefined;
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chords.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chords.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"chords.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chords.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,EAEL,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAC9C,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,2CAA2C,CACzD,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,GACpB,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EAAE,GACvB,iBAAiB,EAAE,CAQrB;AA0KD;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAMvB;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAM9B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAO5B;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAOnC;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAsBxB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAY5B;AAED;;;;GAIG;AACH,wBAAgB,gDAAgD,CAC9D,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,wCAA6C,GACrD,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAYnC"}
|
|
@@ -18,6 +18,7 @@ const harmonic_minor_modes_js_1 = require("../data/note-collections/harmonic-min
|
|
|
18
18
|
const melodic_minor_modes_js_1 = require("../data/note-collections/melodic-minor-modes.js");
|
|
19
19
|
const note_labels_js_1 = require("../data/labels/note-labels.js");
|
|
20
20
|
const diatonic_modes_js_1 = require("../data/note-collections/diatonic-modes.js");
|
|
21
|
+
const intervals_js_1 = require("./intervals.js");
|
|
21
22
|
const chromatic_js_1 = require("./chromatic.js");
|
|
22
23
|
const note_names_js_1 = require("./note-names.js");
|
|
23
24
|
const note_labels_js_2 = require("../data/labels/note-labels.js");
|
|
@@ -81,7 +82,7 @@ function getChromaticArray(items, intervals) {
|
|
|
81
82
|
undefined,
|
|
82
83
|
];
|
|
83
84
|
intervals.forEach((interval, i) => {
|
|
84
|
-
if (
|
|
85
|
+
if ((0, intervals_js_1.isOctaveInterval)(interval)) {
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
87
88
|
const semitones = note_labels_js_1.intervalToIntegerMap.get(interval);
|
|
@@ -121,6 +122,14 @@ function getModeData(modeKey) {
|
|
|
121
122
|
}
|
|
122
123
|
return undefined;
|
|
123
124
|
}
|
|
125
|
+
function getUndefinedChordPlaceholders(intervals, fillChromatic) {
|
|
126
|
+
if (fillChromatic) {
|
|
127
|
+
return (0, chromatic_js_1.createChromaticTuple)(Array.from({ length: 12 }, () => undefined));
|
|
128
|
+
}
|
|
129
|
+
return intervals
|
|
130
|
+
.filter((interval) => !(0, intervals_js_1.isOctaveInterval)(interval))
|
|
131
|
+
.map(() => undefined);
|
|
132
|
+
}
|
|
124
133
|
/**
|
|
125
134
|
* A generic core helper function to evaluate and return chords for any given NoteCollectionKey.
|
|
126
135
|
*
|
|
@@ -175,33 +184,9 @@ function getChordsForNoteCollectionKey(noteCollectionKey, options, extractChords
|
|
|
175
184
|
// 2d. Otherwise, return the sequentially packed list.
|
|
176
185
|
return applyRotations(processedChords, false);
|
|
177
186
|
}
|
|
178
|
-
// 3.
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
const similarData = getModeData(similarScaleKey);
|
|
182
|
-
if (!similarData)
|
|
183
|
-
return [];
|
|
184
|
-
// 3a. Retrieve and rotate the chords for the similar scale exactly like step 2.
|
|
185
|
-
const similarChords = (0, rotate_array_js_1.rotateArrayLeft)(extractChords(similarData), similarData.rotation);
|
|
186
|
-
const similarProcessedChords = transformRoman
|
|
187
|
-
? transformRoman(similarChords)
|
|
188
|
-
: similarChords;
|
|
189
|
-
// 3b. Pluck out only the chords that align with the intervals actually present in the custom scale.
|
|
190
|
-
// E.g. For Minor Pentatonic (intervals 1, b3, 4, 5, b7), we grab the 1st, 3rd, 4th, 5th, and 7th chords of Aeolian.
|
|
191
|
-
const collectionChordsByInterval = collection.intervals
|
|
192
|
-
.map((interval) => {
|
|
193
|
-
const index = similarData.intervals.indexOf(interval);
|
|
194
|
-
return index !== -1 ? similarProcessedChords[index] : undefined;
|
|
195
|
-
});
|
|
196
|
-
// Keep a placeholder-preserving array for fillChromatic;
|
|
197
|
-
// otherwise a missing interval, such as the blues scale ♭5, shifts later chords.
|
|
198
|
-
const collectionChords = collectionChordsByInterval
|
|
199
|
-
.filter((chord) => chord !== undefined);
|
|
200
|
-
// 3c. Format and return just like step 2.
|
|
201
|
-
if (fillChromatic) {
|
|
202
|
-
return applyRotations(getChromaticArray(collectionChordsByInterval, collection.intervals), true);
|
|
203
|
-
}
|
|
204
|
-
return applyRotations(collectionChords, false);
|
|
187
|
+
// 3. Collections without authored chord systems should not infer harmony from
|
|
188
|
+
// mostSimilarScale. Return undefined placeholders so array positions stay meaningful.
|
|
189
|
+
return applyRotations(getUndefinedChordPlaceholders(collection.intervals, fillChromatic), fillChromatic === true);
|
|
205
190
|
}
|
|
206
191
|
/**
|
|
207
192
|
* Retrieves the triads for a given note collection key.
|
|
@@ -2,6 +2,7 @@ import { type CompoundInterval, type Interval, type IntervalQuality, type RootNo
|
|
|
2
2
|
import type { ChromaticIndex, ChromaticTuple } from "../data/chromatic.js";
|
|
3
3
|
import { type NoteCollectionKey } from "../data/note-collections/mod.js";
|
|
4
4
|
export type ChromaticIntervalTuple = ChromaticTuple<Interval>;
|
|
5
|
+
export declare function isOctaveInterval(interval: Interval): boolean;
|
|
5
6
|
/**
|
|
6
7
|
* Removes octave intervals (such as "8" or "♮8") from a given list of intervals.
|
|
7
8
|
* Highly useful for standardizing chord and scale definitions (scales conventionally include the octave,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervals.d.ts","sourceRoot":"","sources":["../../../src/src/utils/intervals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intervals.d.ts","sourceRoot":"","sources":["../../../src/src/utils/intervals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isOctaveInterval = isOctaveInterval;
|
|
3
4
|
exports.filterOutOctaveIntervals = filterOutOctaveIntervals;
|
|
4
5
|
exports.filterOutRootLikeIntervals = filterOutRootLikeIntervals;
|
|
5
6
|
exports.normalizeIntervalString = normalizeIntervalString;
|
|
@@ -25,6 +26,9 @@ const accidentals_js_1 = require("./accidentals.js");
|
|
|
25
26
|
const note_collections_js_1 = require("./note-collections.js");
|
|
26
27
|
const chromatic_js_1 = require("./chromatic.js");
|
|
27
28
|
const INTERVAL_NUMBER_REGEX = /\d+$/;
|
|
29
|
+
function isOctaveInterval(interval) {
|
|
30
|
+
return interval === "8" || interval === "♮8";
|
|
31
|
+
}
|
|
28
32
|
/**
|
|
29
33
|
* Removes octave intervals (such as "8" or "♮8") from a given list of intervals.
|
|
30
34
|
* Highly useful for standardizing chord and scale definitions (scales conventionally include the octave,
|
|
@@ -34,7 +38,7 @@ const INTERVAL_NUMBER_REGEX = /\d+$/;
|
|
|
34
38
|
* @returns A new array excluding any octave intervals.
|
|
35
39
|
*/
|
|
36
40
|
function filterOutOctaveIntervals(intervals) {
|
|
37
|
-
return intervals.filter((
|
|
41
|
+
return intervals.filter((interval) => !isOctaveInterval(interval));
|
|
38
42
|
}
|
|
39
43
|
/**
|
|
40
44
|
* Removes any intervals that mathematically resolve to the root note (0 modulo 12),
|