@musodojo/music-theory-data 32.0.0 → 34.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 (91) hide show
  1. package/README.md +58 -7
  2. package/esm/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/build_message.d.ts.map +1 -1
  3. package/{script/deps/jsr.io/@std/internal/1.0.13 → esm/deps/jsr.io/@std/internal/1.0.14}/diff.d.ts.map +1 -1
  4. package/{script/deps/jsr.io/@std/internal/1.0.13 → esm/deps/jsr.io/@std/internal/1.0.14}/diff_str.d.ts.map +1 -1
  5. package/{script/deps/jsr.io/@std/internal/1.0.13 → esm/deps/jsr.io/@std/internal/1.0.14}/format.d.ts.map +1 -1
  6. package/esm/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/styles.d.ts.map +1 -1
  7. package/esm/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/types.d.ts.map +1 -1
  8. package/esm/src/data/chord-progressions/mod.d.ts +28 -16
  9. package/esm/src/data/chord-progressions/mod.d.ts.map +1 -1
  10. package/esm/src/data/chord-progressions/mod.js +180 -65
  11. package/esm/src/data/chords/mod.d.ts +26 -1
  12. package/esm/src/data/chords/mod.d.ts.map +1 -1
  13. package/esm/src/data/chords/mod.js +70 -1
  14. package/esm/src/data/labels/mod.d.ts +1 -0
  15. package/esm/src/data/labels/mod.d.ts.map +1 -1
  16. package/esm/src/data/labels/mod.js +1 -0
  17. package/esm/src/data/labels/note-label-collections.d.ts +1 -25
  18. package/esm/src/data/labels/note-label-collections.d.ts.map +1 -1
  19. package/esm/src/data/labels/note-label-collections.js +1 -77
  20. package/esm/src/data/labels/note-labels.d.ts +1 -1
  21. package/esm/src/data/labels/note-labels.d.ts.map +1 -1
  22. package/esm/src/data/labels/solfege.d.ts +33 -0
  23. package/esm/src/data/labels/solfege.d.ts.map +1 -0
  24. package/esm/src/data/labels/solfege.js +165 -0
  25. package/esm/src/data/note-collections/mod.d.ts +15 -0
  26. package/esm/src/data/note-collections/mod.d.ts.map +1 -1
  27. package/esm/src/data/note-collections/mod.js +2 -2
  28. package/esm/src/utils/chord-progressions.d.ts +22 -5
  29. package/esm/src/utils/chord-progressions.d.ts.map +1 -1
  30. package/esm/src/utils/chord-progressions.js +70 -7
  31. package/esm/src/utils/chords.d.ts +7 -1
  32. package/esm/src/utils/chords.d.ts.map +1 -1
  33. package/esm/src/utils/chords.js +18 -1
  34. package/esm/src/utils/conversion-registry.d.ts +40 -20
  35. package/esm/src/utils/conversion-registry.d.ts.map +1 -1
  36. package/esm/src/utils/conversion-registry.js +95 -25
  37. package/esm/src/utils/intervals.d.ts +3 -0
  38. package/esm/src/utils/intervals.d.ts.map +1 -1
  39. package/esm/src/utils/intervals.js +23 -0
  40. package/esm/src/utils/midi.d.ts +7 -0
  41. package/esm/src/utils/midi.d.ts.map +1 -1
  42. package/esm/src/utils/midi.js +18 -0
  43. package/esm/src/utils/note-collections.d.ts +9 -1
  44. package/esm/src/utils/note-collections.d.ts.map +1 -1
  45. package/esm/src/utils/note-collections.js +22 -0
  46. package/esm/tests/solfege.test.d.ts.map +1 -0
  47. package/package.json +1 -1
  48. package/script/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/build_message.d.ts.map +1 -1
  49. package/{esm/deps/jsr.io/@std/internal/1.0.13 → script/deps/jsr.io/@std/internal/1.0.14}/diff.d.ts.map +1 -1
  50. package/{esm/deps/jsr.io/@std/internal/1.0.13 → script/deps/jsr.io/@std/internal/1.0.14}/diff_str.d.ts.map +1 -1
  51. package/{esm/deps/jsr.io/@std/internal/1.0.13 → script/deps/jsr.io/@std/internal/1.0.14}/format.d.ts.map +1 -1
  52. package/script/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/styles.d.ts.map +1 -1
  53. package/script/deps/jsr.io/@std/internal/{1.0.13 → 1.0.14}/types.d.ts.map +1 -1
  54. package/script/src/data/chord-progressions/mod.d.ts +28 -16
  55. package/script/src/data/chord-progressions/mod.d.ts.map +1 -1
  56. package/script/src/data/chord-progressions/mod.js +181 -66
  57. package/script/src/data/chords/mod.d.ts +26 -1
  58. package/script/src/data/chords/mod.d.ts.map +1 -1
  59. package/script/src/data/chords/mod.js +75 -2
  60. package/script/src/data/labels/mod.d.ts +1 -0
  61. package/script/src/data/labels/mod.d.ts.map +1 -1
  62. package/script/src/data/labels/mod.js +1 -0
  63. package/script/src/data/labels/note-label-collections.d.ts +1 -25
  64. package/script/src/data/labels/note-label-collections.d.ts.map +1 -1
  65. package/script/src/data/labels/note-label-collections.js +1 -77
  66. package/script/src/data/labels/note-labels.d.ts +1 -1
  67. package/script/src/data/labels/note-labels.d.ts.map +1 -1
  68. package/script/src/data/labels/solfege.d.ts +33 -0
  69. package/script/src/data/labels/solfege.d.ts.map +1 -0
  70. package/script/src/data/labels/solfege.js +173 -0
  71. package/script/src/data/note-collections/mod.d.ts +15 -0
  72. package/script/src/data/note-collections/mod.d.ts.map +1 -1
  73. package/script/src/utils/chord-progressions.d.ts +22 -5
  74. package/script/src/utils/chord-progressions.d.ts.map +1 -1
  75. package/script/src/utils/chord-progressions.js +72 -5
  76. package/script/src/utils/chords.d.ts +7 -1
  77. package/script/src/utils/chords.d.ts.map +1 -1
  78. package/script/src/utils/chords.js +19 -0
  79. package/script/src/utils/conversion-registry.d.ts +40 -20
  80. package/script/src/utils/conversion-registry.d.ts.map +1 -1
  81. package/script/src/utils/conversion-registry.js +98 -26
  82. package/script/src/utils/intervals.d.ts +3 -0
  83. package/script/src/utils/intervals.d.ts.map +1 -1
  84. package/script/src/utils/intervals.js +26 -0
  85. package/script/src/utils/midi.d.ts +7 -0
  86. package/script/src/utils/midi.d.ts.map +1 -1
  87. package/script/src/utils/midi.js +21 -0
  88. package/script/src/utils/note-collections.d.ts +9 -1
  89. package/script/src/utils/note-collections.d.ts.map +1 -1
  90. package/script/src/utils/note-collections.js +25 -0
  91. package/script/tests/solfege.test.d.ts.map +1 -0
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lowerCaseRomanNumerals = exports.upperCaseRomanNumerals = exports.melodicMinorSeventhChords = exports.melodicMinorTriads = exports.harmonicMinorSeventhChords = exports.harmonicMinorTriads = exports.diatonicSeventhChords = exports.diatonicTriads = exports.chordQualityRomanRenderings = exports.chordQualityNoteCollectionKeys = exports.chordQualities = exports.seventhChordQualities = exports.triadChordQualities = void 0;
3
+ exports.lowerCaseRomanNumerals = exports.upperCaseRomanNumerals = exports.melodicMinorSeventhChords = exports.melodicMinorTriads = exports.harmonicMinorSeventhChords = exports.harmonicMinorTriads = exports.diatonicSeventhChords = exports.diatonicTriads = exports.chordQualityRomanRenderings = exports.chordCollectionSymbolRenderings = exports.chordQualityNoteCollectionKeys = exports.chordQualityChordCollectionKeys = exports.chordQualities = exports.seventhChordQualities = exports.triadChordQualities = void 0;
4
4
  exports.getChordQualityNoteCollectionKey = getChordQualityNoteCollectionKey;
5
+ exports.getChordQualityChordCollectionKey = getChordQualityChordCollectionKey;
6
+ exports.getChordCollectionSymbolRendering = getChordCollectionSymbolRendering;
7
+ exports.getChordCollectionChordSuffix = getChordCollectionChordSuffix;
8
+ exports.getChordCollectionRomanSuffix = getChordCollectionRomanSuffix;
5
9
  const _triadChordQualities = ["M", "m", "°", "+"];
6
10
  const _seventhChordQualities = [
7
11
  "M7",
@@ -47,6 +51,55 @@ const _chordQualityNoteCollectionKeys = {
47
51
  "+M7": "augmentedMajor7",
48
52
  "M7♯5": "augmentedMajor7",
49
53
  };
54
+ const _chordCollectionSymbolRenderings = {
55
+ major: { chordSuffix: "M", romanSuffix: "", numeralCase: "upper" },
56
+ major6: { chordSuffix: "6", romanSuffix: "6", numeralCase: "upper" },
57
+ major7: { chordSuffix: "M7", romanSuffix: "M7", numeralCase: "upper" },
58
+ major9: { chordSuffix: "M9", romanSuffix: "M9", numeralCase: "upper" },
59
+ majorAdd9: {
60
+ chordSuffix: "add9",
61
+ romanSuffix: "add9",
62
+ numeralCase: "upper",
63
+ },
64
+ major6Add9: { chordSuffix: "6/9", romanSuffix: "6/9", numeralCase: "upper" },
65
+ minor: { chordSuffix: "m", romanSuffix: "", numeralCase: "lower" },
66
+ minor6: { chordSuffix: "m6", romanSuffix: "m6", numeralCase: "lower" },
67
+ minor7: { chordSuffix: "m7", romanSuffix: "m7", numeralCase: "lower" },
68
+ minorMajor7: {
69
+ chordSuffix: "m(M7)",
70
+ romanSuffix: "M7",
71
+ numeralCase: "lower",
72
+ },
73
+ minor9: { chordSuffix: "m9", romanSuffix: "m9", numeralCase: "lower" },
74
+ minorAdd9: {
75
+ chordSuffix: "m(add9)",
76
+ romanSuffix: "m(add9)",
77
+ numeralCase: "lower",
78
+ },
79
+ minor6Add9: {
80
+ chordSuffix: "m6/9",
81
+ romanSuffix: "m6/9",
82
+ numeralCase: "lower",
83
+ },
84
+ dominant7: { chordSuffix: "7", romanSuffix: "7", numeralCase: "upper" },
85
+ dominant9: { chordSuffix: "9", romanSuffix: "9", numeralCase: "upper" },
86
+ dominant11: { chordSuffix: "11", romanSuffix: "11", numeralCase: "upper" },
87
+ dominant13: { chordSuffix: "13", romanSuffix: "13", numeralCase: "upper" },
88
+ diminishedTriad: { chordSuffix: "°", romanSuffix: "°", numeralCase: "lower" },
89
+ diminished7: { chordSuffix: "°7", romanSuffix: "°7", numeralCase: "lower" },
90
+ halfDiminished7: {
91
+ chordSuffix: "ø7",
92
+ romanSuffix: "ø7",
93
+ numeralCase: "lower",
94
+ },
95
+ augmentedTriad: { chordSuffix: "+", romanSuffix: "+", numeralCase: "upper" },
96
+ augmented7: { chordSuffix: "+7", romanSuffix: "+7", numeralCase: "upper" },
97
+ augmentedMajor7: {
98
+ chordSuffix: "+M7",
99
+ romanSuffix: "+M7",
100
+ numeralCase: "upper",
101
+ },
102
+ };
50
103
  /** The complete set of supported triad chord qualities. */
51
104
  exports.triadChordQualities = _triadChordQualities;
52
105
  /** The complete set of supported seventh chord qualities. */
@@ -56,8 +109,12 @@ exports.chordQualities = [
56
109
  ...exports.triadChordQualities,
57
110
  ...exports.seventhChordQualities,
58
111
  ];
112
+ /** Chord collection keys for every supported chord quality. */
113
+ exports.chordQualityChordCollectionKeys = _chordQualityNoteCollectionKeys;
59
114
  /** Note-collection keys for every supported chord quality. */
60
- exports.chordQualityNoteCollectionKeys = _chordQualityNoteCollectionKeys;
115
+ exports.chordQualityNoteCollectionKeys = exports.chordQualityChordCollectionKeys;
116
+ /** Symbol rendering metadata for every built-in chord collection. */
117
+ exports.chordCollectionSymbolRenderings = _chordCollectionSymbolRenderings;
61
118
  /** Roman numeral rendering metadata for each supported chord quality. */
62
119
  exports.chordQualityRomanRenderings = new Map([
63
120
  ["M", { numeralCase: "upper", suffix: "" }],
@@ -142,3 +199,19 @@ exports.lowerCaseRomanNumerals = _lowerCaseRomanNumerals;
142
199
  function getChordQualityNoteCollectionKey(quality) {
143
200
  return exports.chordQualityNoteCollectionKeys[quality];
144
201
  }
202
+ /** Returns the chord-collection key that describes the notes in a chord quality. */
203
+ function getChordQualityChordCollectionKey(quality) {
204
+ return exports.chordQualityChordCollectionKeys[quality];
205
+ }
206
+ /** Returns symbol rendering metadata for a chord collection. */
207
+ function getChordCollectionSymbolRendering(chordCollectionKey) {
208
+ return exports.chordCollectionSymbolRenderings[chordCollectionKey];
209
+ }
210
+ /** Returns the chord-symbol suffix for a chord collection. */
211
+ function getChordCollectionChordSuffix(chordCollectionKey) {
212
+ return getChordCollectionSymbolRendering(chordCollectionKey).chordSuffix;
213
+ }
214
+ /** Returns the roman-symbol suffix for a chord collection. */
215
+ function getChordCollectionRomanSuffix(chordCollectionKey) {
216
+ return getChordCollectionSymbolRendering(chordCollectionKey).romanSuffix;
217
+ }
@@ -1,3 +1,4 @@
1
1
  export * from "./note-label-collections.js";
2
2
  export * from "./note-labels.js";
3
+ export * from "./solfege.js";
3
4
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/mod.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/mod.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./note-label-collections.js"), exports);
18
18
  __exportStar(require("./note-labels.js"), exports);
19
+ __exportStar(require("./solfege.js"), exports);
@@ -45,34 +45,10 @@ declare const _noteLabelCollections: {
45
45
  readonly mode: "relative";
46
46
  readonly labels: readonly ["1", "♯1", "9", "♯9", "3", "11", "♯11", "5", "♯5", "13", "♯13", "7"];
47
47
  };
48
- readonly fixedDoFlat: {
49
- readonly name: "Solfege Fixed Do Flat Notes";
50
- readonly shortName: "Fixed Do Flat";
51
- readonly mode: "absolute";
52
- readonly labels: readonly ["do", "re♭", "re", "mi♭", "mi", "fa", "sol♭", "sol", "la♭", "la", "si♭", "si"];
53
- };
54
- readonly fixedDoSharp: {
55
- readonly name: "Solfege Fixed Do Sharp Notes";
56
- readonly shortName: "Fixed Do Sharp";
57
- readonly mode: "absolute";
58
- readonly labels: readonly ["do", "do♯", "re", "re♯", "mi", "fa", "fa♯", "sol", "sol♯", "la", "la♯", "si"];
59
- };
60
- readonly movableDo: {
61
- readonly name: "Solfege Movable Do Notes";
62
- readonly shortName: "Movable Do";
63
- readonly mode: "relative";
64
- readonly labels: readonly ["do", "ra", "re", "me", "mi", "fa", "fi", "sol", "le", "la", "te", "ti"];
65
- };
66
- readonly movableLa: {
67
- readonly name: "Solfege Movable La Notes";
68
- readonly shortName: "Movable La";
69
- readonly mode: "relative";
70
- readonly labels: readonly ["la", "te", "ti", "do", "di", "re", "re", "mi", "fa", "fi", "sol", "si"];
71
- };
72
48
  };
73
49
  /** A union string of valid keys to lookup different note label collections. */
74
50
  export type NoteLabelCollectionKey = keyof typeof _noteLabelCollections;
75
- /** A dictionary holding arrays mapping integer semitones into note/solfege names for varied contexts. */
51
+ /** A dictionary holding arrays mapping integer semitones into note and interval labels for varied contexts. */
76
52
  export declare const noteLabelCollections: Record<NoteLabelCollectionKey, NoteLabelCollection>;
77
53
  export {};
78
54
  //# sourceMappingURL=note-label-collections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"note-label-collections.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/note-label-collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEpD,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJjB,CAAC;AAEX,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAExE,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,sBAAsB,EACtB,mBAAmB,CACI,CAAC"}
1
+ {"version":3,"file":"note-label-collections.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/note-label-collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEpD,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEjB,CAAC;AAEX,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAExE,+GAA+G;AAC/G,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,sBAAsB,EACtB,mBAAmB,CACI,CAAC"}
@@ -64,82 +64,6 @@ const _noteLabelCollections = {
64
64
  "7",
65
65
  ],
66
66
  },
67
- fixedDoFlat: {
68
- name: "Solfege Fixed Do Flat Notes",
69
- shortName: "Fixed Do Flat",
70
- mode: "absolute",
71
- labels: [
72
- "do",
73
- "re♭",
74
- "re",
75
- "mi♭",
76
- "mi",
77
- "fa",
78
- "sol♭",
79
- "sol",
80
- "la♭",
81
- "la",
82
- "si♭",
83
- "si",
84
- ],
85
- },
86
- fixedDoSharp: {
87
- name: "Solfege Fixed Do Sharp Notes",
88
- shortName: "Fixed Do Sharp",
89
- mode: "absolute",
90
- labels: [
91
- "do",
92
- "do♯",
93
- "re",
94
- "re♯",
95
- "mi",
96
- "fa",
97
- "fa♯",
98
- "sol",
99
- "sol♯",
100
- "la",
101
- "la♯",
102
- "si",
103
- ],
104
- },
105
- movableDo: {
106
- name: "Solfege Movable Do Notes",
107
- shortName: "Movable Do",
108
- mode: "relative",
109
- labels: [
110
- "do",
111
- "ra",
112
- "re",
113
- "me",
114
- "mi",
115
- "fa",
116
- "fi",
117
- "sol",
118
- "le",
119
- "la",
120
- "te",
121
- "ti",
122
- ],
123
- },
124
- movableLa: {
125
- name: "Solfege Movable La Notes",
126
- shortName: "Movable La",
127
- mode: "relative",
128
- labels: [
129
- "la",
130
- "te",
131
- "ti",
132
- "do",
133
- "di",
134
- "re",
135
- "re",
136
- "mi",
137
- "fa",
138
- "fi",
139
- "sol",
140
- "si",
141
- ],
142
- },
143
67
  };
144
- /** A dictionary holding arrays mapping integer semitones into note/solfege names for varied contexts. */
68
+ /** A dictionary holding arrays mapping integer semitones into note and interval labels for varied contexts. */
145
69
  exports.noteLabelCollections = _noteLabelCollections;
@@ -91,7 +91,7 @@ declare const _simpleIntervalToIntegerMap: {
91
91
  readonly "\u266F8": 13;
92
92
  readonly "\uD834\uDD2A8": 14;
93
93
  };
94
- /** A fully qualified simple (single octave) interval string, including an optional accidental symbol (e.g., "M3", "b7"). */
94
+ /** A fully qualified simple (single octave) interval string, including an optional accidental symbol (e.g., "3", "♯4", "♭7"). */
95
95
  export type SimpleInterval = keyof typeof _simpleIntervalToIntegerMap;
96
96
  /** A numeric string representing the numerical span of a compound interval (e.g. "9", "13"). */
97
97
  export type CompoundIntervalNumber = "9" | "10" | "11" | "12" | "13" | "14" | "15";
@@ -1 +1 @@
1
- {"version":3,"file":"note-labels.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/note-labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"note-labels.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/note-labels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Interval, NoteLetter, NoteName, SimpleInterval } from "./note-labels.js";
2
+ export type FixedDoSeventhSyllable = "si" | "ti";
3
+ export type FixedDoAccidentalPolicy = "omitAccidentals" | "symbolAccidentals";
4
+ export interface FixedDoSyllableOptions {
5
+ readonly seventhSyllable?: FixedDoSeventhSyllable;
6
+ readonly accidentalPolicy?: FixedDoAccidentalPolicy;
7
+ }
8
+ export type FixedDoBaseSyllable = "do" | "re" | "mi" | "fa" | "sol" | "la" | FixedDoSeventhSyllable;
9
+ export type MovableDoSyllable = "do" | "di" | "ra" | "re" | "ri" | "me" | "ma" | "mi" | "fa" | "fi" | "se" | "sol" | "si" | "le" | "lo" | "la" | "li" | "te" | "ta" | "ti";
10
+ export interface MovableDoSyllableEntry {
11
+ readonly syllable: MovableDoSyllable;
12
+ readonly aliases?: readonly MovableDoSyllable[];
13
+ readonly note?: string;
14
+ }
15
+ export type MovableDoSystem = "doBased" | "laBasedMinor";
16
+ export interface SolfegeSystemMetadata {
17
+ readonly name: string;
18
+ readonly shortName: string;
19
+ readonly description: string;
20
+ }
21
+ export type SolfegeSystemKey = "fixedDo" | MovableDoSystem;
22
+ export declare const solfegeSystemMetadata: Readonly<Record<SolfegeSystemKey, SolfegeSystemMetadata>>;
23
+ export declare const defaultFixedDoSyllableOptions: Required<FixedDoSyllableOptions>;
24
+ export declare const fixedDoNoteLetterToSyllableMaps: Readonly<Record<FixedDoSeventhSyllable, ReadonlyMap<NoteLetter, FixedDoBaseSyllable>>>;
25
+ export declare function getFixedDoSyllableForNoteName(noteName: NoteName, options?: FixedDoSyllableOptions): string;
26
+ export declare function getFixedDoSyllablesForNoteNames(noteNames: readonly NoteName[], options?: FixedDoSyllableOptions): string[];
27
+ export declare const movableDoIntervalToSyllableMap: ReadonlyMap<SimpleInterval, MovableDoSyllableEntry>;
28
+ export declare const movableLaBasedMinorIntervalToSyllableMap: ReadonlyMap<SimpleInterval, MovableDoSyllableEntry>;
29
+ export declare const movableDoIntervalSyllableMaps: Readonly<Record<MovableDoSystem, ReadonlyMap<SimpleInterval, MovableDoSyllableEntry>>>;
30
+ export declare function getMovableDoSyllableEntryForInterval(interval: Interval, system?: MovableDoSystem): MovableDoSyllableEntry | undefined;
31
+ export declare function getMovableDoSyllableForInterval(interval: Interval, system?: MovableDoSystem): MovableDoSyllable | undefined;
32
+ export declare function getMovableDoSyllablesForIntervals(intervals: readonly Interval[], system?: MovableDoSystem): (MovableDoSyllable | undefined)[];
33
+ //# sourceMappingURL=solfege.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solfege.d.ts","sourceRoot":"","sources":["../../../../src/src/data/labels/solfege.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,MAAM,uBAAuB,GAC/B,iBAAiB,GACjB,mBAAmB,CAAC;AAExB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CACrD;AAED,MAAM,MAAM,mBAAmB,GAC3B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,sBAAsB,CAAC;AAE3B,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,cAAc,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,eAAe,CAAC;AAE3D,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAC1C,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAoBhD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,sBAAsB,CAG1E,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAoB7E,CAAC;AAwCF,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAgBR;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,OAAO,GAAE,sBAA2B,GACnC,MAAM,EAAE,CAIV;AAED,eAAO,MAAM,8BAA8B,EAAE,WAAW,CACtD,cAAc,EACd,sBAAsB,CAwCtB,CAAC;AAEH,eAAO,MAAM,wCAAwC,EAAE,WAAW,CAChE,cAAc,EACd,sBAAsB,CA4BtB,CAAC;AAEH,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAClD,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAI7E,CAAC;AAEF,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,eAA2B,GAClC,sBAAsB,GAAG,SAAS,CAQpC;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,eAA2B,GAClC,iBAAiB,GAAG,SAAS,CAE/B;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,MAAM,GAAE,eAA2B,GAClC,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAInC"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.movableDoIntervalSyllableMaps = exports.movableLaBasedMinorIntervalToSyllableMap = exports.movableDoIntervalToSyllableMap = exports.fixedDoNoteLetterToSyllableMaps = exports.defaultFixedDoSyllableOptions = exports.solfegeSystemMetadata = void 0;
4
+ exports.getFixedDoSyllableForNoteName = getFixedDoSyllableForNoteName;
5
+ exports.getFixedDoSyllablesForNoteNames = getFixedDoSyllablesForNoteNames;
6
+ exports.getMovableDoSyllableEntryForInterval = getMovableDoSyllableEntryForInterval;
7
+ exports.getMovableDoSyllableForInterval = getMovableDoSyllableForInterval;
8
+ exports.getMovableDoSyllablesForIntervals = getMovableDoSyllablesForIntervals;
9
+ const note_labels_js_1 = require("./note-labels.js");
10
+ exports.solfegeSystemMetadata = {
11
+ fixedDo: {
12
+ name: "Fixed Do",
13
+ shortName: "Fixed Do",
14
+ description: "Names notes by letter with do for C, re for D, mi for E, fa for F, sol for G, la for A, and si or ti for B.",
15
+ },
16
+ doBased: {
17
+ name: "Movable Do",
18
+ shortName: "Movable Do",
19
+ description: "Names intervals relative to the tonic, with do as the tonic in both major and minor contexts.",
20
+ },
21
+ laBasedMinor: {
22
+ name: "Movable La-Based Minor",
23
+ shortName: "Movable La",
24
+ description: "Names intervals relative to a minor tonic treated as la, a convention common in some choral and teaching contexts.",
25
+ },
26
+ };
27
+ exports.defaultFixedDoSyllableOptions = {
28
+ seventhSyllable: "si",
29
+ accidentalPolicy: "omitAccidentals",
30
+ };
31
+ exports.fixedDoNoteLetterToSyllableMaps = {
32
+ si: new Map([
33
+ ["C", "do"],
34
+ ["D", "re"],
35
+ ["E", "mi"],
36
+ ["F", "fa"],
37
+ ["G", "sol"],
38
+ ["A", "la"],
39
+ ["B", "si"],
40
+ ]),
41
+ ti: new Map([
42
+ ["C", "do"],
43
+ ["D", "re"],
44
+ ["E", "mi"],
45
+ ["F", "fa"],
46
+ ["G", "sol"],
47
+ ["A", "la"],
48
+ ["B", "ti"],
49
+ ]),
50
+ };
51
+ const SIMPLE_INTERVAL_NUMBER_REGEX = /\d+$/;
52
+ function getNoteLetterFromNoteName(noteName) {
53
+ return noteName.charAt(0);
54
+ }
55
+ function getAccidentalSymbolsFromNoteName(noteName) {
56
+ return noteName.slice(1);
57
+ }
58
+ function getFixedDoOptions(options) {
59
+ return {
60
+ ...exports.defaultFixedDoSyllableOptions,
61
+ ...options,
62
+ };
63
+ }
64
+ function isSimpleIntervalValue(interval) {
65
+ const match = interval.match(SIMPLE_INTERVAL_NUMBER_REGEX);
66
+ return match !== null && Number(match[0]) <= 8;
67
+ }
68
+ function getSimpleIntervalForMovableDo(interval) {
69
+ const compoundAsSimple = note_labels_js_1.compoundToSimpleIntervalMap.get(interval);
70
+ if (compoundAsSimple !== undefined) {
71
+ return compoundAsSimple;
72
+ }
73
+ return isSimpleIntervalValue(interval) ? interval : undefined;
74
+ }
75
+ function getFixedDoSyllableForNoteName(noteName, options = {}) {
76
+ const { seventhSyllable, accidentalPolicy } = getFixedDoOptions(options);
77
+ const noteLetter = getNoteLetterFromNoteName(noteName);
78
+ const baseSyllable = exports.fixedDoNoteLetterToSyllableMaps[seventhSyllable].get(noteLetter);
79
+ if (baseSyllable === undefined) {
80
+ return "";
81
+ }
82
+ if (accidentalPolicy === "omitAccidentals") {
83
+ return baseSyllable;
84
+ }
85
+ return baseSyllable + getAccidentalSymbolsFromNoteName(noteName);
86
+ }
87
+ function getFixedDoSyllablesForNoteNames(noteNames, options = {}) {
88
+ return noteNames.map((noteName) => getFixedDoSyllableForNoteName(noteName, options));
89
+ }
90
+ exports.movableDoIntervalToSyllableMap = new Map([
91
+ ["♭1", { syllable: "ti", note: "Contextual lowered tonic." }],
92
+ ["♮1", { syllable: "do" }],
93
+ ["1", { syllable: "do" }],
94
+ ["♯1", { syllable: "di" }],
95
+ ["♭2", { syllable: "ra" }],
96
+ ["♮2", { syllable: "re" }],
97
+ ["2", { syllable: "re" }],
98
+ ["♯2", { syllable: "ri" }],
99
+ ["♭3", { syllable: "me", aliases: ["ma"] }],
100
+ ["♮3", { syllable: "mi" }],
101
+ ["3", { syllable: "mi" }],
102
+ ["♭4", { syllable: "mi", note: "Contextual lowered fourth." }],
103
+ ["♮4", { syllable: "fa" }],
104
+ ["4", { syllable: "fa" }],
105
+ ["♯4", { syllable: "fi" }],
106
+ ["♭5", { syllable: "se" }],
107
+ ["♮5", { syllable: "sol" }],
108
+ ["5", { syllable: "sol" }],
109
+ ["♯5", { syllable: "si" }],
110
+ ["♭6", { syllable: "le", aliases: ["lo"] }],
111
+ ["♮6", { syllable: "la" }],
112
+ ["6", { syllable: "la" }],
113
+ ["♯6", { syllable: "li" }],
114
+ [
115
+ "𝄫7",
116
+ {
117
+ syllable: "la",
118
+ note: "Common do-based minor handling for a diminished seventh above the tonic.",
119
+ },
120
+ ],
121
+ ["♭7", { syllable: "te", aliases: ["ta"] }],
122
+ ["♮7", { syllable: "ti" }],
123
+ ["7", { syllable: "ti" }],
124
+ ["♭8", { syllable: "ti", note: "Contextual lowered octave." }],
125
+ ["♮8", { syllable: "do" }],
126
+ ["8", { syllable: "do" }],
127
+ ["♯8", { syllable: "di", note: "Contextual raised octave." }],
128
+ ]);
129
+ exports.movableLaBasedMinorIntervalToSyllableMap = new Map([
130
+ ["♭1", { syllable: "le", aliases: ["lo"] }],
131
+ ["♮1", { syllable: "la" }],
132
+ ["1", { syllable: "la" }],
133
+ ["♯1", { syllable: "li" }],
134
+ ["♭2", { syllable: "te", aliases: ["ta"] }],
135
+ ["♮2", { syllable: "ti" }],
136
+ ["2", { syllable: "ti" }],
137
+ ["♭3", { syllable: "do" }],
138
+ ["♮3", { syllable: "di" }],
139
+ ["3", { syllable: "di" }],
140
+ ["♭4", { syllable: "ra" }],
141
+ ["♮4", { syllable: "re" }],
142
+ ["4", { syllable: "re" }],
143
+ ["♯4", { syllable: "ri" }],
144
+ ["♭5", { syllable: "me", aliases: ["ma"] }],
145
+ ["♮5", { syllable: "mi" }],
146
+ ["5", { syllable: "mi" }],
147
+ ["♭6", { syllable: "fa" }],
148
+ ["♮6", { syllable: "fi" }],
149
+ ["6", { syllable: "fi" }],
150
+ ["𝄫7", { syllable: "se" }],
151
+ ["♭7", { syllable: "sol" }],
152
+ ["♮7", { syllable: "si" }],
153
+ ["7", { syllable: "si" }],
154
+ ["♮8", { syllable: "la" }],
155
+ ["8", { syllable: "la" }],
156
+ ]);
157
+ exports.movableDoIntervalSyllableMaps = {
158
+ doBased: exports.movableDoIntervalToSyllableMap,
159
+ laBasedMinor: exports.movableLaBasedMinorIntervalToSyllableMap,
160
+ };
161
+ function getMovableDoSyllableEntryForInterval(interval, system = "doBased") {
162
+ const simpleInterval = getSimpleIntervalForMovableDo(interval);
163
+ if (simpleInterval === undefined) {
164
+ return undefined;
165
+ }
166
+ return exports.movableDoIntervalSyllableMaps[system].get(simpleInterval);
167
+ }
168
+ function getMovableDoSyllableForInterval(interval, system = "doBased") {
169
+ return getMovableDoSyllableEntryForInterval(interval, system)?.syllable;
170
+ }
171
+ function getMovableDoSyllablesForIntervals(intervals, system = "doBased") {
172
+ return intervals.map((interval) => getMovableDoSyllableForInterval(interval, system));
173
+ }
@@ -1,3 +1,9 @@
1
+ import { majorVariants } from "./major-variants.js";
2
+ import { minorVariants } from "./minor-variants.js";
3
+ import { type _dominantVariants } from "./dominant-variants.js";
4
+ import { type _diminishedVariants } from "./diminished-variants.js";
5
+ import { augmentedVariants } from "./augmented-variants.js";
6
+ import { otherNoteCollections } from "./other-collections.js";
1
7
  export { diatonicModes } from "./diatonic-modes.js";
2
8
  export { pentatonicVariants } from "./pentatonic-variants.js";
3
9
  export { majorVariants } from "./major-variants.js";
@@ -72,6 +78,15 @@ export declare const noteCollections: {
72
78
  };
73
79
  /** A strictly typed generic string representing any key corresponding to a NoteCollection loaded in `noteCollections`. */
74
80
  export type NoteCollectionKey = keyof typeof noteCollections;
81
+ type NoteCollectionKeysWithCategory<TCollections extends Record<string, {
82
+ readonly category: string;
83
+ }>, TCategory extends string> = {
84
+ [K in keyof TCollections]: TCollections[K] extends {
85
+ readonly category: TCategory;
86
+ } ? K : never;
87
+ }[keyof TCollections];
88
+ /** A strictly typed key for any built-in note collection categorized as a chord. */
89
+ export type ChordCollectionKey = NoteCollectionKeysWithCategory<typeof majorVariants, "chord"> | NoteCollectionKeysWithCategory<typeof minorVariants, "chord"> | NoteCollectionKeysWithCategory<typeof _dominantVariants, "chord"> | NoteCollectionKeysWithCategory<typeof _diminishedVariants, "chord"> | NoteCollectionKeysWithCategory<typeof augmentedVariants, "chord"> | NoteCollectionKeysWithCategory<typeof otherNoteCollections, "chord">;
75
90
  /** An organized, grouped dictionary splitting note collections into theoretical categories (e.g. Diatonic Modes, Major Variants). */
76
91
  export declare const groupedNoteCollections: {
77
92
  readonly diatonicModes: Record<"ionian" | "dorian" | "phrygian" | "lydian" | "mixolydian" | "aeolian" | "locrian", import("../../mod.js").ModalScaleCollection>;
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/note-collections/mod.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,oIAAoI;AACpI,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWlB,CAAC;AAEX,0HAA0H;AAC1H,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE7D,qIAAqI;AACrI,eAAO,MAAM,sBAAsB;;;;;;;;;;;CAWzB,CAAC;AAEX,0GAA0G;AAC1G,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAEzE,sHAAsH;AACtH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAC/C,sBAAsB,EACtB;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAkDO,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/data/note-collections/mod.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,oIAAoI;AACpI,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWlB,CAAC;AAEX,0HAA0H;AAC1H,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE7D,KAAK,8BAA8B,CACjC,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAClE,SAAS,SAAS,MAAM,IACtB;KACD,CAAC,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS;QACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;KAC9B,GAAG,CAAC,GACD,KAAK;CACV,CAAC,MAAM,YAAY,CAAC,CAAC;AAEtB,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAC1B,8BAA8B,CAAC,OAAO,aAAa,EAAE,OAAO,CAAC,GAC7D,8BAA8B,CAAC,OAAO,aAAa,EAAE,OAAO,CAAC,GAC7D,8BAA8B,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,GACjE,8BAA8B,CAAC,OAAO,mBAAmB,EAAE,OAAO,CAAC,GACnE,8BAA8B,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,GACjE,8BAA8B,CAAC,OAAO,oBAAoB,EAAE,OAAO,CAAC,CAAC;AAEzE,qIAAqI;AACrI,eAAO,MAAM,sBAAsB;;;;;;;;;;;CAWzB,CAAC;AAEX,0GAA0G;AAC1G,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAEzE,sHAAsH;AACtH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAC/C,sBAAsB,EACtB;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAkDO,CAAC"}
@@ -1,21 +1,38 @@
1
1
  import { type ChordProgressionKey } from "../data/chord-progressions/mod.js";
2
- import type { ChordProgression } from "../types/chord-progressions";
2
+ import type { ChordProgression, ChordProgressionAnalysisRomanSymbol, ChordProgressionCategoryKey, ChordProgressionChord, ChordProgressionRomanSymbol } from "../types/chord-progressions";
3
3
  import type { RootNote } from "../data/labels/note-labels.js";
4
- import type { NoteCollectionKey } from "../data/note-collections/mod.js";
4
+ import type { ChordCollectionKey } from "../data/note-collections/mod.js";
5
5
  /** A resolved chord in a progression, including its root and note-collection key. */
6
6
  export interface ChordProgressionChordReference {
7
7
  readonly rootNote: RootNote;
8
8
  readonly chordName: string;
9
- readonly noteCollectionKey: NoteCollectionKey;
9
+ readonly noteCollectionKey: ChordCollectionKey;
10
10
  }
11
11
  /** Returns whether a string is one of the built-in chord progression keys. */
12
12
  export declare function isValidChordProgressionKey(key: string): key is ChordProgressionKey;
13
+ /** Returns the direct tonic-relative Roman symbol for a progression chord. */
14
+ export declare function getChordProgressionChordDirectRomanSymbol(chord: ChordProgressionChord): ChordProgressionRomanSymbol;
13
15
  /** Returns the spelled chord names for a progression in the requested root. */
14
16
  export declare function getChordProgressionChordNames(rootNote: RootNote, progressionOrKey: ChordProgression | ChordProgressionKey): string[];
15
- /** Returns the roman symbols authored for a chord progression. */
16
- export declare function getChordProgressionRomanSymbols(progressionOrKey: ChordProgression | ChordProgressionKey): string[];
17
+ /**
18
+ * Returns direct tonic-relative Roman symbols derived from each chord's
19
+ * `degree` and `chordCollectionKey`.
20
+ */
21
+ export declare function getChordProgressionDirectRomanSymbols(progressionOrKey: ChordProgression | ChordProgressionKey): ChordProgressionRomanSymbol[];
22
+ /**
23
+ * Returns Roman symbols suitable for theory display, preferring optional
24
+ * harmonic-function analysis labels when present.
25
+ */
26
+ export declare function getChordProgressionRomanSymbols(progressionOrKey: ChordProgression | ChordProgressionKey): ChordProgressionAnalysisRomanSymbol[];
27
+ /**
28
+ * Returns Roman symbols suitable for display, preferring optional
29
+ * harmonic-function analysis labels when present.
30
+ */
31
+ export declare function getChordProgressionDisplayRomanSymbols(progressionOrKey: ChordProgression | ChordProgressionKey): ChordProgressionAnalysisRomanSymbol[];
17
32
  /** Returns all built-in chord progression keys with the requested total bar count. */
18
33
  export declare function getChordProgressionKeysForTotalBars(totalBars: number): ChordProgressionKey[];
34
+ /** Returns all built-in chord progression keys in the requested musical category. */
35
+ export declare function getChordProgressionKeysForCategory(category: ChordProgressionCategoryKey): ChordProgressionKey[];
19
36
  /** Returns each distinct chord name in a progression, preserving first-seen order. */
20
37
  export declare function getChordProgressionUniqueChordNames(rootNote: RootNote, progressionOrKey: ChordProgression | ChordProgressionKey): string[];
21
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chord-progressions.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chord-progressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAMzE,qFAAqF;AACrF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CAC/C;AASD,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GACV,GAAG,IAAI,mBAAmB,CAE5B;AA2CD,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,EAAE,CAYV;AAED,kEAAkE;AAClE,wBAAgB,+BAA+B,CAC7C,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,EAAE,CAKV;AAED,sFAAsF;AACtF,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,GAChB,mBAAmB,EAAE,CAKvB;AAED,sFAAsF;AACtF,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,EAAE,CAIV;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAKlC;AAED;;;GAGG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAkBlC;AAED;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,EAAE,CAiDpC;AAED;;;;;GAKG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAKlC;AAED,6EAA6E;AAC7E,wBAAgB,sCAAsC,CACpD,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,CAQR"}
1
+ {"version":3,"file":"chord-progressions.d.ts","sourceRoot":"","sources":["../../../src/src/utils/chord-progressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EACV,gBAAgB,EAChB,mCAAmC,EACnC,2BAA2B,EAC3B,qBAAqB,EAErB,2BAA2B,EAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAO1E,qFAAqF;AACrF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;CAChD;AAWD,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GACV,GAAG,IAAI,mBAAmB,CAE5B;AA8DD,8EAA8E;AAC9E,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,qBAAqB,GAC3B,2BAA2B,CA0B7B;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,EAAE,CAYV;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,2BAA2B,EAAE,CAO/B;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,mCAAmC,EAAE,CASvC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,mCAAmC,EAAE,CAEvC;AAED,sFAAsF;AACtF,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,GAChB,mBAAmB,EAAE,CAKvB;AAED,qFAAqF;AACrF,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,2BAA2B,GACpC,mBAAmB,EAAE,CAKvB;AAED,sFAAsF;AACtF,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,EAAE,CAIV;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAKlC;AAED;;;GAGG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAkBlC;AAED;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,EAAE,CAiDpC;AAED;;;;;GAKG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,8BAA8B,EAAE,CAKlC;AAED,6EAA6E;AAC7E,wBAAgB,sCAAsC,CACpD,gBAAgB,EAAE,gBAAgB,GAAG,mBAAmB,GACvD,MAAM,CAQR"}