@musodojo/music-theory-data 15.4.0 → 16.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,17 +1,87 @@
1
- # Music Theory Data
2
-
3
- ## Currently Under Review for Accuracy
1
+ # Muso Dojo | Music Theory Data
4
2
 
5
3
  **The musician-friendly TypeScript library for modes, scales, chords, and
6
4
  more.**
7
5
 
8
- A modern, Deno/TypeScript-first collection of **music theory data structures**
9
- and **utility functions** for working with modes, scales, arpeggios, chords, and
10
- beyond.
6
+ > **Note:** This library is currently under review for accuracy. Please verify
7
+ > data before use in a critical application.
8
+
9
+ ## Features
10
+
11
+ - **Rich Data Structures:** Access detailed information for scales, modes,
12
+ chords, and more, including intervals, integer notations, and common names.
13
+ - **Practical Utility Functions:** Helpers for common tasks like generating note
14
+ names from a root note and a collection key.
15
+ - **Fully Typed:** Written in TypeScript with comprehensive type definitions for
16
+ a great developer experience.
17
+ - **Deno First, NPM Ready:** A modern Deno module that is also published to npm
18
+ for use in Node.js projects.
19
+
20
+ ## Installation
21
+
22
+ ### Deno / JSR
23
+
24
+ Import directly from JSR in your Deno project:
25
+
26
+ ```ts
27
+ import * as music_theory_data from "@musodojo/music-theory-data";
28
+ ```
29
+
30
+ or
31
+
32
+ ```ts
33
+ import * as music_theory_data from "jsr:@musodojo/music-theory-data";
34
+ ```
35
+
36
+ ### Node.js / npm
37
+
38
+ Install the package from the npm registry:
39
+
40
+ ```bash
41
+ npm install @musodojo/music-theory-data
42
+ ```
43
+
44
+ Then import it into your project:
45
+
46
+ ```ts
47
+ import * as music_theory_data from "@musodojo/music-theory-data";
48
+ ```
49
+
50
+ ## Usage Example
51
+
52
+ Get the notes of a scale or the details of a mode.
53
+
54
+ ```ts
55
+ import * as music_theory_data from "jsr:@musodojo/music-theory-data";
56
+
57
+ // Get the notes of A Harmonic Minor
58
+ const notes = music_theory_data.getNoteNamesFromRootAndCollectionKey(
59
+ "A",
60
+ "harmonicMinor",
61
+ );
62
+ console.log(notes);
63
+ // ["A", "B", "C", "D", "E", "F", "G♯", "A"]
64
+
65
+ // Get the full data structure for the Ionian mode (Major Scale)
66
+ const ionian = music_theory_data.noteCollections.ionian;
67
+
68
+ console.log(ionian.primaryName);
69
+ // "Major"
70
+
71
+ console.log(ionian.intervals);
72
+ // ["1", "2", "3", "4", "5", "6", "7", "8"]
73
+
74
+ // Log the array of all available Note Collection Keys
75
+ console.log(Object.keys(music_theory_data.noteCollections));
76
+ // ["ionian", "dorian", "phrygian", ...]
77
+
78
+ // Log the array of all available Grouped Note Collections Keys
79
+ console.log(Object.keys(music_theory_data.groupedNoteCollections));
80
+ // ["diatonicModes", "pentatonicVariants", ...]
81
+ ```
11
82
 
12
- Built for **musicians, educators, and creative coders**, it goes beyond raw note
13
- lists — providing rich, structured metadata and practical helpers for
14
- **analysis, composition, and interactive tools**.
83
+ ## API Documentation
15
84
 
16
- > **Goal:** To be _the_ library that powers next-generation interactive music
17
- > tools, practice apps, and educational software.
85
+ For a full list of all available data, types, and utility functions, please see
86
+ the
87
+ **[auto-generated API documentation on JSR](https://jsr.io/@musodojo/music-theory-data/doc)**.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@musodojo/music-theory-data",
3
- "version": "15.4.0",
3
+ "version": "16.0.7",
4
4
  "description": "The musician-friendly TypeScript library for modes, scales, chords, and more.",
5
5
  "keywords": [
6
6
  "music",
@@ -12,7 +12,7 @@
12
12
  "main": "src/mod.ts",
13
13
  "repository": {
14
14
  "type": "git",
15
- "url": "https://github.com/conor-dowdall/music-theory-data.git"
15
+ "url": "git+https://github.com/conor-dowdall/music-theory-data.git"
16
16
  },
17
17
  "bugs": {
18
18
  "url": "https://github.com/conor-dowdall/music-theory-data/issues"
@@ -366,76 +366,106 @@ export const compoundToSimpleIntervalMap: ReadonlyMap<
366
366
  ][],
367
367
  );
368
368
 
369
- export type IntervalQualityType = "d" | "m" | "P" | "M" | "A";
369
+ export type IntervalQualityType = "dd" | "d" | "m" | "P" | "M" | "A" | "AA";
370
370
 
371
371
  const _intervalQualityToIntegerMap = {
372
+ "dd1": -2,
372
373
  "d1": -1,
373
374
  "P1": 0,
374
375
  "A1": 1,
376
+ "AA1": 2,
375
377
 
378
+ "dd2": -1,
376
379
  "d2": 0,
377
380
  "m2": 1,
378
381
  "M2": 2,
379
382
  "A2": 3,
383
+ "AA2": 4,
380
384
 
385
+ "dd3": 1,
381
386
  "d3": 2,
382
387
  "m3": 3,
383
388
  "M3": 4,
384
389
  "A3": 5,
390
+ "AA3": 6,
385
391
 
392
+ "dd4": 3,
386
393
  "d4": 4,
387
394
  "P4": 5,
388
395
  "A4": 6,
396
+ "AA4": 7,
389
397
 
398
+ "dd5": 5,
390
399
  "d5": 6,
391
400
  "P5": 7,
392
401
  "A5": 8,
402
+ "AA5": 9,
393
403
 
404
+ "dd6": 6,
394
405
  "d6": 7,
395
406
  "m6": 8,
396
407
  "M6": 9,
397
408
  "A6": 10,
409
+ "AA6": 11,
398
410
 
411
+ "dd7": 8,
399
412
  "d7": 9,
400
413
  "m7": 10,
401
414
  "M7": 11,
402
415
  "A7": 12,
416
+ "AA7": 13,
403
417
 
418
+ "dd8": 10,
404
419
  "d8": 11,
405
420
  "P8": 12,
406
421
  "A8": 13,
422
+ "AA8": 14,
407
423
 
424
+ "dd9": 11,
408
425
  "d9": 12,
409
426
  "m9": 13,
410
427
  "M9": 14,
411
428
  "A9": 15,
429
+ "AA9": 16,
412
430
 
431
+ "dd10": 13,
413
432
  "d10": 14,
414
433
  "m10": 15,
415
434
  "M10": 16,
416
435
  "A10": 17,
436
+ "AA10": 18,
417
437
 
438
+ "dd11": 15,
418
439
  "d11": 16,
419
440
  "P11": 17,
420
441
  "A11": 19,
442
+ "AA11": 20,
421
443
 
444
+ "dd12": 17,
422
445
  "d12": 18,
423
446
  "P12": 19,
424
447
  "A12": 20,
448
+ "AA12": 21,
425
449
 
450
+ "dd13": 18,
426
451
  "d13": 19,
427
452
  "m13": 20,
428
453
  "M13": 21,
429
454
  "A13": 22,
455
+ "AA13": 23,
430
456
 
457
+ "dd14": 20,
431
458
  "d14": 21,
432
459
  "m14": 22,
433
460
  "M14": 23,
434
461
  "A14": 24,
462
+ "AA14": 25,
435
463
 
464
+ "dd15": 22,
436
465
  "d15": 23,
437
466
  "P15": 24,
438
467
  "A15": 25,
468
+ "AA15": 26,
439
469
  } as const;
440
470
 
441
471
  export type IntervalQuality = keyof typeof _intervalQualityToIntegerMap;
@@ -449,3 +479,124 @@ export const intervalQualityToIntegerMap: ReadonlyMap<
449
479
  number,
450
480
  ][],
451
481
  );
482
+
483
+ //TODO: add beyond an octave
484
+ const _intervalToIntervalQualityMap = {
485
+ "𝄫1": "dd1",
486
+ "♭1": "d1",
487
+ "1": "P1",
488
+ "♮1": "P1",
489
+ "♯1": "A1",
490
+ "𝄪1": "AA1",
491
+
492
+ "𝄫2": "dd2",
493
+ "♭2": "m2",
494
+ "2": "M2",
495
+ "♮2": "M2",
496
+ "♯2": "A2",
497
+ "𝄪2": "AA2",
498
+
499
+ "𝄫3": "dd3",
500
+ "♭3": "m3",
501
+ "3": "M3",
502
+ "♮3": "M3",
503
+ "♯3": "A3",
504
+ "𝄪3": "AA3",
505
+
506
+ "𝄫4": "dd4",
507
+ "♭4": "d4",
508
+ "4": "P4",
509
+ "♮4": "P4",
510
+ "♯4": "A4",
511
+ "𝄪4": "AA4",
512
+
513
+ "𝄫5": "dd5",
514
+ "♭5": "d5",
515
+ "5": "P5",
516
+ "♮5": "P5",
517
+ "♯5": "A5",
518
+ "𝄪5": "AA5",
519
+
520
+ "𝄫6": "dd6",
521
+ "♭6": "m6",
522
+ "6": "M6",
523
+ "♮6": "M6",
524
+ "♯6": "A6",
525
+ "𝄪6": "AA6",
526
+
527
+ "𝄫7": "dd7",
528
+ "♭7": "m7",
529
+ "7": "M7",
530
+ "♮7": "M7",
531
+ "♯7": "A7",
532
+ "𝄪7": "AA7",
533
+ } as const;
534
+
535
+ export const intervalToIntervalQualityMap: ReadonlyMap<
536
+ Interval,
537
+ IntervalQuality
538
+ > = new Map(
539
+ Object.entries(_intervalToIntervalQualityMap) as [
540
+ Interval,
541
+ IntervalQuality,
542
+ ][],
543
+ );
544
+
545
+ //TODO: add beyond an octave
546
+ const _intervalQualityToIntervalMap = {
547
+ "dd1": "𝄫1",
548
+ "d1": "♭1",
549
+ "P1": "1",
550
+ "A1": "♯1",
551
+ "AA1": "𝄪1",
552
+
553
+ "dd2": "𝄫2",
554
+ "d2": "♭2",
555
+ "m2": "♭2",
556
+ "M2": "2",
557
+ "A2": "♯2",
558
+ "AA2": "𝄪2",
559
+
560
+ "dd3": "𝄫3",
561
+ "d3": "♭3",
562
+ "m3": "♭3",
563
+ "M3": "3",
564
+ "A3": "♯3",
565
+ "AA3": "𝄪3",
566
+
567
+ "dd4": "𝄫4",
568
+ "d4": "♭4",
569
+ "P4": "4",
570
+ "A4": "♯4",
571
+ "AA4": "𝄪4",
572
+
573
+ "dd5": "𝄫5",
574
+ "d5": "♭5",
575
+ "P5": "5",
576
+ "A5": "♯5",
577
+ "AA5": "𝄪5",
578
+
579
+ "dd6": "𝄫6",
580
+ "d6": "♭6",
581
+ "m6": "♭6",
582
+ "M6": "6",
583
+ "A6": "♯6",
584
+ "AA6": "𝄪6",
585
+
586
+ "dd7": "𝄫7",
587
+ "d7": "♭7",
588
+ "m7": "♭7",
589
+ "M7": "7",
590
+ "A7": "♯7",
591
+ "AA7": "𝄪7",
592
+ } as const;
593
+
594
+ export const intervalQualityToIntervalMap: ReadonlyMap<
595
+ IntervalQuality,
596
+ Interval
597
+ > = new Map(
598
+ Object.entries(_intervalQualityToIntervalMap) as [
599
+ IntervalQuality,
600
+ Interval,
601
+ ][],
602
+ );
@@ -1,6 +1,7 @@
1
- import type { NoteCollection } from "../../types/note-collections.d.ts";
1
+ import type { ChordCollection } from "../../types/note-collections.d.ts";
2
2
 
3
- const augmentedTriad: NoteCollection = {
3
+ const augmentedTriad: ChordCollection = {
4
+ category: "chord",
4
5
  primaryName: "aug",
5
6
  names: ["aug", "+", "Augmented Triad"],
6
7
  intervals: ["1", "3", "♯5"],
@@ -11,7 +12,20 @@ const augmentedTriad: NoteCollection = {
11
12
  patternShort: ["M3", "M3"],
12
13
  } as const;
13
14
 
14
- const italian6: NoteCollection = {
15
+ const augmented7: ChordCollection = {
16
+ category: "chord",
17
+ primaryName: "aug7",
18
+ names: ["aug7", "+7", "7♯5", "Augmented Seventh"],
19
+ intervals: ["1", "3", "♯5", "♭7"],
20
+ integers: [0, 4, 8, 10],
21
+ type: ["augmented", "dominant", "chord", "arpeggio", "tetrad"],
22
+ characteristics: ["tense", "unstable", "dissonant", "dominant function"],
23
+ pattern: ["major third", "major third", "minor second"],
24
+ patternShort: ["M3", "M3", "m2"],
25
+ } as const;
26
+
27
+ const italian6: ChordCollection = {
28
+ category: "chord",
15
29
  primaryName: "It+6",
16
30
  names: ["It+6", "Italian 6th"],
17
31
  intervals: ["1", "3", "♭6"],
@@ -26,7 +40,8 @@ const italian6: NoteCollection = {
26
40
  patternShort: ["M3", "d4"],
27
41
  } as const;
28
42
 
29
- const french6: NoteCollection = {
43
+ const french6: ChordCollection = {
44
+ category: "chord",
30
45
  primaryName: "Fr+6",
31
46
  names: ["Fr+6", "French 6th"],
32
47
  intervals: ["1", "3", "♯4", "♭6"],
@@ -42,7 +57,8 @@ const french6: NoteCollection = {
42
57
  patternShort: ["M3", "m2", "M2"],
43
58
  } as const;
44
59
 
45
- const german6: NoteCollection = {
60
+ const german6: ChordCollection = {
61
+ category: "chord",
46
62
  primaryName: "Ger+6",
47
63
  names: ["Ger+6", "German 6th"],
48
64
  intervals: ["1", "3", "5", "♭6"],
@@ -58,25 +74,15 @@ const german6: NoteCollection = {
58
74
  patternShort: ["M3", "m3", "A1"],
59
75
  } as const;
60
76
 
61
- const augmented7: NoteCollection = {
62
- primaryName: "aug7",
63
- names: ["aug7", "+7", "7♯5", "Augmented Seventh"],
64
- intervals: ["1", "3", "♯5", "♭7"],
65
- integers: [0, 4, 8, 10],
66
- type: ["augmented", "dominant", "chord", "arpeggio", "tetrad"],
67
- characteristics: ["tense", "unstable", "dissonant", "dominant function"],
68
- pattern: ["major third", "major third", "minor second"],
69
- patternShort: ["M3", "M3", "m2"],
70
- } as const;
71
-
72
- export const _augmented = {
77
+ export const _augmentedVariants = {
73
78
  augmentedTriad,
79
+ augmented7,
74
80
  italian6,
75
81
  french6,
76
82
  german6,
77
- augmented7,
78
83
  } as const;
79
84
 
80
- export type AugmentedKey = keyof typeof _augmented;
85
+ export type AugmentedVariantKey = keyof typeof _augmentedVariants;
81
86
 
82
- export const augmented: Record<AugmentedKey, NoteCollection> = _augmented;
87
+ export const augmentedVariants: Record<AugmentedVariantKey, ChordCollection> =
88
+ _augmentedVariants;
@@ -1,6 +1,8 @@
1
- import type { NoteCollection } from "../../types/note-collections.d.ts";
1
+ import type { ScaleCollection } from "../../types/note-collections.d.ts";
2
2
 
3
- const ionian: NoteCollection = {
3
+ const ionian: ScaleCollection = {
4
+ category: "scale",
5
+ rotation: 0,
4
6
  primaryName: "Major",
5
7
  names: [
6
8
  "Major",
@@ -11,7 +13,6 @@ const ionian: NoteCollection = {
11
13
  ],
12
14
  intervals: ["1", "2", "3", "4", "5", "6", "7", "8"],
13
15
  integers: [0, 2, 4, 5, 7, 9, 11],
14
- rotation: 0,
15
16
  type: [
16
17
  "major",
17
18
  "ionian",
@@ -40,7 +41,9 @@ const ionian: NoteCollection = {
40
41
  patternShort: ["W", "W", "H", "W", "W", "W", "H"],
41
42
  } as const;
42
43
 
43
- const dorian: NoteCollection = {
44
+ const dorian: ScaleCollection = {
45
+ category: "scale",
46
+ rotation: 1,
44
47
  primaryName: "Dorian",
45
48
  names: [
46
49
  "Dorian",
@@ -49,7 +52,6 @@ const dorian: NoteCollection = {
49
52
  ],
50
53
  intervals: ["1", "2", "♭3", "4", "5", "6", "♭7", "8"],
51
54
  integers: [0, 2, 3, 5, 7, 9, 10],
52
- rotation: 1,
53
55
  type: [
54
56
  "minor",
55
57
  "dorian",
@@ -78,7 +80,9 @@ const dorian: NoteCollection = {
78
80
  patternShort: ["W", "H", "W", "W", "W", "H", "W"],
79
81
  } as const;
80
82
 
81
- const phrygian: NoteCollection = {
83
+ const phrygian: ScaleCollection = {
84
+ category: "scale",
85
+ rotation: 2,
82
86
  primaryName: "Phrygian",
83
87
  names: [
84
88
  "Phrygian",
@@ -87,7 +91,6 @@ const phrygian: NoteCollection = {
87
91
  ],
88
92
  intervals: ["1", "♭2", "♭3", "4", "5", "♭6", "♭7", "8"],
89
93
  integers: [0, 1, 3, 5, 7, 8, 10],
90
- rotation: 2,
91
94
  type: [
92
95
  "minor",
93
96
  "phrygian",
@@ -114,12 +117,13 @@ const phrygian: NoteCollection = {
114
117
  patternShort: ["H", "W", "W", "W", "H", "W", "W"],
115
118
  } as const;
116
119
 
117
- const lydian: NoteCollection = {
120
+ const lydian: ScaleCollection = {
121
+ category: "scale",
122
+ rotation: 3,
118
123
  primaryName: "Lydian",
119
124
  names: ["Lydian", "Major ♯4", "Lydian Mode"],
120
125
  intervals: ["1", "2", "3", "♯4", "5", "6", "7", "8"],
121
126
  integers: [0, 2, 4, 6, 7, 9, 11],
122
- rotation: 3,
123
127
  type: [
124
128
  "major",
125
129
  "lydian",
@@ -144,7 +148,9 @@ const lydian: NoteCollection = {
144
148
  patternShort: ["W", "W", "W", "H", "W", "W", "H"],
145
149
  } as const;
146
150
 
147
- const mixolydian: NoteCollection = {
151
+ const mixolydian: ScaleCollection = {
152
+ category: "scale",
153
+ rotation: 4,
148
154
  primaryName: "Mixolydian",
149
155
  names: [
150
156
  "Mixolydian",
@@ -154,7 +160,6 @@ const mixolydian: NoteCollection = {
154
160
  ],
155
161
  intervals: ["1", "2", "3", "4", "5", "6", "♭7", "8"],
156
162
  integers: [0, 2, 4, 5, 7, 9, 10],
157
- rotation: 4,
158
163
  type: [
159
164
  "major",
160
165
  "dominant",
@@ -180,7 +185,9 @@ const mixolydian: NoteCollection = {
180
185
  patternShort: ["W", "W", "H", "W", "W", "H", "W"],
181
186
  } as const;
182
187
 
183
- const aeolian: NoteCollection = {
188
+ const aeolian: ScaleCollection = {
189
+ category: "scale",
190
+ rotation: 5,
184
191
  primaryName: "Minor",
185
192
  names: [
186
193
  "Minor",
@@ -191,7 +198,6 @@ const aeolian: NoteCollection = {
191
198
  ],
192
199
  intervals: ["1", "2", "♭3", "4", "5", "♭6", "♭7", "8"],
193
200
  integers: [0, 2, 3, 5, 7, 8, 10],
194
- rotation: 5,
195
201
  type: [
196
202
  "minor",
197
203
  "aeolian",
@@ -217,7 +223,9 @@ const aeolian: NoteCollection = {
217
223
  patternShort: ["W", "H", "W", "W", "H", "W", "W"],
218
224
  } as const;
219
225
 
220
- const locrian: NoteCollection = {
226
+ const locrian: ScaleCollection = {
227
+ category: "scale",
228
+ rotation: 6,
221
229
  primaryName: "Locrian",
222
230
  names: [
223
231
  "Locrian",
@@ -226,7 +234,6 @@ const locrian: NoteCollection = {
226
234
  ],
227
235
  intervals: ["1", "♭2", "♭3", "4", "♭5", "♭6", "♭7", "8"],
228
236
  integers: [0, 1, 3, 5, 6, 8, 10],
229
- rotation: 6,
230
237
  type: [
231
238
  "diminished",
232
239
  "locrian",
@@ -263,5 +270,5 @@ const _diatonicModes = {
263
270
 
264
271
  export type DiatonicModeKey = keyof typeof _diatonicModes;
265
272
 
266
- export const diatonicModes: Record<DiatonicModeKey, NoteCollection> =
273
+ export const diatonicModes: Record<DiatonicModeKey, ScaleCollection> =
267
274
  _diatonicModes;
@@ -1,6 +1,11 @@
1
- import type { NoteCollection } from "../../types/note-collections.d.ts";
1
+ import type {
2
+ ChordCollection,
3
+ NoteCollection,
4
+ ScaleCollection,
5
+ } from "../../types/note-collections.d.ts";
2
6
 
3
- const diminishedTriad: NoteCollection = {
7
+ const diminishedTriad: ChordCollection = {
8
+ category: "chord",
4
9
  primaryName: "dim",
5
10
  names: ["dim", "°", "Diminished Triad"],
6
11
  intervals: ["1", "♭3", "♭5"],
@@ -11,7 +16,8 @@ const diminishedTriad: NoteCollection = {
11
16
  patternShort: ["m3", "m3"],
12
17
  } as const;
13
18
 
14
- const diminished7: NoteCollection = {
19
+ const diminished7: ChordCollection = {
20
+ category: "chord",
15
21
  primaryName: "dim7",
16
22
  names: ["dim7", "°7", "Diminished 7th"],
17
23
  intervals: ["1", "♭3", "♭5", "𝄫7"],
@@ -22,7 +28,8 @@ const diminished7: NoteCollection = {
22
28
  patternShort: ["m3", "m3", "m3"],
23
29
  } as const;
24
30
 
25
- const halfDiminished7: NoteCollection = {
31
+ const halfDiminished7: ChordCollection = {
32
+ category: "chord",
26
33
  primaryName: "m7♭5",
27
34
  names: ["m7♭5", "ø7", "Half Diminished 7th"],
28
35
  intervals: ["1", "♭3", "♭5", "♭7"],
@@ -33,10 +40,11 @@ const halfDiminished7: NoteCollection = {
33
40
  patternShort: ["m3", "m3", "M3"],
34
41
  } as const;
35
42
 
36
- const wholeHalfDiminished: NoteCollection = {
43
+ const wholeHalfDiminished: ScaleCollection = {
44
+ category: "scale",
37
45
  primaryName: "Whole Half Diminished",
38
46
  names: ["Whole Half Diminished"],
39
- intervals: ["1", "2", "♭3", "4", "♭5", "♭6", "6", "7"],
47
+ intervals: ["1", "2", "♭3", "4", "♭5", "♭6", "6", "7", "8"],
40
48
  integers: [0, 2, 3, 5, 6, 8, 9, 11],
41
49
  type: ["diminished", "scale", "symmetrical", "octatonic"],
42
50
  characteristics: ["tense", "jazzy", "symmetrical", "alternating tones"],
@@ -44,10 +52,11 @@ const wholeHalfDiminished: NoteCollection = {
44
52
  patternShort: ["W", "H", "W", "H", "W", "H", "W", "H"],
45
53
  } as const;
46
54
 
47
- const halfWholeDiminished: NoteCollection = {
55
+ const halfWholeDiminished: ScaleCollection = {
56
+ category: "scale",
48
57
  primaryName: "Half Whole Diminished",
49
58
  names: ["Half Whole Diminished", "Dominant Diminished"],
50
- intervals: ["1", "♭2", "♭3", "3", "♯4", "5", "6", "♭7"],
59
+ intervals: ["1", "♭2", "♭3", "3", "♯4", "5", "6", "♭7", "8"],
51
60
  integers: [0, 1, 3, 4, 6, 7, 9, 10],
52
61
  type: ["diminished", "dominant", "scale", "symmetrical", "octatonic"],
53
62
  characteristics: [
@@ -60,7 +69,7 @@ const halfWholeDiminished: NoteCollection = {
60
69
  patternShort: ["H", "W", "H", "W", "H", "W", "H", "W"],
61
70
  } as const;
62
71
 
63
- export const _diminished = {
72
+ export const _diminishedVariants = {
64
73
  diminishedTriad,
65
74
  diminished7,
66
75
  halfDiminished7,
@@ -68,6 +77,7 @@ export const _diminished = {
68
77
  halfWholeDiminished,
69
78
  } as const;
70
79
 
71
- export type DiminishedKey = keyof typeof _diminished;
80
+ export type DiminishedVariantKey = keyof typeof _diminishedVariants;
72
81
 
73
- export const diminished: Record<DiminishedKey, NoteCollection> = _diminished;
82
+ export const diminishedVariants: Record<DiminishedVariantKey, NoteCollection> =
83
+ _diminishedVariants;