@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 +81 -11
- package/package.json +2 -2
- package/src/data/labels/note-labels.ts +152 -1
- package/src/data/note-collections/{augmented.ts → augmented-variants.ts} +26 -20
- package/src/data/note-collections/diatonic-modes.ts +23 -16
- package/src/data/note-collections/{diminished.ts → diminished-variants.ts} +21 -11
- package/src/data/note-collections/dominant-variants.ts +26 -5
- package/src/data/note-collections/harmonic-minor-modes.ts +23 -16
- package/src/data/note-collections/major-variants.ts +14 -8
- package/src/data/note-collections/melodic-minor-modes.ts +23 -9
- package/src/data/note-collections/minor-variants.ts +14 -8
- package/src/data/note-collections/mod.ts +10 -10
- package/src/data/note-collections/other-collections.ts +9 -3
- package/src/data/note-collections/pentatonic-variants.ts +19 -21
- package/src/mod.ts +46 -15
- package/src/types/note-collections.d.ts +61 -2
- package/src/utils/{get-chords.ts → chords.ts} +22 -5
- package/src/utils/intervals.ts +31 -6
- package/src/utils/mod.ts +5 -3
- package/src/utils/rotate-array.ts +16 -1
- /package/src/utils/{get-midi-note-sequences.ts → midi-note-sequences.ts} +0 -0
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
13
|
-
lists — providing rich, structured metadata and practical helpers for
|
|
14
|
-
**analysis, composition, and interactive tools**.
|
|
83
|
+
## API Documentation
|
|
15
84
|
|
|
16
|
-
|
|
17
|
-
|
|
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": "
|
|
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 {
|
|
1
|
+
import type { ChordCollection } from "../../types/note-collections.d.ts";
|
|
2
2
|
|
|
3
|
-
const augmentedTriad:
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
85
|
+
export type AugmentedVariantKey = keyof typeof _augmentedVariants;
|
|
81
86
|
|
|
82
|
-
export const
|
|
87
|
+
export const augmentedVariants: Record<AugmentedVariantKey, ChordCollection> =
|
|
88
|
+
_augmentedVariants;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ScaleCollection } from "../../types/note-collections.d.ts";
|
|
2
2
|
|
|
3
|
-
const ionian:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
273
|
+
export const diatonicModes: Record<DiatonicModeKey, ScaleCollection> =
|
|
267
274
|
_diatonicModes;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
ChordCollection,
|
|
3
|
+
NoteCollection,
|
|
4
|
+
ScaleCollection,
|
|
5
|
+
} from "../../types/note-collections.d.ts";
|
|
2
6
|
|
|
3
|
-
const diminishedTriad:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
80
|
+
export type DiminishedVariantKey = keyof typeof _diminishedVariants;
|
|
72
81
|
|
|
73
|
-
export const
|
|
82
|
+
export const diminishedVariants: Record<DiminishedVariantKey, NoteCollection> =
|
|
83
|
+
_diminishedVariants;
|