@libraz/libcantus 1.0.1 → 1.2.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 (142) hide show
  1. package/README.md +27 -65
  2. package/README_ja.md +28 -66
  3. package/dist/analyze/index.cjs +11 -7
  4. package/dist/analyze/index.cjs.map +1 -1
  5. package/dist/analyze/index.d.cts +79 -144
  6. package/dist/analyze/index.d.ts +79 -144
  7. package/dist/analyze/index.js +20 -16
  8. package/dist/chunk-35NBV2FT.cjs +145 -0
  9. package/dist/chunk-35NBV2FT.cjs.map +1 -0
  10. package/dist/{chunk-UADYAYAT.cjs → chunk-3R3QVKY5.cjs} +1353 -580
  11. package/dist/chunk-3R3QVKY5.cjs.map +1 -0
  12. package/dist/{chunk-WWURE4XT.cjs → chunk-76ZBTRG2.cjs} +624 -729
  13. package/dist/chunk-76ZBTRG2.cjs.map +1 -0
  14. package/dist/{chunk-FVSI36UV.js → chunk-7KG3RTYS.js} +197 -110
  15. package/dist/chunk-7KG3RTYS.js.map +1 -0
  16. package/dist/{chunk-VTI6FOLB.js → chunk-AGOVW7U6.js} +709 -133
  17. package/dist/chunk-AGOVW7U6.js.map +1 -0
  18. package/dist/{chunk-E3F4AHAH.cjs → chunk-CGBADIO5.cjs} +221 -134
  19. package/dist/chunk-CGBADIO5.cjs.map +1 -0
  20. package/dist/{chunk-6XH6QZYQ.cjs → chunk-DSMJRXCZ.cjs} +1455 -849
  21. package/dist/chunk-DSMJRXCZ.cjs.map +1 -0
  22. package/dist/{chunk-PKFNUHDY.js → chunk-FBH75DAY.js} +1218 -612
  23. package/dist/chunk-FBH75DAY.js.map +1 -0
  24. package/dist/chunk-H2KJHBW4.js +3329 -0
  25. package/dist/chunk-H2KJHBW4.js.map +1 -0
  26. package/dist/chunk-HPVSH7SF.cjs +2294 -0
  27. package/dist/chunk-HPVSH7SF.cjs.map +1 -0
  28. package/dist/{chunk-MXO72PLY.cjs → chunk-HWHGOVO6.cjs} +21 -19
  29. package/dist/chunk-HWHGOVO6.cjs.map +1 -0
  30. package/dist/chunk-HYJJ2V2I.js +2294 -0
  31. package/dist/chunk-HYJJ2V2I.js.map +1 -0
  32. package/dist/{chunk-AFM2ULJH.cjs → chunk-J7FHVZII.cjs} +1567 -1067
  33. package/dist/chunk-J7FHVZII.cjs.map +1 -0
  34. package/dist/chunk-K6OZXIR6.js +1 -0
  35. package/dist/{chunk-H3VORETI.js → chunk-M5RYMAFI.js} +487 -592
  36. package/dist/chunk-M5RYMAFI.js.map +1 -0
  37. package/dist/chunk-NB25P3EH.js +363 -0
  38. package/dist/chunk-NB25P3EH.js.map +1 -0
  39. package/dist/{chunk-TTCLJX6D.js → chunk-NFJ4P6ZZ.js} +10 -8
  40. package/dist/chunk-NFJ4P6ZZ.js.map +1 -0
  41. package/dist/chunk-NM7UAMC3.cjs +457 -0
  42. package/dist/chunk-NM7UAMC3.cjs.map +1 -0
  43. package/dist/chunk-PM4XJE2Y.cjs +363 -0
  44. package/dist/chunk-PM4XJE2Y.cjs.map +1 -0
  45. package/dist/chunk-PUKJP2Z5.js +145 -0
  46. package/dist/chunk-PUKJP2Z5.js.map +1 -0
  47. package/dist/{chunk-VOHZB45S.js → chunk-Q6LFSAKV.js} +1321 -821
  48. package/dist/chunk-Q6LFSAKV.js.map +1 -0
  49. package/dist/{chunk-INHVXP6Z.js → chunk-RFIBF2RR.js} +1203 -430
  50. package/dist/chunk-RFIBF2RR.js.map +1 -0
  51. package/dist/{chunk-Q2WGKJNN.cjs → chunk-S5BKZZGM.cjs} +699 -123
  52. package/dist/chunk-S5BKZZGM.cjs.map +1 -0
  53. package/dist/chunk-SGLEQVJH.cjs +3329 -0
  54. package/dist/chunk-SGLEQVJH.cjs.map +1 -0
  55. package/dist/chunk-UGLFDG7L.cjs +1 -0
  56. package/dist/chunk-UGLFDG7L.cjs.map +1 -0
  57. package/dist/{chunk-YH3BIKHH.js → chunk-UMWZ4ZET.js} +146 -49
  58. package/dist/chunk-UMWZ4ZET.js.map +1 -0
  59. package/dist/{index-szBv3496.d.ts → coerce-DP0vYu-x.d.ts} +286 -199
  60. package/dist/{index-C_8o--VE.d.cts → coerce-DRERzdve.d.cts} +286 -199
  61. package/dist/core/index.cjs +9 -5
  62. package/dist/core/index.cjs.map +1 -1
  63. package/dist/core/index.d.cts +122 -108
  64. package/dist/core/index.d.ts +122 -108
  65. package/dist/core/index.js +32 -28
  66. package/dist/generate/index.cjs +8 -8
  67. package/dist/generate/index.d.cts +168 -84
  68. package/dist/generate/index.d.ts +168 -84
  69. package/dist/generate/index.js +7 -7
  70. package/dist/{index-CGpRv5sl.d.cts → index-9eoQs2C1.d.ts} +34 -19
  71. package/dist/{index-CCNJRG-P.d.cts → index-B9QLziDe.d.cts} +293 -56
  72. package/dist/{index-Dzr13q3d.d.cts → index-BBWNZS0f.d.cts} +135 -58
  73. package/dist/{index-9wcMhG73.d.ts → index-BHIUyjhZ.d.ts} +293 -56
  74. package/dist/{index-BGFW-8P2.d.cts → index-BJgP97N1.d.ts} +196 -114
  75. package/dist/{index-CunYKLiu.d.ts → index-BL5N2Oyz.d.cts} +1 -1
  76. package/dist/{index-Cj49F892.d.ts → index-BMweUlm5.d.cts} +63 -23
  77. package/dist/{index-CgHqxdps.d.ts → index-BNSM-DSk.d.cts} +196 -114
  78. package/dist/{index-D57QRbVn.d.ts → index-BRMbPkHE.d.ts} +480 -254
  79. package/dist/{index-Chbst3Jx.d.ts → index-CJBBiAmU.d.ts} +135 -58
  80. package/dist/{index-BkGmlyI3.d.cts → index-CL4b4gUQ.d.ts} +63 -23
  81. package/dist/{index-B9MNZboQ.d.ts → index-Cy15oTvh.d.cts} +52 -22
  82. package/dist/{index-B9MNZboQ.d.cts → index-Cy15oTvh.d.ts} +52 -22
  83. package/dist/{index-BO6xE9YU.d.cts → index-DGCNKAUr.d.cts} +480 -254
  84. package/dist/{index-B4o55NDr.d.cts → index-Dw2DP7vm.d.ts} +1 -1
  85. package/dist/{index-G1uwGGWQ.d.ts → index-cHvbYgJI.d.cts} +34 -19
  86. package/dist/index.cjs +42 -14
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.d.cts +14 -14
  89. package/dist/index.d.ts +14 -14
  90. package/dist/index.js +82 -54
  91. package/dist/{masks-DYbE485J.d.cts → masks-Cc7-MzzY.d.ts} +49 -2
  92. package/dist/{masks-DYbE485J.d.ts → masks-pADfTOiD.d.cts} +49 -2
  93. package/dist/model/index.cjs +19 -12
  94. package/dist/model/index.cjs.map +1 -1
  95. package/dist/model/index.d.cts +504 -182
  96. package/dist/model/index.d.ts +504 -182
  97. package/dist/model/index.js +18 -11
  98. package/dist/{positional-Cptlj-xs.d.ts → positional-DJgs6ltD.d.ts} +85 -8
  99. package/dist/{positional-DvH_sd8u.d.cts → positional-DMZer-FM.d.cts} +85 -8
  100. package/dist/theory/index.cjs +35 -6
  101. package/dist/theory/index.cjs.map +1 -1
  102. package/dist/theory/index.d.cts +257 -62
  103. package/dist/theory/index.d.ts +257 -62
  104. package/dist/theory/index.js +41 -12
  105. package/package.json +7 -5
  106. package/dist/chunk-2LCPM3EG.js +0 -3224
  107. package/dist/chunk-2LCPM3EG.js.map +0 -1
  108. package/dist/chunk-6XH6QZYQ.cjs.map +0 -1
  109. package/dist/chunk-6XPTBE7Y.cjs +0 -49
  110. package/dist/chunk-6XPTBE7Y.cjs.map +0 -1
  111. package/dist/chunk-AFM2ULJH.cjs.map +0 -1
  112. package/dist/chunk-B6XNKWZV.cjs +0 -3224
  113. package/dist/chunk-B6XNKWZV.cjs.map +0 -1
  114. package/dist/chunk-E3F4AHAH.cjs.map +0 -1
  115. package/dist/chunk-ELCTZUJJ.js +0 -379
  116. package/dist/chunk-ELCTZUJJ.js.map +0 -1
  117. package/dist/chunk-FVSI36UV.js.map +0 -1
  118. package/dist/chunk-H3VORETI.js.map +0 -1
  119. package/dist/chunk-H42UHPYW.js +0 -1577
  120. package/dist/chunk-H42UHPYW.js.map +0 -1
  121. package/dist/chunk-HFPS7JFD.js +0 -1
  122. package/dist/chunk-INHVXP6Z.js.map +0 -1
  123. package/dist/chunk-K4ZJUGF4.cjs +0 -379
  124. package/dist/chunk-K4ZJUGF4.cjs.map +0 -1
  125. package/dist/chunk-KNJEKLKV.js +0 -49
  126. package/dist/chunk-KNJEKLKV.js.map +0 -1
  127. package/dist/chunk-MXO72PLY.cjs.map +0 -1
  128. package/dist/chunk-NLEU4QSE.cjs +0 -360
  129. package/dist/chunk-NLEU4QSE.cjs.map +0 -1
  130. package/dist/chunk-OE6WK2Y2.cjs +0 -1577
  131. package/dist/chunk-OE6WK2Y2.cjs.map +0 -1
  132. package/dist/chunk-PKFNUHDY.js.map +0 -1
  133. package/dist/chunk-Q2WGKJNN.cjs.map +0 -1
  134. package/dist/chunk-RHIJ3S4I.cjs +0 -1
  135. package/dist/chunk-RHIJ3S4I.cjs.map +0 -1
  136. package/dist/chunk-TTCLJX6D.js.map +0 -1
  137. package/dist/chunk-UADYAYAT.cjs.map +0 -1
  138. package/dist/chunk-VOHZB45S.js.map +0 -1
  139. package/dist/chunk-VTI6FOLB.js.map +0 -1
  140. package/dist/chunk-WWURE4XT.cjs.map +0 -1
  141. package/dist/chunk-YH3BIKHH.js.map +0 -1
  142. /package/dist/{chunk-HFPS7JFD.js.map → chunk-K6OZXIR6.js.map} +0 -0
@@ -16,29 +16,36 @@ import {
16
16
  Timeline,
17
17
  Tuning,
18
18
  Voicing
19
- } from "../chunk-PKFNUHDY.js";
20
- import "../chunk-2LCPM3EG.js";
21
- import "../chunk-YH3BIKHH.js";
22
- import "../chunk-VOHZB45S.js";
23
- import "../chunk-H42UHPYW.js";
24
- import "../chunk-FVSI36UV.js";
25
- import "../chunk-ELCTZUJJ.js";
26
- import "../chunk-H3VORETI.js";
27
- import "../chunk-KNJEKLKV.js";
19
+ } from "../chunk-FBH75DAY.js";
20
+ import "../chunk-HYJJ2V2I.js";
21
+ import "../chunk-UMWZ4ZET.js";
22
+ import "../chunk-Q6LFSAKV.js";
23
+ import "../chunk-H2KJHBW4.js";
24
+ import "../chunk-7KG3RTYS.js";
25
+ import "../chunk-PUKJP2Z5.js";
26
+ import "../chunk-M5RYMAFI.js";
27
+ import "../chunk-NB25P3EH.js";
28
28
  import {
29
29
  NoteSafety
30
- } from "../chunk-INHVXP6Z.js";
31
- import "../chunk-VTI6FOLB.js";
30
+ } from "../chunk-RFIBF2RR.js";
31
+ import {
32
+ BudgetExceededError,
33
+ InvalidInputError,
34
+ NoSolutionError
35
+ } from "../chunk-AGOVW7U6.js";
32
36
  export {
33
37
  Arrangement,
38
+ BudgetExceededError,
34
39
  Chord,
35
40
  Composer,
36
41
  Duration,
37
42
  Instrument,
38
43
  Interval,
44
+ InvalidInputError,
39
45
  Key,
40
46
  Meter,
41
47
  Motif,
48
+ NoSolutionError,
42
49
  Note,
43
50
  NoteSafety,
44
51
  Progression,
@@ -1,4 +1,4 @@
1
- import { a as Articulation } from './index-B9MNZboQ.js';
1
+ import { a as Articulation } from './index-Cy15oTvh.js';
2
2
 
3
3
  /**
4
4
  * Every limb a percussionist strikes with, in declaration order.
@@ -68,6 +68,17 @@ type PercussionProfile = InstrumentProfileCommon & {
68
68
  limbs: readonly Limb[];
69
69
  /** Limbs that can strike each voice, in preference order, keyed by MIDI note. */
70
70
  reach: Readonly<Record<number, readonly Limb[]>>;
71
+ /**
72
+ * Voices dubbed over the kit on a pass of their own, by MIDI note number.
73
+ *
74
+ * A tambourine or a shaker riding a groove whose backbeat already commits
75
+ * both hands is a second pass, not a third hand: it is played over the kit,
76
+ * so it takes no limb from the kit and none from another overdub. Such a
77
+ * voice is still held in a hand on its own pass, so it keeps its `reach`
78
+ * entry and remains a voice of the instrument; this names which of them are
79
+ * played that way.
80
+ */
81
+ overdub?: readonly number[];
71
82
  };
72
83
  /**
73
84
  * An instrument the library can check a passage against.
@@ -75,6 +86,36 @@ type PercussionProfile = InstrumentProfileCommon & {
75
86
  * @category Core
76
87
  */
77
88
  type InstrumentProfile = StringedProfile | PercussionProfile;
89
+ declare const checked: unique symbol;
90
+ /**
91
+ * A neck whose every field has been checked against the domain it declares.
92
+ *
93
+ * @category Core
94
+ */
95
+ type ValidatedStringedProfile = StringedProfile & {
96
+ readonly [checked]: true;
97
+ };
98
+ /**
99
+ * A kit whose every field has been checked against the domain it declares.
100
+ *
101
+ * @category Core
102
+ */
103
+ type ValidatedPercussionProfile = PercussionProfile & {
104
+ readonly [checked]: true;
105
+ };
106
+ /**
107
+ * A profile whose every field has been checked against the domain it declares.
108
+ *
109
+ * The mark is carried by the type alone — nothing is added to the object, so a
110
+ * validated profile serializes exactly as the plain one it was made from. Its
111
+ * only source is {@link toInstrumentProfile}, which is what makes the mark worth
112
+ * anything: the routines that read a profile note by note take this rather than
113
+ * a plain {@link InstrumentProfile}, so a path that skipped the checks does not
114
+ * compile instead of failing on the one passage that happens to expose it.
115
+ *
116
+ * @category Core
117
+ */
118
+ type ValidatedProfile = ValidatedStringedProfile | ValidatedPercussionProfile;
78
119
  /**
79
120
  * Anything that names an instrument: a plain {@link InstrumentProfile}, or a
80
121
  * value that serializes to one such as the `Instrument` class.
@@ -89,6 +130,41 @@ type InstrumentProfileLike = InstrumentProfile | {
89
130
  /** The profile data this value stands for. */
90
131
  toJSON(): InstrumentProfile;
91
132
  };
133
+ /**
134
+ * Resolve any instrument-shaped value to a plain {@link InstrumentProfile}.
135
+ *
136
+ * The counterpart of {@link toNoteData} for instruments: an entry point takes
137
+ * whatever form the caller has — the profile a project file holds, one of the
138
+ * built-in profiles, or an `Instrument` instance — and gets one shape back. An
139
+ * instance is accepted through its `toJSON` method rather than by its type,
140
+ * because the core layer cannot import the model layer that defines the class.
141
+ *
142
+ * @param value A plain profile, or a value whose `toJSON` returns one.
143
+ * @param name What the instrument is called in an error message, so a caller
144
+ * holding several of them hears which one was malformed.
145
+ * @returns The validated profile.
146
+ * @throws If the value names no instrument, or the instrument it names is
147
+ * contradictory — a neck with no strings, a fret count that is no count, or a
148
+ * kit no limb reaches.
149
+ * @category Core
150
+ */
151
+ declare function toInstrumentProfile(value: InstrumentProfileLike, name?: string): ValidatedProfile;
152
+ /**
153
+ * Resolve any instrument-shaped value to a plain {@link StringedProfile}.
154
+ *
155
+ * What {@link toInstrumentProfile} is for an entry point that reads any
156
+ * instrument, this is for one that only has a neck to work with: a bass line
157
+ * placed on strings and frets cannot be written for a kit, and saying so by
158
+ * name is more use than a missing `tuning` surfacing later as a note the
159
+ * generator could not place.
160
+ *
161
+ * @param value A plain profile, or a value whose `toJSON` returns one.
162
+ * @param name What the instrument is called in an error message.
163
+ * @returns The validated profile, narrowed to the stringed family.
164
+ * @throws If the value names no instrument, or names one with no strings.
165
+ * @category Core
166
+ */
167
+ declare function toStringedProfile(value: InstrumentProfileLike, name?: string): ValidatedStringedProfile;
92
168
  /**
93
169
  * A fretting-hand position: which string, and how far up the neck.
94
170
  *
@@ -118,7 +194,7 @@ type StringFingering = {
118
194
  * ```
119
195
  * @category Core
120
196
  */
121
- declare function instrumentRange(profile: InstrumentProfile): {
197
+ declare function instrumentRange(profile: InstrumentProfileLike): {
122
198
  low: number;
123
199
  high: number;
124
200
  };
@@ -134,7 +210,7 @@ declare function instrumentRange(profile: InstrumentProfile): {
134
210
  * produces it.
135
211
  * @category Core
136
212
  */
137
- declare function canSound(profile: InstrumentProfile, pitch: number): boolean;
213
+ declare function canSound(profile: InstrumentProfileLike, pitch: number): boolean;
138
214
  /**
139
215
  * Every position on the neck that sounds a pitch, lowest string first.
140
216
  *
@@ -143,7 +219,7 @@ declare function canSound(profile: InstrumentProfile, pitch: number): boolean;
143
219
  * @returns One entry per string that reaches the pitch; empty when none does.
144
220
  * @category Core
145
221
  */
146
- declare function fingeringsFor(profile: StringedProfile, pitch: number): StringFingering[];
222
+ declare function fingeringsFor(profile: InstrumentProfileLike, pitch: number): StringFingering[];
147
223
  /**
148
224
  * Move a pitch by whole octaves until the instrument can sound it.
149
225
  *
@@ -154,8 +230,9 @@ declare function fingeringsFor(profile: StringedProfile, pitch: number): StringF
154
230
  *
155
231
  * @param pitch MIDI pitch to place.
156
232
  * @param profile The instrument.
157
- * @returns The nearest octave transposition the instrument sounds, searching
158
- * upward first; the pitch unchanged when no transposition of it is available.
233
+ * @returns The nearest octave transposition the instrument sounds, taking the
234
+ * upper one when two are equally near; the pitch unchanged when no
235
+ * transposition of it is available.
159
236
  *
160
237
  * @example
161
238
  * ```ts
@@ -164,7 +241,7 @@ declare function fingeringsFor(profile: StringedProfile, pitch: number): StringF
164
241
  * ```
165
242
  * @category Core
166
243
  */
167
- declare function foldIntoRange(pitch: number, profile: InstrumentProfile): number;
244
+ declare function foldIntoRange(pitch: number, profile: InstrumentProfileLike): number;
168
245
 
169
246
  /**
170
247
  * Hierarchical seeds: one project number that addresses every part.
@@ -284,4 +361,4 @@ declare function createPositionalRng(seed: number): PositionalRng;
284
361
  */
285
362
  declare function includeAt(rng: PositionalRng, complexity: number, ...path: SeedPath): boolean;
286
363
 
287
- export { type InstrumentProfile as I, LIMBS as L, type PercussionProfile as P, type SeedPath as S, type InstrumentProfileCommon as a, type InstrumentProfileLike as b, type Limb as c, type PositionalRng as d, type StringFingering as e, type StringedProfile as f, canSound as g, createPositionalRng as h, deriveSeed as i, fingeringsFor as j, foldIntoRange as k, includeAt as l, instrumentRange as m };
364
+ export { type InstrumentProfile as I, LIMBS as L, type PercussionProfile as P, type SeedPath as S, type ValidatedPercussionProfile as V, type InstrumentProfileCommon as a, type InstrumentProfileLike as b, type Limb as c, type PositionalRng as d, type StringFingering as e, type StringedProfile as f, type ValidatedProfile as g, type ValidatedStringedProfile as h, canSound as i, createPositionalRng as j, deriveSeed as k, fingeringsFor as l, foldIntoRange as m, includeAt as n, instrumentRange as o, toStringedProfile as p, toInstrumentProfile as t };
@@ -1,4 +1,4 @@
1
- import { a as Articulation } from './index-B9MNZboQ.cjs';
1
+ import { a as Articulation } from './index-Cy15oTvh.cjs';
2
2
 
3
3
  /**
4
4
  * Every limb a percussionist strikes with, in declaration order.
@@ -68,6 +68,17 @@ type PercussionProfile = InstrumentProfileCommon & {
68
68
  limbs: readonly Limb[];
69
69
  /** Limbs that can strike each voice, in preference order, keyed by MIDI note. */
70
70
  reach: Readonly<Record<number, readonly Limb[]>>;
71
+ /**
72
+ * Voices dubbed over the kit on a pass of their own, by MIDI note number.
73
+ *
74
+ * A tambourine or a shaker riding a groove whose backbeat already commits
75
+ * both hands is a second pass, not a third hand: it is played over the kit,
76
+ * so it takes no limb from the kit and none from another overdub. Such a
77
+ * voice is still held in a hand on its own pass, so it keeps its `reach`
78
+ * entry and remains a voice of the instrument; this names which of them are
79
+ * played that way.
80
+ */
81
+ overdub?: readonly number[];
71
82
  };
72
83
  /**
73
84
  * An instrument the library can check a passage against.
@@ -75,6 +86,36 @@ type PercussionProfile = InstrumentProfileCommon & {
75
86
  * @category Core
76
87
  */
77
88
  type InstrumentProfile = StringedProfile | PercussionProfile;
89
+ declare const checked: unique symbol;
90
+ /**
91
+ * A neck whose every field has been checked against the domain it declares.
92
+ *
93
+ * @category Core
94
+ */
95
+ type ValidatedStringedProfile = StringedProfile & {
96
+ readonly [checked]: true;
97
+ };
98
+ /**
99
+ * A kit whose every field has been checked against the domain it declares.
100
+ *
101
+ * @category Core
102
+ */
103
+ type ValidatedPercussionProfile = PercussionProfile & {
104
+ readonly [checked]: true;
105
+ };
106
+ /**
107
+ * A profile whose every field has been checked against the domain it declares.
108
+ *
109
+ * The mark is carried by the type alone — nothing is added to the object, so a
110
+ * validated profile serializes exactly as the plain one it was made from. Its
111
+ * only source is {@link toInstrumentProfile}, which is what makes the mark worth
112
+ * anything: the routines that read a profile note by note take this rather than
113
+ * a plain {@link InstrumentProfile}, so a path that skipped the checks does not
114
+ * compile instead of failing on the one passage that happens to expose it.
115
+ *
116
+ * @category Core
117
+ */
118
+ type ValidatedProfile = ValidatedStringedProfile | ValidatedPercussionProfile;
78
119
  /**
79
120
  * Anything that names an instrument: a plain {@link InstrumentProfile}, or a
80
121
  * value that serializes to one such as the `Instrument` class.
@@ -89,6 +130,41 @@ type InstrumentProfileLike = InstrumentProfile | {
89
130
  /** The profile data this value stands for. */
90
131
  toJSON(): InstrumentProfile;
91
132
  };
133
+ /**
134
+ * Resolve any instrument-shaped value to a plain {@link InstrumentProfile}.
135
+ *
136
+ * The counterpart of {@link toNoteData} for instruments: an entry point takes
137
+ * whatever form the caller has — the profile a project file holds, one of the
138
+ * built-in profiles, or an `Instrument` instance — and gets one shape back. An
139
+ * instance is accepted through its `toJSON` method rather than by its type,
140
+ * because the core layer cannot import the model layer that defines the class.
141
+ *
142
+ * @param value A plain profile, or a value whose `toJSON` returns one.
143
+ * @param name What the instrument is called in an error message, so a caller
144
+ * holding several of them hears which one was malformed.
145
+ * @returns The validated profile.
146
+ * @throws If the value names no instrument, or the instrument it names is
147
+ * contradictory — a neck with no strings, a fret count that is no count, or a
148
+ * kit no limb reaches.
149
+ * @category Core
150
+ */
151
+ declare function toInstrumentProfile(value: InstrumentProfileLike, name?: string): ValidatedProfile;
152
+ /**
153
+ * Resolve any instrument-shaped value to a plain {@link StringedProfile}.
154
+ *
155
+ * What {@link toInstrumentProfile} is for an entry point that reads any
156
+ * instrument, this is for one that only has a neck to work with: a bass line
157
+ * placed on strings and frets cannot be written for a kit, and saying so by
158
+ * name is more use than a missing `tuning` surfacing later as a note the
159
+ * generator could not place.
160
+ *
161
+ * @param value A plain profile, or a value whose `toJSON` returns one.
162
+ * @param name What the instrument is called in an error message.
163
+ * @returns The validated profile, narrowed to the stringed family.
164
+ * @throws If the value names no instrument, or names one with no strings.
165
+ * @category Core
166
+ */
167
+ declare function toStringedProfile(value: InstrumentProfileLike, name?: string): ValidatedStringedProfile;
92
168
  /**
93
169
  * A fretting-hand position: which string, and how far up the neck.
94
170
  *
@@ -118,7 +194,7 @@ type StringFingering = {
118
194
  * ```
119
195
  * @category Core
120
196
  */
121
- declare function instrumentRange(profile: InstrumentProfile): {
197
+ declare function instrumentRange(profile: InstrumentProfileLike): {
122
198
  low: number;
123
199
  high: number;
124
200
  };
@@ -134,7 +210,7 @@ declare function instrumentRange(profile: InstrumentProfile): {
134
210
  * produces it.
135
211
  * @category Core
136
212
  */
137
- declare function canSound(profile: InstrumentProfile, pitch: number): boolean;
213
+ declare function canSound(profile: InstrumentProfileLike, pitch: number): boolean;
138
214
  /**
139
215
  * Every position on the neck that sounds a pitch, lowest string first.
140
216
  *
@@ -143,7 +219,7 @@ declare function canSound(profile: InstrumentProfile, pitch: number): boolean;
143
219
  * @returns One entry per string that reaches the pitch; empty when none does.
144
220
  * @category Core
145
221
  */
146
- declare function fingeringsFor(profile: StringedProfile, pitch: number): StringFingering[];
222
+ declare function fingeringsFor(profile: InstrumentProfileLike, pitch: number): StringFingering[];
147
223
  /**
148
224
  * Move a pitch by whole octaves until the instrument can sound it.
149
225
  *
@@ -154,8 +230,9 @@ declare function fingeringsFor(profile: StringedProfile, pitch: number): StringF
154
230
  *
155
231
  * @param pitch MIDI pitch to place.
156
232
  * @param profile The instrument.
157
- * @returns The nearest octave transposition the instrument sounds, searching
158
- * upward first; the pitch unchanged when no transposition of it is available.
233
+ * @returns The nearest octave transposition the instrument sounds, taking the
234
+ * upper one when two are equally near; the pitch unchanged when no
235
+ * transposition of it is available.
159
236
  *
160
237
  * @example
161
238
  * ```ts
@@ -164,7 +241,7 @@ declare function fingeringsFor(profile: StringedProfile, pitch: number): StringF
164
241
  * ```
165
242
  * @category Core
166
243
  */
167
- declare function foldIntoRange(pitch: number, profile: InstrumentProfile): number;
244
+ declare function foldIntoRange(pitch: number, profile: InstrumentProfileLike): number;
168
245
 
169
246
  /**
170
247
  * Hierarchical seeds: one project number that addresses every part.
@@ -284,4 +361,4 @@ declare function createPositionalRng(seed: number): PositionalRng;
284
361
  */
285
362
  declare function includeAt(rng: PositionalRng, complexity: number, ...path: SeedPath): boolean;
286
363
 
287
- export { type InstrumentProfile as I, LIMBS as L, type PercussionProfile as P, type SeedPath as S, type InstrumentProfileCommon as a, type InstrumentProfileLike as b, type Limb as c, type PositionalRng as d, type StringFingering as e, type StringedProfile as f, canSound as g, createPositionalRng as h, deriveSeed as i, fingeringsFor as j, foldIntoRange as k, includeAt as l, instrumentRange as m };
364
+ export { type InstrumentProfile as I, LIMBS as L, type PercussionProfile as P, type SeedPath as S, type ValidatedPercussionProfile as V, type InstrumentProfileCommon as a, type InstrumentProfileLike as b, type Limb as c, type PositionalRng as d, type StringFingering as e, type StringedProfile as f, type ValidatedProfile as g, type ValidatedStringedProfile as h, canSound as i, createPositionalRng as j, deriveSeed as k, fingeringsFor as l, foldIntoRange as m, includeAt as n, instrumentRange as o, toStringedProfile as p, toInstrumentProfile as t };
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-RHIJ3S4I.cjs');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-UGLFDG7L.cjs');
2
2
 
3
3
 
4
4
 
@@ -16,16 +16,16 @@
16
16
 
17
17
 
18
18
 
19
+ var _chunk76ZBTRG2cjs = require('../chunk-76ZBTRG2.cjs');
19
20
 
20
21
 
21
22
 
22
23
 
23
24
 
24
25
 
25
- var _chunkWWURE4XTcjs = require('../chunk-WWURE4XT.cjs');
26
26
 
27
27
 
28
- var _chunk6XPTBE7Ycjs = require('../chunk-6XPTBE7Y.cjs');
28
+ var _chunkPM4XJE2Ycjs = require('../chunk-PM4XJE2Y.cjs');
29
29
 
30
30
 
31
31
 
@@ -132,8 +132,6 @@ var _chunk6XPTBE7Ycjs = require('../chunk-6XPTBE7Y.cjs');
132
132
 
133
133
 
134
134
 
135
- var _chunkUADYAYATcjs = require('../chunk-UADYAYAT.cjs');
136
- require('../chunk-Q2WGKJNN.cjs');
137
135
 
138
136
 
139
137
 
@@ -144,11 +142,13 @@ require('../chunk-Q2WGKJNN.cjs');
144
142
 
145
143
 
146
144
 
145
+ var _chunk3R3QVKY5cjs = require('../chunk-3R3QVKY5.cjs');
147
146
 
148
147
 
149
148
 
150
149
 
151
150
 
151
+ var _chunkS5BKZZGMcjs = require('../chunk-S5BKZZGM.cjs');
152
152
 
153
153
 
154
154
 
@@ -263,5 +263,34 @@ require('../chunk-Q2WGKJNN.cjs');
263
263
 
264
264
 
265
265
 
266
- exports.ALTERED_MASK = _chunkUADYAYATcjs.ALTERED_MASK; exports.BLUES_MASK = _chunkUADYAYATcjs.BLUES_MASK; exports.CHROMATIC_MASK = _chunkUADYAYATcjs.CHROMATIC_MASK; exports.DORIAN_MASK = _chunkUADYAYATcjs.DORIAN_MASK; exports.DOUBLE_HARMONIC_MASK = _chunkUADYAYATcjs.DOUBLE_HARMONIC_MASK; exports.HARMONIC_MINOR_MASK = _chunkUADYAYATcjs.HARMONIC_MINOR_MASK; exports.LOCRIAN_MASK = _chunkUADYAYATcjs.LOCRIAN_MASK; exports.LOCRIAN_NATURAL2_MASK = _chunkUADYAYATcjs.LOCRIAN_NATURAL2_MASK; exports.LYDIAN_DOMINANT_MASK = _chunkUADYAYATcjs.LYDIAN_DOMINANT_MASK; exports.LYDIAN_MASK = _chunkUADYAYATcjs.LYDIAN_MASK; exports.MAJOR_MASK = _chunkUADYAYATcjs.MAJOR_MASK; exports.MAJOR_PENTATONIC_MASK = _chunkUADYAYATcjs.MAJOR_PENTATONIC_MASK; exports.MARWA_MASK = _chunkUADYAYATcjs.MARWA_MASK; exports.MELODIC_MINOR_MASK = _chunkUADYAYATcjs.MELODIC_MINOR_MASK; exports.MINOR_PENTATONIC_MASK = _chunkUADYAYATcjs.MINOR_PENTATONIC_MASK; exports.MIXOLYDIAN_B13_MASK = _chunkUADYAYATcjs.MIXOLYDIAN_B13_MASK; exports.MIXOLYDIAN_MASK = _chunkUADYAYATcjs.MIXOLYDIAN_MASK; exports.MIYAKO_BUSHI_MASK = _chunkUADYAYATcjs.MIYAKO_BUSHI_MASK; exports.NAMED_SCALES = _chunkUADYAYATcjs.NAMED_SCALES; exports.NATURAL_MINOR_MASK = _chunkUADYAYATcjs.NATURAL_MINOR_MASK; exports.NoteSafety = _chunkUADYAYATcjs.NoteSafety; exports.OCTATONIC_HALF_WHOLE_MASK = _chunkUADYAYATcjs.OCTATONIC_HALF_WHOLE_MASK; exports.OCTATONIC_WHOLE_HALF_MASK = _chunkUADYAYATcjs.OCTATONIC_WHOLE_HALF_MASK; exports.PHRYGIAN_DOMINANT_MASK = _chunkUADYAYATcjs.PHRYGIAN_DOMINANT_MASK; exports.PHRYGIAN_MASK = _chunkUADYAYATcjs.PHRYGIAN_MASK; exports.PROFILE_WEIGHTS = _chunkUADYAYATcjs.PROFILE_WEIGHTS; exports.PURVI_MASK = _chunkUADYAYATcjs.PURVI_MASK; exports.RITSU_MASK = _chunkUADYAYATcjs.RITSU_MASK; exports.RYUKYU_MASK = _chunkUADYAYATcjs.RYUKYU_MASK; exports.ReasonFlag = _chunkUADYAYATcjs.ReasonFlag; exports.SATB_RANGES = _chunkWWURE4XTcjs.SATB_RANGES; exports.SCALE_ALIASES = _chunkUADYAYATcjs.SCALE_ALIASES; exports.SCALE_SYSTEMS = _chunkUADYAYATcjs.SCALE_SYSTEMS; exports.TODI_MASK = _chunkUADYAYATcjs.TODI_MASK; exports.TRANSPOSING_INSTRUMENTS = _chunkWWURE4XTcjs.TRANSPOSING_INSTRUMENTS; exports.WHOLE_TONE_MASK = _chunkUADYAYATcjs.WHOLE_TONE_MASK; exports.WORLD_SCALES = _chunkUADYAYATcjs.WORLD_SCALES; exports.availableTensions = _chunkWWURE4XTcjs.availableTensions; exports.avoidNotes = _chunkWWURE4XTcjs.avoidNotes; exports.checkPartWriting = _chunkWWURE4XTcjs.checkPartWriting; exports.checkSpecies = _chunkWWURE4XTcjs.checkSpecies; exports.chordFromDegree = _chunkUADYAYATcjs.chordFromDegree; exports.chordFromSpan = _chunkUADYAYATcjs.chordFromSpan; exports.chordFromSpec = _chunkUADYAYATcjs.chordFromSpec; exports.chordPitchClasses = _chunkUADYAYATcjs.chordPitchClasses; exports.chordQualities = _chunkUADYAYATcjs.chordQualities; exports.chordScaleReport = _chunkWWURE4XTcjs.chordScaleReport; exports.chordScales = _chunkWWURE4XTcjs.chordScales; exports.chordSpecIntervals = _chunkUADYAYATcjs.chordSpecIntervals; exports.chordSpecOf = _chunkUADYAYATcjs.chordSpecOf; exports.chordSpecQuality = _chunkUADYAYATcjs.chordSpecQuality; exports.chordToneRole = _chunkUADYAYATcjs.chordToneRole; exports.classifySpelledInterval = _chunkUADYAYATcjs.classifySpelledInterval; exports.createsBattuta = _chunkUADYAYATcjs.createsBattuta; exports.createsHiddenParallelPerfect = _chunkUADYAYATcjs.createsHiddenParallelPerfect; exports.createsParallelOctave = _chunkUADYAYATcjs.createsParallelOctave; exports.createsParallelPerfect = _chunkUADYAYATcjs.createsParallelPerfect; exports.createsParallelUnison = _chunkUADYAYATcjs.createsParallelUnison; exports.createsVerticalDissonance = _chunkUADYAYATcjs.createsVerticalDissonance; exports.createsVoiceCrossing = _chunkUADYAYATcjs.createsVoiceCrossing; exports.createsVoiceOverlap = _chunkUADYAYATcjs.createsVoiceOverlap; exports.diatonicPitchClasses = _chunkUADYAYATcjs.diatonicPitchClasses; exports.diatonicSeventh = _chunkUADYAYATcjs.diatonicSeventh; exports.diatonicTriad = _chunkUADYAYATcjs.diatonicTriad; exports.dominantKeyOf = _chunkUADYAYATcjs.dominantKeyOf; exports.enharmonicKeyOf = _chunkUADYAYATcjs.enharmonicKeyOf; exports.enumerateSafePitches = _chunkUADYAYATcjs.enumerateSafePitches; exports.evaluateSafety = _chunkUADYAYATcjs.evaluateSafety; exports.exceedsSpacing = _chunkUADYAYATcjs.exceedsSpacing; exports.figuredBassOf = _chunkWWURE4XTcjs.figuredBassOf; exports.figuredBassRealization = _chunkWWURE4XTcjs.figuredBassRealization; exports.formatChordSymbol = _chunkUADYAYATcjs.formatChordSymbol; exports.instrumentTransposition = _chunkWWURE4XTcjs.instrumentTransposition; exports.intervalAboveRoot = _chunkUADYAYATcjs.intervalAboveRoot; exports.isAugmentedMelodicInterval = _chunkUADYAYATcjs.isAugmentedMelodicInterval; exports.isChordMember = _chunkUADYAYATcjs.isChordMember; exports.isForbiddenMelodicLeap = _chunkUADYAYATcjs.isForbiddenMelodicLeap; exports.isLeadingToneResolution = _chunkUADYAYATcjs.isLeadingToneResolution; exports.isScaleTone = _chunkUADYAYATcjs.isScaleTone; exports.keyFromFifths = _chunkUADYAYATcjs.keyFromFifths; exports.keyRelationBetween = _chunkUADYAYATcjs.keyRelationBetween; exports.keySignatureFifths = _chunkUADYAYATcjs.keySignatureFifths; exports.majorKey = _chunkUADYAYATcjs.majorKey; exports.makeChord = _chunkUADYAYATcjs.makeChord; exports.maskFromOffsets = _chunkUADYAYATcjs.maskFromOffsets; exports.minorKey = _chunkUADYAYATcjs.minorKey; exports.namedScaleMask = _chunkUADYAYATcjs.namedScaleMask; exports.nearestScaleTone = _chunkUADYAYATcjs.nearestScaleTone; exports.nextVoicing = _chunkWWURE4XTcjs.nextVoicing; exports.noteNames = _chunkUADYAYATcjs.noteNames; exports.parallelKeyOf = _chunkUADYAYATcjs.parallelKeyOf; exports.parseChordSymbol = _chunkUADYAYATcjs.parseChordSymbol; exports.pitchToScaleDegree = _chunkUADYAYATcjs.pitchToScaleDegree; exports.profileWeights = _chunkUADYAYATcjs.profileWeights; exports.realizeFiguredBass = _chunkWWURE4XTcjs.realizeFiguredBass; exports.relatedKeysOf = _chunkUADYAYATcjs.relatedKeysOf; exports.relativeKeyOf = _chunkUADYAYATcjs.relativeKeyOf; exports.requireScaleMask = _chunkUADYAYATcjs.requireScaleMask; exports.resolveScaleName = _chunkUADYAYATcjs.resolveScaleName; exports.roleOf = _chunk6XPTBE7Ycjs.roleOf; exports.scaleByName = _chunkUADYAYATcjs.scaleByName; exports.scaleMatchesChord = _chunkWWURE4XTcjs.scaleMatchesChord; exports.scaleSystemOf = _chunkUADYAYATcjs.scaleSystemOf; exports.scaleTonesInDegreeOrder = _chunkUADYAYATcjs.scaleTonesInDegreeOrder; exports.scalesForChanges = _chunkWWURE4XTcjs.scalesForChanges; exports.spanFromChord = _chunkUADYAYATcjs.spanFromChord; exports.spellChord = _chunkUADYAYATcjs.spellChord; exports.spellChordFromRoot = _chunkUADYAYATcjs.spellChordFromRoot; exports.spellPitch = _chunkUADYAYATcjs.spellPitch; exports.spellPitchClass = _chunkUADYAYATcjs.spellPitchClass; exports.spellPitchClasses = _chunkUADYAYATcjs.spellPitchClasses; exports.spellScale = _chunkUADYAYATcjs.spellScale; exports.spellVoicing = _chunkWWURE4XTcjs.spellVoicing; exports.spelledKeyOf = _chunkUADYAYATcjs.spelledKeyOf; exports.subdominantKeyOf = _chunkUADYAYATcjs.subdominantKeyOf; exports.supportsFunctionalHarmony = _chunkUADYAYATcjs.supportsFunctionalHarmony; exports.toChordData = _chunkUADYAYATcjs.toChordData; exports.toKeyScale = _chunkUADYAYATcjs.toKeyScale; exports.toSoundingPitch = _chunkWWURE4XTcjs.toSoundingPitch; exports.toWrittenPitch = _chunkWWURE4XTcjs.toWrittenPitch; exports.transposeChord = _chunkUADYAYATcjs.transposeChord; exports.transposeChordSymbol = _chunkUADYAYATcjs.transposeChordSymbol; exports.tryParseChordSymbol = _chunkUADYAYATcjs.tryParseChordSymbol; exports.voiceChord = _chunkWWURE4XTcjs.voiceChord; exports.voiceChordStyled = _chunkWWURE4XTcjs.voiceChordStyled; exports.voiceIndependence = _chunkUADYAYATcjs.voiceIndependence; exports.voiceLeadingCost = _chunkWWURE4XTcjs.voiceLeadingCost; exports.voiceProgression = _chunkWWURE4XTcjs.voiceProgression;
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+ exports.ALTERED_MASK = _chunk3R3QVKY5cjs.ALTERED_MASK; exports.BLUES_MASK = _chunk3R3QVKY5cjs.BLUES_MASK; exports.BudgetExceededError = _chunkS5BKZZGMcjs.BudgetExceededError; exports.CHROMATIC_MASK = _chunk3R3QVKY5cjs.CHROMATIC_MASK; exports.ConsonanceClass = _chunkS5BKZZGMcjs.ConsonanceClass; exports.DORIAN_MASK = _chunk3R3QVKY5cjs.DORIAN_MASK; exports.DOUBLE_HARMONIC_MASK = _chunk3R3QVKY5cjs.DOUBLE_HARMONIC_MASK; exports.HARMONIC_MINOR_MASK = _chunk3R3QVKY5cjs.HARMONIC_MINOR_MASK; exports.InvalidInputError = _chunkS5BKZZGMcjs.InvalidInputError; exports.LOCRIAN_MASK = _chunk3R3QVKY5cjs.LOCRIAN_MASK; exports.LOCRIAN_NATURAL2_MASK = _chunk3R3QVKY5cjs.LOCRIAN_NATURAL2_MASK; exports.LYDIAN_DOMINANT_MASK = _chunk3R3QVKY5cjs.LYDIAN_DOMINANT_MASK; exports.LYDIAN_MASK = _chunk3R3QVKY5cjs.LYDIAN_MASK; exports.MAJOR_MASK = _chunk3R3QVKY5cjs.MAJOR_MASK; exports.MAJOR_PENTATONIC_MASK = _chunk3R3QVKY5cjs.MAJOR_PENTATONIC_MASK; exports.MARWA_MASK = _chunk3R3QVKY5cjs.MARWA_MASK; exports.MELODIC_MINOR_MASK = _chunk3R3QVKY5cjs.MELODIC_MINOR_MASK; exports.MINOR_PENTATONIC_MASK = _chunk3R3QVKY5cjs.MINOR_PENTATONIC_MASK; exports.MIXOLYDIAN_B13_MASK = _chunk3R3QVKY5cjs.MIXOLYDIAN_B13_MASK; exports.MIXOLYDIAN_MASK = _chunk3R3QVKY5cjs.MIXOLYDIAN_MASK; exports.MIYAKO_BUSHI_MASK = _chunk3R3QVKY5cjs.MIYAKO_BUSHI_MASK; exports.NAMED_SCALES = _chunk3R3QVKY5cjs.NAMED_SCALES; exports.NATURAL_MINOR_MASK = _chunk3R3QVKY5cjs.NATURAL_MINOR_MASK; exports.NoSolutionError = _chunkS5BKZZGMcjs.NoSolutionError; exports.NoteSafety = _chunk3R3QVKY5cjs.NoteSafety; exports.OCTATONIC_HALF_WHOLE_MASK = _chunk3R3QVKY5cjs.OCTATONIC_HALF_WHOLE_MASK; exports.OCTATONIC_WHOLE_HALF_MASK = _chunk3R3QVKY5cjs.OCTATONIC_WHOLE_HALF_MASK; exports.PHRYGIAN_DOMINANT_MASK = _chunk3R3QVKY5cjs.PHRYGIAN_DOMINANT_MASK; exports.PHRYGIAN_MASK = _chunk3R3QVKY5cjs.PHRYGIAN_MASK; exports.PROFILE_WEIGHTS = _chunk3R3QVKY5cjs.PROFILE_WEIGHTS; exports.PURVI_MASK = _chunk3R3QVKY5cjs.PURVI_MASK; exports.RITSU_MASK = _chunk3R3QVKY5cjs.RITSU_MASK; exports.RYUKYU_MASK = _chunk3R3QVKY5cjs.RYUKYU_MASK; exports.ReasonFlag = _chunk3R3QVKY5cjs.ReasonFlag; exports.SATB_RANGES = _chunk76ZBTRG2cjs.SATB_RANGES; exports.SCALE_ALIASES = _chunk3R3QVKY5cjs.SCALE_ALIASES; exports.SCALE_SYSTEMS = _chunk3R3QVKY5cjs.SCALE_SYSTEMS; exports.TODI_MASK = _chunk3R3QVKY5cjs.TODI_MASK; exports.TRANSPOSING_INSTRUMENTS = _chunk76ZBTRG2cjs.TRANSPOSING_INSTRUMENTS; exports.WHOLE_TONE_MASK = _chunk3R3QVKY5cjs.WHOLE_TONE_MASK; exports.WORLD_SCALES = _chunk3R3QVKY5cjs.WORLD_SCALES; exports.assertKeyVariant = _chunk3R3QVKY5cjs.assertKeyVariant; exports.assertModeMask = _chunk3R3QVKY5cjs.assertModeMask; exports.availableTensions = _chunkPM4XJE2Ycjs.availableTensions; exports.avoidNotes = _chunkPM4XJE2Ycjs.avoidNotes; exports.checkPartWriting = _chunk76ZBTRG2cjs.checkPartWriting; exports.checkSpecies = _chunk76ZBTRG2cjs.checkSpecies; exports.chordFromDegree = _chunk3R3QVKY5cjs.chordFromDegree; exports.chordFromSpan = _chunk3R3QVKY5cjs.chordFromSpan; exports.chordFromSpec = _chunk3R3QVKY5cjs.chordFromSpec; exports.chordPitchClasses = _chunk3R3QVKY5cjs.chordPitchClasses; exports.chordQualities = _chunk3R3QVKY5cjs.chordQualities; exports.chordScaleReport = _chunkPM4XJE2Ycjs.chordScaleReport; exports.chordScales = _chunkPM4XJE2Ycjs.chordScales; exports.chordSpecIntervals = _chunk3R3QVKY5cjs.chordSpecIntervals; exports.chordSpecOf = _chunk3R3QVKY5cjs.chordSpecOf; exports.chordSpecQuality = _chunk3R3QVKY5cjs.chordSpecQuality; exports.chordToneRole = _chunk3R3QVKY5cjs.chordToneRole; exports.classifySpelledInterval = _chunk3R3QVKY5cjs.classifySpelledInterval; exports.createsBattuta = _chunk3R3QVKY5cjs.createsBattuta; exports.createsHiddenParallelPerfect = _chunk3R3QVKY5cjs.createsHiddenParallelPerfect; exports.createsParallelOctave = _chunk3R3QVKY5cjs.createsParallelOctave; exports.createsParallelPerfect = _chunk3R3QVKY5cjs.createsParallelPerfect; exports.createsParallelUnison = _chunk3R3QVKY5cjs.createsParallelUnison; exports.createsVerticalDissonance = _chunk3R3QVKY5cjs.createsVerticalDissonance; exports.createsVoiceCrossing = _chunk3R3QVKY5cjs.createsVoiceCrossing; exports.createsVoiceOverlap = _chunk3R3QVKY5cjs.createsVoiceOverlap; exports.diatonicPitchClasses = _chunk3R3QVKY5cjs.diatonicPitchClasses; exports.diatonicSeventh = _chunk3R3QVKY5cjs.diatonicSeventh; exports.diatonicTriad = _chunk3R3QVKY5cjs.diatonicTriad; exports.dominantKeyOf = _chunk3R3QVKY5cjs.dominantKeyOf; exports.enharmonicKeyOf = _chunk3R3QVKY5cjs.enharmonicKeyOf; exports.enumerateSafePitches = _chunk3R3QVKY5cjs.enumerateSafePitches; exports.evaluateSafety = _chunk3R3QVKY5cjs.evaluateSafety; exports.exceedsSpacing = _chunk3R3QVKY5cjs.exceedsSpacing; exports.figuredBassOf = _chunk76ZBTRG2cjs.figuredBassOf; exports.figuredBassRealization = _chunk76ZBTRG2cjs.figuredBassRealization; exports.formatChordSymbol = _chunk3R3QVKY5cjs.formatChordSymbol; exports.instrumentTransposition = _chunk76ZBTRG2cjs.instrumentTransposition; exports.intervalAboveRoot = _chunk3R3QVKY5cjs.intervalAboveRoot; exports.isAugmentedMelodicInterval = _chunk3R3QVKY5cjs.isAugmentedMelodicInterval; exports.isChordMember = _chunk3R3QVKY5cjs.isChordMember; exports.isForbiddenMelodicLeap = _chunk3R3QVKY5cjs.isForbiddenMelodicLeap; exports.isLeadingToneResolution = _chunk3R3QVKY5cjs.isLeadingToneResolution; exports.isScaleTone = _chunk3R3QVKY5cjs.isScaleTone; exports.isSignatureKey = _chunk3R3QVKY5cjs.isSignatureKey; exports.keyFromFifths = _chunk3R3QVKY5cjs.keyFromFifths; exports.keyRelationBetween = _chunk3R3QVKY5cjs.keyRelationBetween; exports.keySignatureFifths = _chunk3R3QVKY5cjs.keySignatureFifths; exports.majorKey = _chunk3R3QVKY5cjs.majorKey; exports.makeChord = _chunk3R3QVKY5cjs.makeChord; exports.maskFromOffsets = _chunk3R3QVKY5cjs.maskFromOffsets; exports.minorKey = _chunk3R3QVKY5cjs.minorKey; exports.namedScaleMask = _chunk3R3QVKY5cjs.namedScaleMask; exports.nearestScaleTone = _chunk3R3QVKY5cjs.nearestScaleTone; exports.nextVoicing = _chunk76ZBTRG2cjs.nextVoicing; exports.noteNames = _chunk3R3QVKY5cjs.noteNames; exports.parallelKeyOf = _chunk3R3QVKY5cjs.parallelKeyOf; exports.parseChordSymbol = _chunk3R3QVKY5cjs.parseChordSymbol; exports.pitchToScaleDegree = _chunk3R3QVKY5cjs.pitchToScaleDegree; exports.profileWeights = _chunk3R3QVKY5cjs.profileWeights; exports.realizeFiguredBass = _chunk76ZBTRG2cjs.realizeFiguredBass; exports.relatedKeysOf = _chunk3R3QVKY5cjs.relatedKeysOf; exports.relativeKeyOf = _chunk3R3QVKY5cjs.relativeKeyOf; exports.requireScaleMask = _chunk3R3QVKY5cjs.requireScaleMask; exports.resolveKey = _chunk3R3QVKY5cjs.resolveKey; exports.resolveScaleName = _chunk3R3QVKY5cjs.resolveScaleName; exports.roleOf = _chunkPM4XJE2Ycjs.roleOf; exports.scaleByName = _chunk3R3QVKY5cjs.scaleByName; exports.scaleLadderPitch = _chunk3R3QVKY5cjs.scaleLadderPitch; exports.scaleLadderPosition = _chunk3R3QVKY5cjs.scaleLadderPosition; exports.scaleMatchesChord = _chunkPM4XJE2Ycjs.scaleMatchesChord; exports.scaleOf = _chunk3R3QVKY5cjs.scaleOf; exports.scaleSystemOf = _chunk3R3QVKY5cjs.scaleSystemOf; exports.scaleTonesInDegreeOrder = _chunk3R3QVKY5cjs.scaleTonesInDegreeOrder; exports.scalesForChanges = _chunkPM4XJE2Ycjs.scalesForChanges; exports.shiftByScaleDegrees = _chunk3R3QVKY5cjs.shiftByScaleDegrees; exports.spanFromChord = _chunk3R3QVKY5cjs.spanFromChord; exports.spellChord = _chunk3R3QVKY5cjs.spellChord; exports.spellChordFromRoot = _chunk3R3QVKY5cjs.spellChordFromRoot; exports.spellPitch = _chunk3R3QVKY5cjs.spellPitch; exports.spellPitchClass = _chunk3R3QVKY5cjs.spellPitchClass; exports.spellPitchClasses = _chunk3R3QVKY5cjs.spellPitchClasses; exports.spellScale = _chunk3R3QVKY5cjs.spellScale; exports.spellVoicing = _chunk76ZBTRG2cjs.spellVoicing; exports.spelledKeyOf = _chunk3R3QVKY5cjs.spelledKeyOf; exports.subdominantKeyOf = _chunk3R3QVKY5cjs.subdominantKeyOf; exports.supportsFunctionalHarmony = _chunk3R3QVKY5cjs.supportsFunctionalHarmony; exports.toChordData = _chunk3R3QVKY5cjs.toChordData; exports.toKeyScale = _chunk3R3QVKY5cjs.toKeyScale; exports.toSoundingPitch = _chunk76ZBTRG2cjs.toSoundingPitch; exports.toWrittenPitch = _chunk76ZBTRG2cjs.toWrittenPitch; exports.transposeChord = _chunk3R3QVKY5cjs.transposeChord; exports.transposeChordSymbol = _chunk3R3QVKY5cjs.transposeChordSymbol; exports.tryParseChordSymbol = _chunk3R3QVKY5cjs.tryParseChordSymbol; exports.tryResolveKeyName = _chunk3R3QVKY5cjs.tryResolveKeyName; exports.variantOfMask = _chunk3R3QVKY5cjs.variantOfMask; exports.voiceChord = _chunk76ZBTRG2cjs.voiceChord; exports.voiceChordStyled = _chunk76ZBTRG2cjs.voiceChordStyled; exports.voiceIndependence = _chunk3R3QVKY5cjs.voiceIndependence; exports.voiceLeadingCost = _chunk76ZBTRG2cjs.voiceLeadingCost; exports.voiceProgression = _chunk76ZBTRG2cjs.voiceProgression;
267
296
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uuPAAC","file":"/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+jRAAC","file":"/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"}