@musodojo/music-theory-data 26.4.1 → 27.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.
Files changed (98) hide show
  1. package/README.md +52 -0
  2. package/esm/src/data/chord-progressions/basic.js +19 -19
  3. package/esm/src/data/chord-progressions/blues.js +12 -12
  4. package/esm/src/data/chord-progressions/jazz.js +50 -50
  5. package/esm/src/data/chord-progressions/mod.d.ts +5 -0
  6. package/esm/src/data/chord-progressions/mod.d.ts.map +1 -1
  7. package/esm/src/data/chord-progressions/mod.js +10 -0
  8. package/esm/src/data/chord-progressions/pop.js +8 -8
  9. package/esm/src/data/chromatic.d.ts +24 -0
  10. package/esm/src/data/chromatic.d.ts.map +1 -0
  11. package/esm/src/data/chromatic.js +15 -0
  12. package/esm/src/data/colors/mod.d.ts +37 -26
  13. package/esm/src/data/colors/mod.d.ts.map +1 -1
  14. package/esm/src/data/colors/mod.js +31 -5
  15. package/esm/src/data/labels/note-label-collections.d.ts +13 -25
  16. package/esm/src/data/labels/note-label-collections.d.ts.map +1 -1
  17. package/esm/src/data/labels/note-label-collections.js +10 -10
  18. package/esm/src/data/labels/note-labels.d.ts +2 -1
  19. package/esm/src/data/labels/note-labels.d.ts.map +1 -1
  20. package/esm/src/data/mod.d.ts +1 -0
  21. package/esm/src/data/mod.d.ts.map +1 -1
  22. package/esm/src/data/mod.js +1 -0
  23. package/esm/src/utils/chords.d.ts +1 -1
  24. package/esm/src/utils/chords.d.ts.map +1 -1
  25. package/esm/src/utils/chords.js +14 -9
  26. package/esm/src/utils/chromatic.d.ts +6 -0
  27. package/esm/src/utils/chromatic.d.ts.map +1 -0
  28. package/esm/src/utils/chromatic.js +24 -0
  29. package/esm/src/utils/colors.d.ts +5 -0
  30. package/esm/src/utils/colors.d.ts.map +1 -1
  31. package/esm/src/utils/colors.js +67 -32
  32. package/esm/src/utils/conversion-registry.d.ts +1 -1
  33. package/esm/src/utils/conversion-registry.d.ts.map +1 -1
  34. package/esm/src/utils/intervals.d.ts +34 -7
  35. package/esm/src/utils/intervals.d.ts.map +1 -1
  36. package/esm/src/utils/intervals.js +5 -55
  37. package/esm/src/utils/mod.d.ts +2 -0
  38. package/esm/src/utils/mod.d.ts.map +1 -1
  39. package/esm/src/utils/mod.js +2 -0
  40. package/esm/src/utils/note-colors.d.ts +10 -0
  41. package/esm/src/utils/note-colors.d.ts.map +1 -0
  42. package/esm/src/utils/note-colors.js +13 -0
  43. package/esm/src/utils/note-names.d.ts +7 -1
  44. package/esm/src/utils/note-names.d.ts.map +1 -1
  45. package/esm/src/utils/note-names.js +6 -24
  46. package/esm/src/utils/qualities.d.ts +10 -1
  47. package/esm/src/utils/qualities.d.ts.map +1 -1
  48. package/esm/src/utils/qualities.js +10 -27
  49. package/esm/tests/colors.test.d.ts.map +1 -0
  50. package/package.json +1 -1
  51. package/script/src/data/chord-progressions/basic.js +19 -19
  52. package/script/src/data/chord-progressions/blues.js +12 -12
  53. package/script/src/data/chord-progressions/jazz.js +50 -50
  54. package/script/src/data/chord-progressions/mod.d.ts +5 -0
  55. package/script/src/data/chord-progressions/mod.d.ts.map +1 -1
  56. package/script/src/data/chord-progressions/mod.js +11 -1
  57. package/script/src/data/chord-progressions/pop.js +8 -8
  58. package/script/src/data/chromatic.d.ts +24 -0
  59. package/script/src/data/chromatic.d.ts.map +1 -0
  60. package/script/src/data/chromatic.js +18 -0
  61. package/script/src/data/colors/mod.d.ts +37 -26
  62. package/script/src/data/colors/mod.d.ts.map +1 -1
  63. package/script/src/data/colors/mod.js +35 -6
  64. package/script/src/data/labels/note-label-collections.d.ts +13 -25
  65. package/script/src/data/labels/note-label-collections.d.ts.map +1 -1
  66. package/script/src/data/labels/note-label-collections.js +10 -10
  67. package/script/src/data/labels/note-labels.d.ts +2 -1
  68. package/script/src/data/labels/note-labels.d.ts.map +1 -1
  69. package/script/src/data/mod.d.ts +1 -0
  70. package/script/src/data/mod.d.ts.map +1 -1
  71. package/script/src/data/mod.js +1 -0
  72. package/script/src/utils/chords.d.ts +1 -1
  73. package/script/src/utils/chords.d.ts.map +1 -1
  74. package/script/src/utils/chords.js +14 -9
  75. package/script/src/utils/chromatic.d.ts +6 -0
  76. package/script/src/utils/chromatic.d.ts.map +1 -0
  77. package/script/src/utils/chromatic.js +30 -0
  78. package/script/src/utils/colors.d.ts +5 -0
  79. package/script/src/utils/colors.d.ts.map +1 -1
  80. package/script/src/utils/colors.js +72 -32
  81. package/script/src/utils/conversion-registry.d.ts +1 -1
  82. package/script/src/utils/conversion-registry.d.ts.map +1 -1
  83. package/script/src/utils/intervals.d.ts +34 -7
  84. package/script/src/utils/intervals.d.ts.map +1 -1
  85. package/script/src/utils/intervals.js +5 -55
  86. package/script/src/utils/mod.d.ts +2 -0
  87. package/script/src/utils/mod.d.ts.map +1 -1
  88. package/script/src/utils/mod.js +2 -0
  89. package/script/src/utils/note-colors.d.ts +10 -0
  90. package/script/src/utils/note-colors.d.ts.map +1 -0
  91. package/script/src/utils/note-colors.js +18 -0
  92. package/script/src/utils/note-names.d.ts +7 -1
  93. package/script/src/utils/note-names.d.ts.map +1 -1
  94. package/script/src/utils/note-names.js +6 -24
  95. package/script/src/utils/qualities.d.ts +10 -1
  96. package/script/src/utils/qualities.d.ts.map +1 -1
  97. package/script/src/utils/qualities.js +10 -27
  98. package/script/tests/colors.test.d.ts.map +1 -0
package/README.md CHANGED
@@ -194,6 +194,58 @@ console.log(
194
194
  // ["CM", "FM", "GM"]
195
195
  ```
196
196
 
197
+ ## Note Colors And Chromatic Indexes
198
+
199
+ Note color collections use 12 chromatic slots. In absolute mode, each index is a
200
+ pitch class where index `0` is C and index `7` is G. In relative mode, each
201
+ index is measured from a musical root where index `0` is the root and index `7`
202
+ is the fifth.
203
+
204
+ `noteLabelCollections.noteNamesFlat` is the default label set for absolute note
205
+ colors, and `noteLabelCollections.intervalsFlat` is the default label set for
206
+ relative note colors. `ChromaticIndex` is the shared `0`-to-`11` pitch-class
207
+ shape used by chromatic tuples, note labels, root-note integers, and filled
208
+ chromatic interval helpers. `ChromaticMode` is the shared `"absolute"` or
209
+ `"relative"` mode used by note colors and label collections.
210
+
211
+ Chromatic indexes must be integers. Helpers such as `normalizeChromaticIndex`
212
+ wrap negative or large semitone values into the `0`-to-`11` range, but reject
213
+ fractional or non-finite values.
214
+
215
+ ```ts
216
+ import {
217
+ colorCollections,
218
+ getNoteColorIndex,
219
+ getNoteColorLabels,
220
+ } from "jsr:@musodojo/music-theory-data";
221
+
222
+ const absoluteIndex = getNoteColorIndex({
223
+ midi: 67,
224
+ mode: "absolute",
225
+ });
226
+ console.log(absoluteIndex);
227
+ // 7, the pitch class G
228
+
229
+ const relativeIndex = getNoteColorIndex({
230
+ midi: 69,
231
+ mode: "relative",
232
+ rootPitchClass: 2,
233
+ });
234
+ console.log(relativeIndex);
235
+ // 7, A as the fifth above D
236
+
237
+ console.log(getNoteColorLabels(colorCollections.musoDojoRootAndFifth));
238
+ // ["1", "♭2", "2", "♭3", "3", "4", "♭5", "5", "♭6", "6", "♭7", "7"]
239
+ ```
240
+
241
+ Color values may be hex strings or `null`. A `null` value means there is
242
+ intentionally no semantic color for that pitch or degree; consuming apps should
243
+ choose their own visual fallback through theme or UI settings.
244
+
245
+ Regular note collection interval arrays remain variable length because chords,
246
+ dyads, arpeggios, and scales have different natural sizes. Helpers that opt into
247
+ `fillChromatic: true` return a fixed 12-slot chromatic tuple.
248
+
197
249
  ## API Documentation
198
250
 
199
251
  For a full list of all available data, types, and utility functions, please see
@@ -15,9 +15,9 @@ const oneFourFive = {
15
15
  {
16
16
  name: "Main",
17
17
  chords: [
18
- { interval: "1", quality: "M" },
19
- { interval: "4", quality: "M" },
20
- { interval: "5", quality: "M" },
18
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
19
+ { interval: "4", quality: "M", noteCollectionKey: "major" },
20
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
21
21
  ],
22
22
  },
23
23
  ],
@@ -39,8 +39,8 @@ const oneFive = {
39
39
  {
40
40
  name: "Main",
41
41
  chords: [
42
- { interval: "1", quality: "M" },
43
- { interval: "5", quality: "M" },
42
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
43
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
44
44
  ],
45
45
  },
46
46
  ],
@@ -62,8 +62,8 @@ const oneFour = {
62
62
  {
63
63
  name: "Main",
64
64
  chords: [
65
- { interval: "1", quality: "M" },
66
- { interval: "4", quality: "M" },
65
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
66
+ { interval: "4", quality: "M", noteCollectionKey: "major" },
67
67
  ],
68
68
  },
69
69
  ],
@@ -85,10 +85,10 @@ const oneOneFiveFive = {
85
85
  {
86
86
  name: "Main",
87
87
  chords: [
88
- { interval: "1", quality: "M" },
89
- { interval: "1", quality: "M" },
90
- { interval: "5", quality: "M" },
91
- { interval: "5", quality: "M" },
88
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
89
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
90
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
91
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
92
92
  ],
93
93
  },
94
94
  ],
@@ -121,10 +121,10 @@ const oneOneFiveFiveSeven = {
121
121
  {
122
122
  name: "Main",
123
123
  chords: [
124
- { interval: "1", quality: "M" },
125
- { interval: "1", quality: "M" },
126
- { interval: "5", quality: "M" },
127
- { interval: "5", quality: "7" },
124
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
125
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
126
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
127
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
128
128
  ],
129
129
  },
130
130
  ],
@@ -146,10 +146,10 @@ const oneFourOneFive = {
146
146
  {
147
147
  name: "Main",
148
148
  chords: [
149
- { interval: "1", quality: "M" },
150
- { interval: "4", quality: "M" },
151
- { interval: "1", quality: "M" },
152
- { interval: "5", quality: "M" },
149
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
150
+ { interval: "4", quality: "M", noteCollectionKey: "major" },
151
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
152
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
153
153
  ],
154
154
  },
155
155
  ],
@@ -9,18 +9,18 @@ const twelveBarBlues = {
9
9
  {
10
10
  name: "Main",
11
11
  chords: [
12
- { interval: "1", quality: "7" },
13
- { interval: "1", quality: "7" },
14
- { interval: "1", quality: "7" },
15
- { interval: "1", quality: "7" },
16
- { interval: "4", quality: "7" },
17
- { interval: "4", quality: "7" },
18
- { interval: "1", quality: "7" },
19
- { interval: "1", quality: "7" },
20
- { interval: "5", quality: "7" },
21
- { interval: "4", quality: "7" },
22
- { interval: "1", quality: "7" },
23
- { interval: "5", quality: "7" },
12
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
13
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
14
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
15
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
16
+ { interval: "4", quality: "7", noteCollectionKey: "dominant7" },
17
+ { interval: "4", quality: "7", noteCollectionKey: "dominant7" },
18
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
19
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
20
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
21
+ { interval: "4", quality: "7", noteCollectionKey: "dominant7" },
22
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
23
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
24
24
  ],
25
25
  },
26
26
  ],
@@ -15,9 +15,9 @@ const twoFiveOneMajor = {
15
15
  {
16
16
  name: "Main",
17
17
  chords: [
18
- { interval: "2", quality: "m7" },
19
- { interval: "5", quality: "7" },
20
- { interval: "1", quality: "M7" },
18
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
19
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
20
+ { interval: "1", quality: "M7", noteCollectionKey: "major7" },
21
21
  ],
22
22
  },
23
23
  ],
@@ -33,9 +33,9 @@ const minorTwoFiveOne = {
33
33
  {
34
34
  name: "Main",
35
35
  chords: [
36
- { interval: "2", quality: "ø7" },
37
- { interval: "5", quality: "7" },
38
- { interval: "1", quality: "m" },
36
+ { interval: "2", quality: "ø7", noteCollectionKey: "halfDiminished7" },
37
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
38
+ { interval: "1", quality: "m", noteCollectionKey: "minor" },
39
39
  ],
40
40
  },
41
41
  ],
@@ -57,53 +57,53 @@ const rhythmChanges = {
57
57
  {
58
58
  name: "A1",
59
59
  chords: [
60
- { interval: "1", quality: "M7" },
61
- { interval: "6", quality: "m7" },
62
- { interval: "2", quality: "m7" },
63
- { interval: "5", quality: "7" },
64
- { interval: "3", quality: "m7" },
65
- { interval: "6", quality: "7" },
66
- { interval: "2", quality: "m7" },
67
- { interval: "5", quality: "7" },
60
+ { interval: "1", quality: "M7", noteCollectionKey: "major7" },
61
+ { interval: "6", quality: "m7", noteCollectionKey: "minor7" },
62
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
63
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
64
+ { interval: "3", quality: "m7", noteCollectionKey: "minor7" },
65
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
66
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
67
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
68
68
  ],
69
69
  },
70
70
  {
71
71
  name: "A2",
72
72
  chords: [
73
- { interval: "1", quality: "M7" },
74
- { interval: "6", quality: "m7" },
75
- { interval: "2", quality: "m7" },
76
- { interval: "5", quality: "7" },
77
- { interval: "3", quality: "m7" },
78
- { interval: "6", quality: "7" },
79
- { interval: "2", quality: "m7" },
80
- { interval: "5", quality: "7" },
73
+ { interval: "1", quality: "M7", noteCollectionKey: "major7" },
74
+ { interval: "6", quality: "m7", noteCollectionKey: "minor7" },
75
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
76
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
77
+ { interval: "3", quality: "m7", noteCollectionKey: "minor7" },
78
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
79
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
80
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
81
81
  ],
82
82
  },
83
83
  {
84
84
  name: "B",
85
85
  chords: [
86
- { interval: "3", quality: "7" },
87
- { interval: "3", quality: "7" },
88
- { interval: "6", quality: "7" },
89
- { interval: "6", quality: "7" },
90
- { interval: "2", quality: "7" },
91
- { interval: "2", quality: "7" },
92
- { interval: "5", quality: "7" },
93
- { interval: "5", quality: "7" },
86
+ { interval: "3", quality: "7", noteCollectionKey: "dominant7" },
87
+ { interval: "3", quality: "7", noteCollectionKey: "dominant7" },
88
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
89
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
90
+ { interval: "2", quality: "7", noteCollectionKey: "dominant7" },
91
+ { interval: "2", quality: "7", noteCollectionKey: "dominant7" },
92
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
93
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
94
94
  ],
95
95
  },
96
96
  {
97
97
  name: "A3",
98
98
  chords: [
99
- { interval: "1", quality: "M7" },
100
- { interval: "6", quality: "m7" },
101
- { interval: "2", quality: "m7" },
102
- { interval: "5", quality: "7" },
103
- { interval: "3", quality: "m7" },
104
- { interval: "6", quality: "7" },
105
- { interval: "2", quality: "m7" },
106
- { interval: "5", quality: "7" },
99
+ { interval: "1", quality: "M7", noteCollectionKey: "major7" },
100
+ { interval: "6", quality: "m7", noteCollectionKey: "minor7" },
101
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
102
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
103
+ { interval: "3", quality: "m7", noteCollectionKey: "minor7" },
104
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
105
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
106
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
107
107
  ],
108
108
  },
109
109
  ],
@@ -119,18 +119,18 @@ const jazzBluesBasic = {
119
119
  {
120
120
  name: "Main",
121
121
  chords: [
122
- { interval: "1", quality: "7" },
123
- { interval: "4", quality: "7" },
124
- { interval: "1", quality: "7" },
125
- { interval: "1", quality: "7" },
126
- { interval: "4", quality: "7" },
127
- { interval: "♯4", quality: "°7" },
128
- { interval: "1", quality: "7" },
129
- { interval: "6", quality: "7" },
130
- { interval: "2", quality: "m7" },
131
- { interval: "5", quality: "7" },
132
- { interval: "1", quality: "7" },
133
- { interval: "5", quality: "7" },
122
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
123
+ { interval: "4", quality: "7", noteCollectionKey: "dominant7" },
124
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
125
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
126
+ { interval: "4", quality: "7", noteCollectionKey: "dominant7" },
127
+ { interval: "♯4", quality: "°7", noteCollectionKey: "diminished7" },
128
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
129
+ { interval: "6", quality: "7", noteCollectionKey: "dominant7" },
130
+ { interval: "2", quality: "m7", noteCollectionKey: "minor7" },
131
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
132
+ { interval: "1", quality: "7", noteCollectionKey: "dominant7" },
133
+ { interval: "5", quality: "7", noteCollectionKey: "dominant7" },
134
134
  ],
135
135
  },
136
136
  ],
@@ -1,4 +1,6 @@
1
1
  import type { ChordProgressionTemplateCategory, ChordProgressionTemplateType } from "../../types/chord-progressions";
2
+ import type { ChordQuality } from "../../types/chords";
3
+ import type { NoteCollectionKey } from "../note-collections/mod.js";
2
4
  export { basicChordProgressionTemplates } from "./basic.js";
3
5
  export { bluesChordProgressionTemplates } from "./blues.js";
4
6
  export { jazzChordProgressionTemplates } from "./jazz.js";
@@ -19,6 +21,9 @@ export declare const chordProgressionTemplates: {
19
21
  readonly oneFourOneFive: import("../../mod.js").ChordProgressionTemplate;
20
22
  };
21
23
  export type ChordProgressionTemplateKey = keyof typeof chordProgressionTemplates;
24
+ export type ChordProgressionStepNoteCollectionKeyMap = Partial<Record<ChordQuality, NoteCollectionKey>>;
25
+ /** Canonical chord/arpeggio collection keys for chord qualities used by progression steps. */
26
+ export declare const chordProgressionStepNoteCollectionKeys: ChordProgressionStepNoteCollectionKeyMap;
22
27
  export declare const groupedChordProgressionTemplates: {
23
28
  readonly basicChordProgressionTemplates: {
24
29
  readonly oneFourFive: import("../../mod.js").ChordProgressionTemplate;
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/chord-progressions/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gCAAgC,EAChC,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAExD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;CAK5B,CAAC;AAEX,MAAM,MAAM,2BAA2B,GACrC,MAAM,OAAO,yBAAyB,CAAC;AAEzC,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAC1C,MAAM,OAAO,gCAAgC,CAAC;AAEhD,kGAAkG;AAClG,eAAO,MAAM,sCAAsC,EAAE,MAAM,CACzD,gCAAgC,EAChC;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAsBO,CAAC;AAEX,4FAA4F;AAC5F,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAC3D,gCAAgC,EAChC;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAMO,CAAC;AAEX,gGAAgG;AAChG,eAAO,MAAM,oCAAoC,EAAE,MAAM,CACvD,4BAA4B,EAC5B;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAgBO,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/chord-progressions/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gCAAgC,EAChC,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAExD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;CAK5B,CAAC;AAEX,MAAM,MAAM,2BAA2B,GACrC,MAAM,OAAO,yBAAyB,CAAC;AAEzC,MAAM,MAAM,wCAAwC,GAAG,OAAO,CAC5D,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,CACxC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,sCAAsC,EACjD,wCAQU,CAAC;AAEb,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAC1C,MAAM,OAAO,gCAAgC,CAAC;AAEhD,kGAAkG;AAClG,eAAO,MAAM,sCAAsC,EAAE,MAAM,CACzD,gCAAgC,EAChC;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAsBO,CAAC;AAEX,4FAA4F;AAC5F,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAC3D,gCAAgC,EAChC;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAMO,CAAC;AAEX,gGAAgG;AAChG,eAAO,MAAM,oCAAoC,EAAE,MAAM,CACvD,4BAA4B,EAC5B;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAgBO,CAAC"}
@@ -12,6 +12,16 @@ export const chordProgressionTemplates = {
12
12
  ...bluesChordProgressionTemplates,
13
13
  ...jazzChordProgressionTemplates,
14
14
  };
15
+ /** Canonical chord/arpeggio collection keys for chord qualities used by progression steps. */
16
+ export const chordProgressionStepNoteCollectionKeys = {
17
+ M: "major",
18
+ m: "minor",
19
+ "7": "dominant7",
20
+ M7: "major7",
21
+ m7: "minor7",
22
+ "ø7": "halfDiminished7",
23
+ "°7": "diminished7",
24
+ };
15
25
  export const groupedChordProgressionTemplates = {
16
26
  basicChordProgressionTemplates,
17
27
  popChordProgressionTemplates,
@@ -9,10 +9,10 @@ const dooWop = {
9
9
  {
10
10
  name: "Main",
11
11
  chords: [
12
- { interval: "1", quality: "M" },
13
- { interval: "6", quality: "m" },
14
- { interval: "4", quality: "M" },
15
- { interval: "5", quality: "M" },
12
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
13
+ { interval: "6", quality: "m", noteCollectionKey: "minor" },
14
+ { interval: "4", quality: "M", noteCollectionKey: "major" },
15
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
16
16
  ],
17
17
  },
18
18
  ],
@@ -28,10 +28,10 @@ const axisProgression = {
28
28
  {
29
29
  name: "Main",
30
30
  chords: [
31
- { interval: "1", quality: "M" },
32
- { interval: "5", quality: "M" },
33
- { interval: "6", quality: "m" },
34
- { interval: "4", quality: "M" },
31
+ { interval: "1", quality: "M", noteCollectionKey: "major" },
32
+ { interval: "5", quality: "M", noteCollectionKey: "major" },
33
+ { interval: "6", quality: "m", noteCollectionKey: "minor" },
34
+ { interval: "4", quality: "M", noteCollectionKey: "major" },
35
35
  ],
36
36
  },
37
37
  ],
@@ -0,0 +1,24 @@
1
+ export declare const CHROMATIC_NOTE_COUNT: 12;
2
+ /** A zero-indexed chromatic pitch-class or relative degree slot. */
3
+ export type ChromaticIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
4
+ /** How a chromatic index should be interpreted. */
5
+ export type ChromaticMode = "absolute" | "relative";
6
+ /** A fixed 12-slot tuple indexed by chromatic pitch class or relative degree. */
7
+ export type ChromaticTuple<T> = readonly [
8
+ T,
9
+ T,
10
+ T,
11
+ T,
12
+ T,
13
+ T,
14
+ T,
15
+ T,
16
+ T,
17
+ T,
18
+ T,
19
+ T
20
+ ];
21
+ export declare const CHROMATIC_INDEXES: ChromaticTuple<ChromaticIndex>;
22
+ /** A variable-length set of chromatic indexes, such as the pitch classes in a scale or dyad. */
23
+ export type ChromaticIndexSet = readonly ChromaticIndex[];
24
+ //# sourceMappingURL=chromatic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chromatic.d.ts","sourceRoot":"","sources":["../../../src/src/data/chromatic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,EAAG,EAAW,CAAC;AAEhD,oEAAoE;AACpE,MAAM,MAAM,cAAc,GACtB,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,EAAE,GACF,EAAE,CAAC;AAEP,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpD,iFAAiF;AACjF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,SAAS;IACvC,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;CACF,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,cAAc,CAanD,CAAC;AAEX,gGAAgG;AAChG,MAAM,MAAM,iBAAiB,GAAG,SAAS,cAAc,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const CHROMATIC_NOTE_COUNT = 12;
2
+ export const CHROMATIC_INDEXES = [
3
+ 0,
4
+ 1,
5
+ 2,
6
+ 3,
7
+ 4,
8
+ 5,
9
+ 6,
10
+ 7,
11
+ 8,
12
+ 9,
13
+ 10,
14
+ 11,
15
+ ];
@@ -1,51 +1,62 @@
1
- export type Color = string | null;
2
- export type ColorGroup = readonly [
3
- Color,
4
- Color,
5
- Color,
6
- Color,
7
- Color,
8
- Color,
9
- Color,
10
- Color,
11
- Color,
12
- Color,
13
- Color,
14
- Color
15
- ];
16
- export interface ColorCollection {
17
- name: string;
18
- description: string;
19
- relative: boolean;
20
- colors: ColorGroup;
1
+ import { type NoteLabelCollectionKey, type NoteLabelGroup } from "../labels/note-label-collections.js";
2
+ import type { ChromaticMode, ChromaticTuple } from "../chromatic.js";
3
+ export type NoteColorMode = ChromaticMode;
4
+ export type NoteColorValue = string | null;
5
+ export type NoteColorTuple = ChromaticTuple<NoteColorValue>;
6
+ export interface NoteColorCollection {
7
+ readonly name: string;
8
+ readonly shortName?: string;
9
+ readonly description: string;
10
+ readonly mode: NoteColorMode;
11
+ readonly labelCollectionKey?: NoteLabelCollectionKey;
12
+ readonly colors: NoteColorTuple;
21
13
  }
14
+ export type Color = NoteColorValue;
15
+ export type ColorGroup = NoteColorTuple;
16
+ export type ColorCollection = NoteColorCollection;
17
+ export type DefaultNoteColorLabelCollectionKeys = Readonly<Record<NoteColorMode, NoteLabelCollectionKey>> & Readonly<{
18
+ absolute: "noteNamesFlat";
19
+ relative: "intervalsFlat";
20
+ }>;
21
+ export declare const defaultNoteColorLabelCollectionKeys: DefaultNoteColorLabelCollectionKeys;
22
+ export declare function getDefaultNoteColorLabelCollectionKey(mode: NoteColorMode): NoteLabelCollectionKey;
23
+ export declare function getNoteColorLabelCollectionKey(collection: NoteColorCollection): NoteLabelCollectionKey;
24
+ export declare function getNoteColorLabels(collection: NoteColorCollection): NoteLabelGroup;
22
25
  declare const _colorCollections: {
23
26
  readonly musoDojo: {
24
27
  readonly name: "Muso Dojo Colors";
25
- readonly description: "A custom set of colors, designed by Muso Dojo.";
26
- readonly relative: false;
28
+ readonly shortName: "Muso Dojo";
29
+ readonly description: "A custom absolute chromatic palette designed by Muso Dojo.";
30
+ readonly mode: "absolute";
31
+ readonly labelCollectionKey: "noteNamesFlat";
27
32
  readonly colors: readonly ["#ED2929", "#9F000F", "#78C7C7", "#00008B", "#FF9933", "#EBEB19", "#286704", "#99CC33", "#660099", "#CC00FF", "#BF6A1F", "#FF9EE6"];
28
33
  };
29
34
  readonly musoDojoRoot: {
30
35
  readonly name: "Muso Dojo Root";
36
+ readonly shortName: "Root";
31
37
  readonly description: "Use the red color from Muso Dojo's colors on just the root note.";
32
- readonly relative: true;
38
+ readonly mode: "relative";
39
+ readonly labelCollectionKey: "intervalsFlat";
33
40
  readonly colors: readonly ["#ED2929", null, null, null, null, null, null, null, null, null, null, null];
34
41
  };
35
42
  readonly musoDojoRootAndFifth: {
36
43
  readonly name: "Muso Dojo Root and Fifth";
44
+ readonly shortName: "Root and Fifth";
37
45
  readonly description: "Use the red-and-green colors from Muso Dojo's colors on the root-and-fifth notes.";
38
- readonly relative: true;
46
+ readonly mode: "relative";
47
+ readonly labelCollectionKey: "intervalsFlat";
39
48
  readonly colors: readonly ["#ED2929", null, null, null, null, null, null, "#99CC33", null, null, null, null];
40
49
  };
41
50
  readonly boomwhackers: {
42
51
  readonly name: "Boomwhackers";
52
+ readonly shortName: "Boomwhackers";
43
53
  readonly description: "The colors used by Boomwhackers.";
44
- readonly relative: false;
54
+ readonly mode: "absolute";
55
+ readonly labelCollectionKey: "noteNamesFlat";
45
56
  readonly colors: readonly ["#E21C48", "#F26622", "#F99D1C", "#FFCC33", "#FFF32B", "#BCD85F", "#62BC47", "#009C95", "#0071BB", "#5E50A1", "#8D5BA6", "#CF3E96"];
46
57
  };
47
58
  };
48
59
  export type ColorCollectionKey = keyof typeof _colorCollections;
49
- export declare const colorCollections: Record<ColorCollectionKey, ColorCollection>;
60
+ export declare const colorCollections: Record<ColorCollectionKey, NoteColorCollection>;
50
61
  export {};
51
62
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/colors/mod.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAElC,MAAM,MAAM,UAAU,GAAG,SAAS;IAChC,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CA+Eb,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEhE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,eAAe,CACtD,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/colors/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,cAAc,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAC1C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAC3C,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,MAAM,KAAK,GAAG,cAAc,CAAC;AACnC,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,MAAM,MAAM,mCAAmC,GAC3C,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,GACvD,QAAQ,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC,CAAC;AAEL,eAAO,MAAM,mCAAmC,EAC9C,mCAGC,CAAC;AAEJ,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,aAAa,GAClB,sBAAsB,CAExB;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,mBAAmB,GAC9B,sBAAsB,CAMxB;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,mBAAmB,GAC9B,cAAc,CAGhB;AAED,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFb,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEhE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,kBAAkB,EAClB,mBAAmB,CACA,CAAC"}
@@ -1,8 +1,28 @@
1
+ import { noteLabelCollections, } from "../labels/note-label-collections.js";
2
+ export const defaultNoteColorLabelCollectionKeys = {
3
+ absolute: "noteNamesFlat",
4
+ relative: "intervalsFlat",
5
+ };
6
+ export function getDefaultNoteColorLabelCollectionKey(mode) {
7
+ return defaultNoteColorLabelCollectionKeys[mode];
8
+ }
9
+ export function getNoteColorLabelCollectionKey(collection) {
10
+ if (collection.labelCollectionKey) {
11
+ return collection.labelCollectionKey;
12
+ }
13
+ return getDefaultNoteColorLabelCollectionKey(collection.mode);
14
+ }
15
+ export function getNoteColorLabels(collection) {
16
+ return noteLabelCollections[getNoteColorLabelCollectionKey(collection)]
17
+ .labels;
18
+ }
1
19
  const _colorCollections = {
2
20
  musoDojo: {
3
21
  name: "Muso Dojo Colors",
4
- description: "A custom set of colors, designed by Muso Dojo.",
5
- relative: false,
22
+ shortName: "Muso Dojo",
23
+ description: "A custom absolute chromatic palette designed by Muso Dojo.",
24
+ mode: "absolute",
25
+ labelCollectionKey: "noteNamesFlat",
6
26
  colors: [
7
27
  "#ED2929",
8
28
  "#9F000F",
@@ -20,8 +40,10 @@ const _colorCollections = {
20
40
  },
21
41
  musoDojoRoot: {
22
42
  name: "Muso Dojo Root",
43
+ shortName: "Root",
23
44
  description: "Use the red color from Muso Dojo's colors on just the root note.",
24
- relative: true,
45
+ mode: "relative",
46
+ labelCollectionKey: "intervalsFlat",
25
47
  colors: [
26
48
  "#ED2929",
27
49
  null,
@@ -39,8 +61,10 @@ const _colorCollections = {
39
61
  },
40
62
  musoDojoRootAndFifth: {
41
63
  name: "Muso Dojo Root and Fifth",
64
+ shortName: "Root and Fifth",
42
65
  description: "Use the red-and-green colors from Muso Dojo's colors on the root-and-fifth notes.",
43
- relative: true,
66
+ mode: "relative",
67
+ labelCollectionKey: "intervalsFlat",
44
68
  colors: [
45
69
  "#ED2929",
46
70
  null,
@@ -58,8 +82,10 @@ const _colorCollections = {
58
82
  },
59
83
  boomwhackers: {
60
84
  name: "Boomwhackers",
85
+ shortName: "Boomwhackers",
61
86
  description: "The colors used by Boomwhackers.",
62
- relative: false,
87
+ mode: "absolute",
88
+ labelCollectionKey: "noteNamesFlat",
63
89
  colors: [
64
90
  "#E21C48",
65
91
  "#F26622",