@libraz/libcantus 1.1.0 → 1.3.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 (103) hide show
  1. package/README.md +4 -0
  2. package/README_ja.md +4 -0
  3. package/dist/analyze/index.cjs +31 -7
  4. package/dist/analyze/index.cjs.map +1 -1
  5. package/dist/analyze/index.d.cts +155 -9
  6. package/dist/analyze/index.d.ts +155 -9
  7. package/dist/analyze/index.js +37 -13
  8. package/dist/{chunk-TT6PKMPR.cjs → chunk-35NBV2FT.cjs} +16 -16
  9. package/dist/{chunk-TT6PKMPR.cjs.map → chunk-35NBV2FT.cjs.map} +1 -1
  10. package/dist/{chunk-YPB3A3EY.cjs → chunk-3R3QVKY5.cjs} +314 -285
  11. package/dist/chunk-3R3QVKY5.cjs.map +1 -0
  12. package/dist/{chunk-GDKE6RQW.cjs → chunk-4R2LWV7E.cjs} +691 -413
  13. package/dist/chunk-4R2LWV7E.cjs.map +1 -0
  14. package/dist/{chunk-RVS4G4MR.cjs → chunk-76ZBTRG2.cjs} +198 -198
  15. package/dist/{chunk-RVS4G4MR.cjs.map → chunk-76ZBTRG2.cjs.map} +1 -1
  16. package/dist/{chunk-X6RJAHII.js → chunk-7KG3RTYS.js} +2 -2
  17. package/dist/{chunk-PQL7E5F6.js → chunk-AGOVW7U6.js} +1 -1
  18. package/dist/{chunk-PQL7E5F6.js.map → chunk-AGOVW7U6.js.map} +1 -1
  19. package/dist/{chunk-5KW7DNCJ.cjs → chunk-B2PW6EHN.cjs} +2423 -453
  20. package/dist/chunk-B2PW6EHN.cjs.map +1 -0
  21. package/dist/{chunk-J772DL3B.cjs → chunk-CGBADIO5.cjs} +53 -53
  22. package/dist/{chunk-J772DL3B.cjs.map → chunk-CGBADIO5.cjs.map} +1 -1
  23. package/dist/{chunk-R5VUXQMP.js → chunk-CPMB7P75.js} +1978 -8
  24. package/dist/chunk-CPMB7P75.js.map +1 -0
  25. package/dist/{chunk-VLE5R7PF.js → chunk-GNVN4PPJ.js} +1874 -8
  26. package/dist/chunk-GNVN4PPJ.js.map +1 -0
  27. package/dist/{chunk-Q6R3QAZD.cjs → chunk-IFZDWIKM.cjs} +2199 -333
  28. package/dist/chunk-IFZDWIKM.cjs.map +1 -0
  29. package/dist/{chunk-DKICR7AN.js → chunk-IPEF6NWB.js} +296 -18
  30. package/dist/chunk-IPEF6NWB.js.map +1 -0
  31. package/dist/{chunk-AWEMD747.js → chunk-M5RYMAFI.js} +3 -3
  32. package/dist/{chunk-HSY2VQXZ.js → chunk-MLBPXA4Z.js} +330 -728
  33. package/dist/chunk-MLBPXA4Z.js.map +1 -0
  34. package/dist/{chunk-H66ARFU5.js → chunk-NB25P3EH.js} +3 -3
  35. package/dist/{chunk-5JJ6EHEZ.cjs → chunk-NM7UAMC3.cjs} +62 -62
  36. package/dist/{chunk-5JJ6EHEZ.cjs.map → chunk-NM7UAMC3.cjs.map} +1 -1
  37. package/dist/{chunk-R7B5N2JK.cjs → chunk-PM4XJE2Y.cjs} +47 -47
  38. package/dist/{chunk-R7B5N2JK.cjs.map → chunk-PM4XJE2Y.cjs.map} +1 -1
  39. package/dist/{chunk-7GOKQJTQ.js → chunk-PUKJP2Z5.js} +2 -2
  40. package/dist/{chunk-QCXYKSZS.cjs → chunk-PWC4CRWT.cjs} +19 -19
  41. package/dist/{chunk-QCXYKSZS.cjs.map → chunk-PWC4CRWT.cjs.map} +1 -1
  42. package/dist/{chunk-FPBZFNCD.js → chunk-RFIBF2RR.js} +47 -18
  43. package/dist/{chunk-FPBZFNCD.js.map → chunk-RFIBF2RR.js.map} +1 -1
  44. package/dist/{chunk-XKSO2V5I.cjs → chunk-S5BKZZGM.cjs} +1 -1
  45. package/dist/{chunk-XKSO2V5I.cjs.map → chunk-S5BKZZGM.cjs.map} +1 -1
  46. package/dist/{chunk-HOHFYGKW.js → chunk-UMWZ4ZET.js} +2 -2
  47. package/dist/{chunk-XVMJO3QF.cjs → chunk-YFA7X2F6.cjs} +489 -887
  48. package/dist/chunk-YFA7X2F6.cjs.map +1 -0
  49. package/dist/{chunk-57WB2EDF.js → chunk-ZBUROTJQ.js} +3 -3
  50. package/dist/{coerce-wwdELNYS.d.ts → coerce-DP0vYu-x.d.ts} +77 -1
  51. package/dist/{coerce-CJlgULrQ.d.cts → coerce-DRERzdve.d.cts} +77 -1
  52. package/dist/core/index.cjs +5 -5
  53. package/dist/core/index.d.cts +2 -2
  54. package/dist/core/index.d.ts +2 -2
  55. package/dist/core/index.js +4 -4
  56. package/dist/generate/index.cjs +20 -8
  57. package/dist/generate/index.cjs.map +1 -1
  58. package/dist/generate/index.d.cts +87 -9
  59. package/dist/generate/index.d.ts +87 -9
  60. package/dist/generate/index.js +19 -7
  61. package/dist/{index-BaoKVVhE.d.cts → index-B9QLziDe.d.cts} +2 -2
  62. package/dist/{index-CnHQgqNh.d.ts → index-BHIUyjhZ.d.ts} +2 -2
  63. package/dist/{index-CBCP84rv.d.cts → index-BL5N2Oyz.d.cts} +1 -1
  64. package/dist/{index-D_hzxD8w.d.cts → index-BMweUlm5.d.cts} +3 -0
  65. package/dist/{index-Ci3xyows.d.ts → index-CL4b4gUQ.d.ts} +3 -0
  66. package/dist/{index-BzLNkmA7.d.cts → index-CY-3NVfy.d.cts} +486 -5
  67. package/dist/{index-CnIdP4EZ.d.ts → index-Dw2DP7vm.d.ts} +1 -1
  68. package/dist/{index-DpC-mDlV.d.ts → index-zaZdmnU4.d.ts} +486 -5
  69. package/dist/index.cjs +49 -13
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.cts +10 -10
  72. package/dist/index.d.ts +10 -10
  73. package/dist/index.js +55 -19
  74. package/dist/{masks-O73Rhj5d.d.ts → masks-Cc7-MzzY.d.ts} +1 -1
  75. package/dist/{masks-C8TWLFIi.d.cts → masks-pADfTOiD.d.cts} +1 -1
  76. package/dist/model/index.cjs +12 -12
  77. package/dist/model/index.d.cts +213 -16
  78. package/dist/model/index.d.ts +213 -16
  79. package/dist/model/index.js +11 -11
  80. package/dist/{index-DTsKaPaC.d.cts → profile-CQMEqdH9.d.cts} +88 -601
  81. package/dist/{index-BUtIf2go.d.ts → profile-DLdlIpS9.d.ts} +88 -601
  82. package/dist/theory/index.cjs +5 -5
  83. package/dist/theory/index.d.cts +7 -7
  84. package/dist/theory/index.d.ts +7 -7
  85. package/dist/theory/index.js +4 -4
  86. package/dist/{index-BpWOhkkE.d.ts → types-D-XgxGvp.d.cts} +1170 -14
  87. package/dist/{index-B3WCj_Hm.d.cts → types-Dh7C064C.d.ts} +1170 -14
  88. package/package.json +6 -5
  89. package/dist/chunk-5KW7DNCJ.cjs.map +0 -1
  90. package/dist/chunk-DKICR7AN.js.map +0 -1
  91. package/dist/chunk-GDKE6RQW.cjs.map +0 -1
  92. package/dist/chunk-HSY2VQXZ.js.map +0 -1
  93. package/dist/chunk-Q6R3QAZD.cjs.map +0 -1
  94. package/dist/chunk-R5VUXQMP.js.map +0 -1
  95. package/dist/chunk-VLE5R7PF.js.map +0 -1
  96. package/dist/chunk-XVMJO3QF.cjs.map +0 -1
  97. package/dist/chunk-YPB3A3EY.cjs.map +0 -1
  98. /package/dist/{chunk-X6RJAHII.js.map → chunk-7KG3RTYS.js.map} +0 -0
  99. /package/dist/{chunk-AWEMD747.js.map → chunk-M5RYMAFI.js.map} +0 -0
  100. /package/dist/{chunk-H66ARFU5.js.map → chunk-NB25P3EH.js.map} +0 -0
  101. /package/dist/{chunk-7GOKQJTQ.js.map → chunk-PUKJP2Z5.js.map} +0 -0
  102. /package/dist/{chunk-HOHFYGKW.js.map → chunk-UMWZ4ZET.js.map} +0 -0
  103. /package/dist/{chunk-57WB2EDF.js.map → chunk-ZBUROTJQ.js.map} +0 -0
@@ -1084,25 +1084,73 @@ declare enum NoteSafety {
1084
1084
  /**
1085
1085
  * Bit flags describing why a pitch received its verdict.
1086
1086
  *
1087
+ * Several flags can describe one pitch, so test the combination rather than a
1088
+ * flag alone: an avoid eleventh carries `Tension` as well as `AvoidNote`, and a
1089
+ * usable tension is `Tension` without `AvoidNote`. `ChordTone`, `MinorSecond`
1090
+ * and `MajorSeventh` are informational and never lower the verdict on their
1091
+ * own; every other flag sets at least a warning, and the profile decides how
1092
+ * far past that it goes.
1093
+ *
1087
1094
  * @category Arrangement & Analysis
1088
1095
  */
1089
1096
  declare enum ReasonFlag {
1097
+ /** The candidate is a member of the chord. Informational. */
1090
1098
  ChordTone = 1,
1099
+ /**
1100
+ * The candidate is a ninth, eleventh or thirteenth above the root, not a chord
1101
+ * tone. Also set alongside `AvoidNote` when the avoid note is the eleventh.
1102
+ */
1091
1103
  Tension = 2,
1104
+ /**
1105
+ * The eleventh over a chord with a major third and no fourth, or the major
1106
+ * seventh over a dominant. Always set with `NeedsResolution`, and with
1107
+ * `Tension` for the eleventh.
1108
+ */
1092
1109
  AvoidNote = 4,
1110
+ /** The candidate is in the key but neither a chord tone nor a tension. */
1093
1111
  ScaleTone = 8,
1112
+ /** The candidate is outside the key and not a chord tone. */
1094
1113
  NonScale = 16,
1114
+ /** The candidate lies outside `vocalLow`..`vocalHigh`. */
1095
1115
  OutOfRange = 32,
1116
+ /** The candidate, not itself a chord tone, is a tritone from one. */
1096
1117
  Tritone = 64,
1118
+ /**
1119
+ * The move from `prevPitch` is a forbidden melodic leap as
1120
+ * {@link isForbiddenMelodicLeap} defines it: a tritone, either seventh, or
1121
+ * anything wider than an octave. An octave itself is not. The profile sets
1122
+ * the severity, not the set of leaps. Set with `MelodicTritone` on a tritone
1123
+ * and with `MajorSeventh` on a major seventh.
1124
+ */
1097
1125
  LargeLeap = 128,
1126
+ /** The move from `prevPitch` reduces to a semitone, the minor ninth included. Informational. */
1098
1127
  MinorSecond = 256,
1128
+ /** The move from `prevPitch` reduces to a major seventh; always with `LargeLeap`. Informational. */
1099
1129
  MajorSeventh = 512,
1130
+ /**
1131
+ * On a strong beat, the candidate is dissonant against at least one of
1132
+ * `otherVoices`, apart from the tritone or seventh two chord tones spell. A
1133
+ * perfect fourth counts only when one of the two is the lowest sounding voice,
1134
+ * and under `pop` not when both are chord tones — an inverted chord.
1135
+ */
1100
1136
  VerticalDissonance = 1024,
1137
+ /** The candidate moves in parallel perfect intervals with at least one of `otherVoices`. */
1101
1138
  ParallelPerfect = 2048,
1139
+ /**
1140
+ * The candidate and another voice, the two outer voices of the texture, reach
1141
+ * a perfect interval by similar motion with the upper one leaping.
1142
+ */
1102
1143
  HiddenParallel = 4096,
1144
+ /** The candidate crosses at least one of `otherVoices` since the previous step. */
1103
1145
  VoiceCrossing = 8192,
1146
+ /**
1147
+ * A held pitch, consonant with a voice on the previous step, now dissonant
1148
+ * against it. Always with `VerticalDissonance`.
1149
+ */
1104
1150
  Suspension = 16384,
1151
+ /** The candidate should move by step to `resolveTo`. Set with `AvoidNote`. */
1105
1152
  NeedsResolution = 32768,
1153
+ /** The move from `prevPitch` reduces to a tritone; always with `LargeLeap`. */
1106
1154
  MelodicTritone = 65536
1107
1155
  }
1108
1156
  /**
@@ -1130,6 +1178,20 @@ type SafetyQuery = {
1130
1178
  vocalLow?: number;
1131
1179
  vocalHigh?: number;
1132
1180
  };
1181
+ /**
1182
+ * The reasons one of `otherVoices` contributes to a verdict.
1183
+ *
1184
+ * @category Arrangement & Analysis
1185
+ */
1186
+ type SafetyPartner = {
1187
+ /** The voice's index in {@link SafetyQuery.otherVoices}. */
1188
+ index: number;
1189
+ /**
1190
+ * The pairwise flags this voice raises: `VerticalDissonance`, `Suspension`,
1191
+ * `ParallelPerfect`, `HiddenParallel` and `VoiceCrossing`.
1192
+ */
1193
+ reasons: number;
1194
+ };
1133
1195
  /**
1134
1196
  * The verdict, reason flags, and optional resolution guidance.
1135
1197
  *
@@ -1140,6 +1202,12 @@ type SafetyResult = {
1140
1202
  reasons: number;
1141
1203
  resolveTo?: number;
1142
1204
  suggestions?: number[];
1205
+ /**
1206
+ * The voices behind the pairwise flags in `reasons`, in `otherVoices` order,
1207
+ * when {@link EvaluateSafetyOptions.partners} asked for them and any voice
1208
+ * raised one. Their `reasons` together are exactly the pairwise flags set.
1209
+ */
1210
+ partners?: SafetyPartner[];
1143
1211
  rationale?: string;
1144
1212
  };
1145
1213
  /**
@@ -1184,6 +1252,14 @@ type EvaluateSafetyOptions = {
1184
1252
  * @defaultValue true
1185
1253
  */
1186
1254
  suggestions?: boolean;
1255
+ /**
1256
+ * Whether to report which of `otherVoices` raised each pairwise flag, as
1257
+ * {@link SafetyResult.partners}. The bitmask alone says a parallel fifth is
1258
+ * there; this says against which voice.
1259
+ *
1260
+ * @defaultValue false
1261
+ */
1262
+ partners?: boolean;
1187
1263
  };
1188
1264
  /**
1189
1265
  * Enumerate placeable pitches in a range, chord tones first, descending.
@@ -1250,4 +1326,4 @@ type ChordLike = string | Chord | {
1250
1326
  */
1251
1327
  declare function toChordData(value: ChordLike): Chord;
1252
1328
 
1253
- export { toChordData as $, type Alteration as A, chordToneRole as B, type ChordBase as C, diatonicSeventh as D, type EvaluateSafetyOptions as E, diatonicTriad as F, dominantKeyOf as G, enharmonicKeyOf as H, enumerateSafePitches as I, evaluateSafety as J, type KeyLike as K, intervalAboveRoot as L, isChordMember as M, NoteSafety as N, keyRelationBetween as O, PROFILE_WEIGHTS as P, makeChord as Q, ReasonFlag as R, type SafetyProfile as S, parallelKeyOf as T, profileWeights as U, type VoiceSnapshot as V, relatedKeysOf as W, relativeKeyOf as X, spanFromChord as Y, spelledKeyOf as Z, subdominantKeyOf as _, type AlteredDegree as a, toKeyScale as a0, transposeChord as a1, type Chord as b, type ChordLike as c, type ChordQuality as d, type ChordSegment as e, type ChordSeventh as f, type ChordSpan as g, type ChordSpec as h, type ChordToneRole as i, type KeyRelation as j, type KeyVariant as k, type PitchSpelling as l, type ProfileWeights as m, type ResolvedKey as n, type SafetyQuery as o, type SafetyResult as p, type SpelledKeyLike as q, type SpelledKeyScale as r, chordFromDegree as s, chordFromSpan as t, chordFromSpec as u, chordPitchClasses as v, chordQualities as w, chordSpecIntervals as x, chordSpecOf as y, chordSpecQuality as z };
1329
+ export { subdominantKeyOf as $, type Alteration as A, chordSpecQuality as B, type ChordBase as C, chordToneRole as D, type EvaluateSafetyOptions as E, diatonicSeventh as F, diatonicTriad as G, dominantKeyOf as H, enharmonicKeyOf as I, enumerateSafePitches as J, type KeyLike as K, evaluateSafety as L, intervalAboveRoot as M, NoteSafety as N, isChordMember as O, PROFILE_WEIGHTS as P, keyRelationBetween as Q, ReasonFlag as R, type SafetyPartner as S, makeChord as T, parallelKeyOf as U, type VoiceSnapshot as V, profileWeights as W, relatedKeysOf as X, relativeKeyOf as Y, spanFromChord as Z, spelledKeyOf as _, type AlteredDegree as a, toChordData as a0, toKeyScale as a1, transposeChord as a2, type Chord as b, type ChordLike as c, type ChordQuality as d, type ChordSegment as e, type ChordSeventh as f, type ChordSpan as g, type ChordSpec as h, type ChordToneRole as i, type KeyRelation as j, type KeyVariant as k, type PitchSpelling as l, type ProfileWeights as m, type ResolvedKey as n, type SafetyProfile as o, type SafetyQuery as p, type SafetyResult as q, type SpelledKeyLike as r, type SpelledKeyScale as s, chordFromDegree as t, chordFromSpan as u, chordFromSpec as v, chordPitchClasses as w, chordQualities as x, chordSpecIntervals as y, chordSpecOf as z };
@@ -1084,25 +1084,73 @@ declare enum NoteSafety {
1084
1084
  /**
1085
1085
  * Bit flags describing why a pitch received its verdict.
1086
1086
  *
1087
+ * Several flags can describe one pitch, so test the combination rather than a
1088
+ * flag alone: an avoid eleventh carries `Tension` as well as `AvoidNote`, and a
1089
+ * usable tension is `Tension` without `AvoidNote`. `ChordTone`, `MinorSecond`
1090
+ * and `MajorSeventh` are informational and never lower the verdict on their
1091
+ * own; every other flag sets at least a warning, and the profile decides how
1092
+ * far past that it goes.
1093
+ *
1087
1094
  * @category Arrangement & Analysis
1088
1095
  */
1089
1096
  declare enum ReasonFlag {
1097
+ /** The candidate is a member of the chord. Informational. */
1090
1098
  ChordTone = 1,
1099
+ /**
1100
+ * The candidate is a ninth, eleventh or thirteenth above the root, not a chord
1101
+ * tone. Also set alongside `AvoidNote` when the avoid note is the eleventh.
1102
+ */
1091
1103
  Tension = 2,
1104
+ /**
1105
+ * The eleventh over a chord with a major third and no fourth, or the major
1106
+ * seventh over a dominant. Always set with `NeedsResolution`, and with
1107
+ * `Tension` for the eleventh.
1108
+ */
1092
1109
  AvoidNote = 4,
1110
+ /** The candidate is in the key but neither a chord tone nor a tension. */
1093
1111
  ScaleTone = 8,
1112
+ /** The candidate is outside the key and not a chord tone. */
1094
1113
  NonScale = 16,
1114
+ /** The candidate lies outside `vocalLow`..`vocalHigh`. */
1095
1115
  OutOfRange = 32,
1116
+ /** The candidate, not itself a chord tone, is a tritone from one. */
1096
1117
  Tritone = 64,
1118
+ /**
1119
+ * The move from `prevPitch` is a forbidden melodic leap as
1120
+ * {@link isForbiddenMelodicLeap} defines it: a tritone, either seventh, or
1121
+ * anything wider than an octave. An octave itself is not. The profile sets
1122
+ * the severity, not the set of leaps. Set with `MelodicTritone` on a tritone
1123
+ * and with `MajorSeventh` on a major seventh.
1124
+ */
1097
1125
  LargeLeap = 128,
1126
+ /** The move from `prevPitch` reduces to a semitone, the minor ninth included. Informational. */
1098
1127
  MinorSecond = 256,
1128
+ /** The move from `prevPitch` reduces to a major seventh; always with `LargeLeap`. Informational. */
1099
1129
  MajorSeventh = 512,
1130
+ /**
1131
+ * On a strong beat, the candidate is dissonant against at least one of
1132
+ * `otherVoices`, apart from the tritone or seventh two chord tones spell. A
1133
+ * perfect fourth counts only when one of the two is the lowest sounding voice,
1134
+ * and under `pop` not when both are chord tones — an inverted chord.
1135
+ */
1100
1136
  VerticalDissonance = 1024,
1137
+ /** The candidate moves in parallel perfect intervals with at least one of `otherVoices`. */
1101
1138
  ParallelPerfect = 2048,
1139
+ /**
1140
+ * The candidate and another voice, the two outer voices of the texture, reach
1141
+ * a perfect interval by similar motion with the upper one leaping.
1142
+ */
1102
1143
  HiddenParallel = 4096,
1144
+ /** The candidate crosses at least one of `otherVoices` since the previous step. */
1103
1145
  VoiceCrossing = 8192,
1146
+ /**
1147
+ * A held pitch, consonant with a voice on the previous step, now dissonant
1148
+ * against it. Always with `VerticalDissonance`.
1149
+ */
1104
1150
  Suspension = 16384,
1151
+ /** The candidate should move by step to `resolveTo`. Set with `AvoidNote`. */
1105
1152
  NeedsResolution = 32768,
1153
+ /** The move from `prevPitch` reduces to a tritone; always with `LargeLeap`. */
1106
1154
  MelodicTritone = 65536
1107
1155
  }
1108
1156
  /**
@@ -1130,6 +1178,20 @@ type SafetyQuery = {
1130
1178
  vocalLow?: number;
1131
1179
  vocalHigh?: number;
1132
1180
  };
1181
+ /**
1182
+ * The reasons one of `otherVoices` contributes to a verdict.
1183
+ *
1184
+ * @category Arrangement & Analysis
1185
+ */
1186
+ type SafetyPartner = {
1187
+ /** The voice's index in {@link SafetyQuery.otherVoices}. */
1188
+ index: number;
1189
+ /**
1190
+ * The pairwise flags this voice raises: `VerticalDissonance`, `Suspension`,
1191
+ * `ParallelPerfect`, `HiddenParallel` and `VoiceCrossing`.
1192
+ */
1193
+ reasons: number;
1194
+ };
1133
1195
  /**
1134
1196
  * The verdict, reason flags, and optional resolution guidance.
1135
1197
  *
@@ -1140,6 +1202,12 @@ type SafetyResult = {
1140
1202
  reasons: number;
1141
1203
  resolveTo?: number;
1142
1204
  suggestions?: number[];
1205
+ /**
1206
+ * The voices behind the pairwise flags in `reasons`, in `otherVoices` order,
1207
+ * when {@link EvaluateSafetyOptions.partners} asked for them and any voice
1208
+ * raised one. Their `reasons` together are exactly the pairwise flags set.
1209
+ */
1210
+ partners?: SafetyPartner[];
1143
1211
  rationale?: string;
1144
1212
  };
1145
1213
  /**
@@ -1184,6 +1252,14 @@ type EvaluateSafetyOptions = {
1184
1252
  * @defaultValue true
1185
1253
  */
1186
1254
  suggestions?: boolean;
1255
+ /**
1256
+ * Whether to report which of `otherVoices` raised each pairwise flag, as
1257
+ * {@link SafetyResult.partners}. The bitmask alone says a parallel fifth is
1258
+ * there; this says against which voice.
1259
+ *
1260
+ * @defaultValue false
1261
+ */
1262
+ partners?: boolean;
1187
1263
  };
1188
1264
  /**
1189
1265
  * Enumerate placeable pitches in a range, chord tones first, descending.
@@ -1250,4 +1326,4 @@ type ChordLike = string | Chord | {
1250
1326
  */
1251
1327
  declare function toChordData(value: ChordLike): Chord;
1252
1328
 
1253
- export { toChordData as $, type Alteration as A, chordToneRole as B, type ChordBase as C, diatonicSeventh as D, type EvaluateSafetyOptions as E, diatonicTriad as F, dominantKeyOf as G, enharmonicKeyOf as H, enumerateSafePitches as I, evaluateSafety as J, type KeyLike as K, intervalAboveRoot as L, isChordMember as M, NoteSafety as N, keyRelationBetween as O, PROFILE_WEIGHTS as P, makeChord as Q, ReasonFlag as R, type SafetyProfile as S, parallelKeyOf as T, profileWeights as U, type VoiceSnapshot as V, relatedKeysOf as W, relativeKeyOf as X, spanFromChord as Y, spelledKeyOf as Z, subdominantKeyOf as _, type AlteredDegree as a, toKeyScale as a0, transposeChord as a1, type Chord as b, type ChordLike as c, type ChordQuality as d, type ChordSegment as e, type ChordSeventh as f, type ChordSpan as g, type ChordSpec as h, type ChordToneRole as i, type KeyRelation as j, type KeyVariant as k, type PitchSpelling as l, type ProfileWeights as m, type ResolvedKey as n, type SafetyQuery as o, type SafetyResult as p, type SpelledKeyLike as q, type SpelledKeyScale as r, chordFromDegree as s, chordFromSpan as t, chordFromSpec as u, chordPitchClasses as v, chordQualities as w, chordSpecIntervals as x, chordSpecOf as y, chordSpecQuality as z };
1329
+ export { subdominantKeyOf as $, type Alteration as A, chordSpecQuality as B, type ChordBase as C, chordToneRole as D, type EvaluateSafetyOptions as E, diatonicSeventh as F, diatonicTriad as G, dominantKeyOf as H, enharmonicKeyOf as I, enumerateSafePitches as J, type KeyLike as K, evaluateSafety as L, intervalAboveRoot as M, NoteSafety as N, isChordMember as O, PROFILE_WEIGHTS as P, keyRelationBetween as Q, ReasonFlag as R, type SafetyPartner as S, makeChord as T, parallelKeyOf as U, type VoiceSnapshot as V, profileWeights as W, relatedKeysOf as X, relativeKeyOf as Y, spanFromChord as Z, spelledKeyOf as _, type AlteredDegree as a, toChordData as a0, toKeyScale as a1, transposeChord as a2, type Chord as b, type ChordLike as c, type ChordQuality as d, type ChordSegment as e, type ChordSeventh as f, type ChordSpan as g, type ChordSpec as h, type ChordToneRole as i, type KeyRelation as j, type KeyVariant as k, type PitchSpelling as l, type ProfileWeights as m, type ResolvedKey as n, type SafetyProfile as o, type SafetyQuery as p, type SafetyResult as q, type SpelledKeyLike as r, type SpelledKeyScale as s, chordFromDegree as t, chordFromSpan as u, chordFromSpec as v, chordPitchClasses as w, chordQualities as x, chordSpecIntervals as y, chordSpecOf as z };
@@ -23,7 +23,7 @@
23
23
 
24
24
 
25
25
 
26
- var _chunk5JJ6EHEZcjs = require('../chunk-5JJ6EHEZ.cjs');
26
+ var _chunkNM7UAMC3cjs = require('../chunk-NM7UAMC3.cjs');
27
27
 
28
28
 
29
29
 
@@ -44,10 +44,10 @@ var _chunk5JJ6EHEZcjs = require('../chunk-5JJ6EHEZ.cjs');
44
44
 
45
45
 
46
46
 
47
- var _chunkJ772DL3Bcjs = require('../chunk-J772DL3B.cjs');
47
+ var _chunkCGBADIO5cjs = require('../chunk-CGBADIO5.cjs');
48
48
 
49
49
 
50
- var _chunkTT6PKMPRcjs = require('../chunk-TT6PKMPR.cjs');
50
+ var _chunk35NBV2FTcjs = require('../chunk-35NBV2FT.cjs');
51
51
 
52
52
 
53
53
 
@@ -116,7 +116,7 @@ var _chunkTT6PKMPRcjs = require('../chunk-TT6PKMPR.cjs');
116
116
 
117
117
 
118
118
 
119
- var _chunkXKSO2V5Icjs = require('../chunk-XKSO2V5I.cjs');
119
+ var _chunkS5BKZZGMcjs = require('../chunk-S5BKZZGM.cjs');
120
120
 
121
121
 
122
122
 
@@ -228,5 +228,5 @@ var _chunkXKSO2V5Icjs = require('../chunk-XKSO2V5I.cjs');
228
228
 
229
229
 
230
230
 
231
- exports.ALGORITHM_VERSION = _chunkJ772DL3Bcjs.ALGORITHM_VERSION; exports.ARTICULATIONS = _chunkXKSO2V5Icjs.ARTICULATIONS; exports.BASS_4_STRING = _chunkJ772DL3Bcjs.BASS_4_STRING; exports.BASS_5_STRING = _chunkJ772DL3Bcjs.BASS_5_STRING; exports.BudgetExceededError = _chunkXKSO2V5Icjs.BudgetExceededError; exports.ConsonanceClass = _chunkXKSO2V5Icjs.ConsonanceClass; exports.DEFAULT_GENERATION_BUDGET = _chunkXKSO2V5Icjs.DEFAULT_GENERATION_BUDGET; exports.GUITAR_DROP_D = _chunkJ772DL3Bcjs.GUITAR_DROP_D; exports.GUITAR_STANDARD = _chunkJ772DL3Bcjs.GUITAR_STANDARD; exports.InvalidInputError = _chunkXKSO2V5Icjs.InvalidInputError; exports.JUST_RATIOS = _chunk5JJ6EHEZcjs.JUST_RATIOS; exports.LIMBS = _chunkJ772DL3Bcjs.LIMBS; exports.MIN_ALGORITHM_VERSION = _chunkJ772DL3Bcjs.MIN_ALGORITHM_VERSION; exports.NOTE_VALUES = _chunk5JJ6EHEZcjs.NOTE_VALUES; exports.NoSolutionError = _chunkXKSO2V5Icjs.NoSolutionError; exports.TWELVE_TET = _chunk5JJ6EHEZcjs.TWELVE_TET; exports.assertDegree = _chunkXKSO2V5Icjs.assertDegree; exports.assertFiniteNumber = _chunkXKSO2V5Icjs.assertFiniteNumber; exports.assertFiniteSemitones = _chunkXKSO2V5Icjs.assertFiniteSemitones; exports.assertGenerationBudget = _chunkXKSO2V5Icjs.assertGenerationBudget; exports.assertInteger = _chunkXKSO2V5Icjs.assertInteger; exports.assertMeterMap = _chunkXKSO2V5Icjs.assertMeterMap; exports.assertMidiPitch = _chunkXKSO2V5Icjs.assertMidiPitch; exports.assertNoteEvent = _chunkXKSO2V5Icjs.assertNoteEvent; exports.assertNoteEvents = _chunkXKSO2V5Icjs.assertNoteEvents; exports.assertOneOf = _chunkXKSO2V5Icjs.assertOneOf; exports.assertPositiveInt = _chunkXKSO2V5Icjs.assertPositiveInt; exports.assertRange = _chunkXKSO2V5Icjs.assertRange; exports.assertTimeSignature = _chunkXKSO2V5Icjs.assertTimeSignature; exports.barIndexAt = _chunkXKSO2V5Icjs.barIndexAt; exports.barPositionToBeat = _chunkXKSO2V5Icjs.barPositionToBeat; exports.barPositionToPulse = _chunkXKSO2V5Icjs.barPositionToPulse; exports.barStartBeat = _chunkXKSO2V5Icjs.barStartBeat; exports.beatToBarPosition = _chunkXKSO2V5Icjs.beatToBarPosition; exports.beatsPerBar = _chunkXKSO2V5Icjs.beatsPerBar; exports.beatsPerBarAt = _chunkXKSO2V5Icjs.beatsPerBarAt; exports.beatsToDuration = _chunk5JJ6EHEZcjs.beatsToDuration; exports.beatsToSeconds = _chunk5JJ6EHEZcjs.beatsToSeconds; exports.beatsToTicks = _chunk5JJ6EHEZcjs.beatsToTicks; exports.beatsToTiedDurations = _chunk5JJ6EHEZcjs.beatsToTiedDurations; exports.canSound = _chunkJ772DL3Bcjs.canSound; exports.centsBetweenFreq = _chunk5JJ6EHEZcjs.centsBetweenFreq; exports.centsFromNearestStep = _chunk5JJ6EHEZcjs.centsFromNearestStep; exports.centsOfSteps = _chunk5JJ6EHEZcjs.centsOfSteps; exports.centsToRatio = _chunk5JJ6EHEZcjs.centsToRatio; exports.clampToMidi = _chunkXKSO2V5Icjs.clampToMidi; exports.classifyInterval = _chunkXKSO2V5Icjs.classifyInterval; exports.createNoteEventIndex = _chunkTT6PKMPRcjs.createNoteEventIndex; exports.createPositionalRng = _chunkJ772DL3Bcjs.createPositionalRng; exports.createRng = _chunkJ772DL3Bcjs.createRng; exports.deriveSeed = _chunkJ772DL3Bcjs.deriveSeed; exports.detectNoteNameSystem = _chunkXKSO2V5Icjs.detectNoteNameSystem; exports.diatonicLetterOf = _chunkXKSO2V5Icjs.diatonicLetterOf; exports.dropSilentNotes = _chunkXKSO2V5Icjs.dropSilentNotes; exports.durationToBeats = _chunk5JJ6EHEZcjs.durationToBeats; exports.durationToSeconds = _chunk5JJ6EHEZcjs.durationToSeconds; exports.edo = _chunk5JJ6EHEZcjs.edo; exports.fingeringsFor = _chunkJ772DL3Bcjs.fingeringsFor; exports.foldIntoRange = _chunkJ772DL3Bcjs.foldIntoRange; exports.formatBarPosition = _chunkXKSO2V5Icjs.formatBarPosition; exports.formatKeyName = _chunkXKSO2V5Icjs.formatKeyName; exports.formatNote = _chunkXKSO2V5Icjs.formatNote; exports.formatTimeSignature = _chunkXKSO2V5Icjs.formatTimeSignature; exports.frequencyOf = _chunk5JJ6EHEZcjs.frequencyOf; exports.includeAt = _chunkJ772DL3Bcjs.includeAt; exports.instrumentRange = _chunkJ772DL3Bcjs.instrumentRange; exports.intervalSemitones = _chunkXKSO2V5Icjs.intervalSemitones; exports.isCompound = _chunkXKSO2V5Icjs.isCompound; exports.isConsonantInterval = _chunkXKSO2V5Icjs.isConsonantInterval; exports.isLibcantusError = _chunkXKSO2V5Icjs.isLibcantusError; exports.isPerfectInterval = _chunkXKSO2V5Icjs.isPerfectInterval; exports.isStrongBeat = _chunkXKSO2V5Icjs.isStrongBeat; exports.justDeviationCents = _chunk5JJ6EHEZcjs.justDeviationCents; exports.meterAt = _chunkXKSO2V5Icjs.meterAt; exports.metricWeight = _chunkXKSO2V5Icjs.metricWeight; exports.midiToNote = _chunkXKSO2V5Icjs.midiToNote; exports.naturalPitchClassOf = _chunkXKSO2V5Icjs.naturalPitchClassOf; exports.nearestStep = _chunk5JJ6EHEZcjs.nearestStep; exports.noteToMidi = _chunkXKSO2V5Icjs.noteToMidi; exports.noteToPitchClass = _chunkXKSO2V5Icjs.noteToPitchClass; exports.parseInterval = _chunkXKSO2V5Icjs.parseInterval; exports.parseKeyName = _chunkXKSO2V5Icjs.parseKeyName; exports.parseNote = _chunkXKSO2V5Icjs.parseNote; exports.parseTimeSignature = _chunkXKSO2V5Icjs.parseTimeSignature; exports.pitchClassOf = _chunkXKSO2V5Icjs.pitchClassOf; exports.playability = _chunkJ772DL3Bcjs.playability; exports.pulseBeats = _chunkXKSO2V5Icjs.pulseBeats; exports.pulsesPerBar = _chunkXKSO2V5Icjs.pulsesPerBar; exports.ratioToCents = _chunk5JJ6EHEZcjs.ratioToCents; exports.resolveAlgorithmVersion = _chunkJ772DL3Bcjs.resolveAlgorithmVersion; exports.resolveMeters = _chunkXKSO2V5Icjs.resolveMeters; exports.secondsToBeats = _chunk5JJ6EHEZcjs.secondsToBeats; exports.soundingNotesOnly = _chunkXKSO2V5Icjs.soundingNotesOnly; exports.spelledInterval = _chunkXKSO2V5Icjs.spelledInterval; exports.stepOf = _chunk5JJ6EHEZcjs.stepOf; exports.stepsOfCents = _chunk5JJ6EHEZcjs.stepsOfCents; exports.tempoAt = _chunk5JJ6EHEZcjs.tempoAt; exports.ticksToBeats = _chunk5JJ6EHEZcjs.ticksToBeats; exports.toInstrumentProfile = _chunkJ772DL3Bcjs.toInstrumentProfile; exports.toMeterData = _chunkXKSO2V5Icjs.toMeterData; exports.toNoteData = _chunkXKSO2V5Icjs.toNoteData; exports.toSpelledInterval = _chunkXKSO2V5Icjs.toSpelledInterval; exports.toStringedProfile = _chunkJ772DL3Bcjs.toStringedProfile; exports.transposeByInterval = _chunkXKSO2V5Icjs.transposeByInterval; exports.transposeNote = _chunkXKSO2V5Icjs.transposeNote; exports.tryParseInterval = _chunkXKSO2V5Icjs.tryParseInterval; exports.tryParseKeyName = _chunkXKSO2V5Icjs.tryParseKeyName; exports.tryParseNote = _chunkXKSO2V5Icjs.tryParseNote; exports.tryParseTimeSignature = _chunkXKSO2V5Icjs.tryParseTimeSignature; exports.tuplet = _chunkXKSO2V5Icjs.tuplet;
231
+ exports.ALGORITHM_VERSION = _chunkCGBADIO5cjs.ALGORITHM_VERSION; exports.ARTICULATIONS = _chunkS5BKZZGMcjs.ARTICULATIONS; exports.BASS_4_STRING = _chunkCGBADIO5cjs.BASS_4_STRING; exports.BASS_5_STRING = _chunkCGBADIO5cjs.BASS_5_STRING; exports.BudgetExceededError = _chunkS5BKZZGMcjs.BudgetExceededError; exports.ConsonanceClass = _chunkS5BKZZGMcjs.ConsonanceClass; exports.DEFAULT_GENERATION_BUDGET = _chunkS5BKZZGMcjs.DEFAULT_GENERATION_BUDGET; exports.GUITAR_DROP_D = _chunkCGBADIO5cjs.GUITAR_DROP_D; exports.GUITAR_STANDARD = _chunkCGBADIO5cjs.GUITAR_STANDARD; exports.InvalidInputError = _chunkS5BKZZGMcjs.InvalidInputError; exports.JUST_RATIOS = _chunkNM7UAMC3cjs.JUST_RATIOS; exports.LIMBS = _chunkCGBADIO5cjs.LIMBS; exports.MIN_ALGORITHM_VERSION = _chunkCGBADIO5cjs.MIN_ALGORITHM_VERSION; exports.NOTE_VALUES = _chunkNM7UAMC3cjs.NOTE_VALUES; exports.NoSolutionError = _chunkS5BKZZGMcjs.NoSolutionError; exports.TWELVE_TET = _chunkNM7UAMC3cjs.TWELVE_TET; exports.assertDegree = _chunkS5BKZZGMcjs.assertDegree; exports.assertFiniteNumber = _chunkS5BKZZGMcjs.assertFiniteNumber; exports.assertFiniteSemitones = _chunkS5BKZZGMcjs.assertFiniteSemitones; exports.assertGenerationBudget = _chunkS5BKZZGMcjs.assertGenerationBudget; exports.assertInteger = _chunkS5BKZZGMcjs.assertInteger; exports.assertMeterMap = _chunkS5BKZZGMcjs.assertMeterMap; exports.assertMidiPitch = _chunkS5BKZZGMcjs.assertMidiPitch; exports.assertNoteEvent = _chunkS5BKZZGMcjs.assertNoteEvent; exports.assertNoteEvents = _chunkS5BKZZGMcjs.assertNoteEvents; exports.assertOneOf = _chunkS5BKZZGMcjs.assertOneOf; exports.assertPositiveInt = _chunkS5BKZZGMcjs.assertPositiveInt; exports.assertRange = _chunkS5BKZZGMcjs.assertRange; exports.assertTimeSignature = _chunkS5BKZZGMcjs.assertTimeSignature; exports.barIndexAt = _chunkS5BKZZGMcjs.barIndexAt; exports.barPositionToBeat = _chunkS5BKZZGMcjs.barPositionToBeat; exports.barPositionToPulse = _chunkS5BKZZGMcjs.barPositionToPulse; exports.barStartBeat = _chunkS5BKZZGMcjs.barStartBeat; exports.beatToBarPosition = _chunkS5BKZZGMcjs.beatToBarPosition; exports.beatsPerBar = _chunkS5BKZZGMcjs.beatsPerBar; exports.beatsPerBarAt = _chunkS5BKZZGMcjs.beatsPerBarAt; exports.beatsToDuration = _chunkNM7UAMC3cjs.beatsToDuration; exports.beatsToSeconds = _chunkNM7UAMC3cjs.beatsToSeconds; exports.beatsToTicks = _chunkNM7UAMC3cjs.beatsToTicks; exports.beatsToTiedDurations = _chunkNM7UAMC3cjs.beatsToTiedDurations; exports.canSound = _chunkCGBADIO5cjs.canSound; exports.centsBetweenFreq = _chunkNM7UAMC3cjs.centsBetweenFreq; exports.centsFromNearestStep = _chunkNM7UAMC3cjs.centsFromNearestStep; exports.centsOfSteps = _chunkNM7UAMC3cjs.centsOfSteps; exports.centsToRatio = _chunkNM7UAMC3cjs.centsToRatio; exports.clampToMidi = _chunkS5BKZZGMcjs.clampToMidi; exports.classifyInterval = _chunkS5BKZZGMcjs.classifyInterval; exports.createNoteEventIndex = _chunk35NBV2FTcjs.createNoteEventIndex; exports.createPositionalRng = _chunkCGBADIO5cjs.createPositionalRng; exports.createRng = _chunkCGBADIO5cjs.createRng; exports.deriveSeed = _chunkCGBADIO5cjs.deriveSeed; exports.detectNoteNameSystem = _chunkS5BKZZGMcjs.detectNoteNameSystem; exports.diatonicLetterOf = _chunkS5BKZZGMcjs.diatonicLetterOf; exports.dropSilentNotes = _chunkS5BKZZGMcjs.dropSilentNotes; exports.durationToBeats = _chunkNM7UAMC3cjs.durationToBeats; exports.durationToSeconds = _chunkNM7UAMC3cjs.durationToSeconds; exports.edo = _chunkNM7UAMC3cjs.edo; exports.fingeringsFor = _chunkCGBADIO5cjs.fingeringsFor; exports.foldIntoRange = _chunkCGBADIO5cjs.foldIntoRange; exports.formatBarPosition = _chunkS5BKZZGMcjs.formatBarPosition; exports.formatKeyName = _chunkS5BKZZGMcjs.formatKeyName; exports.formatNote = _chunkS5BKZZGMcjs.formatNote; exports.formatTimeSignature = _chunkS5BKZZGMcjs.formatTimeSignature; exports.frequencyOf = _chunkNM7UAMC3cjs.frequencyOf; exports.includeAt = _chunkCGBADIO5cjs.includeAt; exports.instrumentRange = _chunkCGBADIO5cjs.instrumentRange; exports.intervalSemitones = _chunkS5BKZZGMcjs.intervalSemitones; exports.isCompound = _chunkS5BKZZGMcjs.isCompound; exports.isConsonantInterval = _chunkS5BKZZGMcjs.isConsonantInterval; exports.isLibcantusError = _chunkS5BKZZGMcjs.isLibcantusError; exports.isPerfectInterval = _chunkS5BKZZGMcjs.isPerfectInterval; exports.isStrongBeat = _chunkS5BKZZGMcjs.isStrongBeat; exports.justDeviationCents = _chunkNM7UAMC3cjs.justDeviationCents; exports.meterAt = _chunkS5BKZZGMcjs.meterAt; exports.metricWeight = _chunkS5BKZZGMcjs.metricWeight; exports.midiToNote = _chunkS5BKZZGMcjs.midiToNote; exports.naturalPitchClassOf = _chunkS5BKZZGMcjs.naturalPitchClassOf; exports.nearestStep = _chunkNM7UAMC3cjs.nearestStep; exports.noteToMidi = _chunkS5BKZZGMcjs.noteToMidi; exports.noteToPitchClass = _chunkS5BKZZGMcjs.noteToPitchClass; exports.parseInterval = _chunkS5BKZZGMcjs.parseInterval; exports.parseKeyName = _chunkS5BKZZGMcjs.parseKeyName; exports.parseNote = _chunkS5BKZZGMcjs.parseNote; exports.parseTimeSignature = _chunkS5BKZZGMcjs.parseTimeSignature; exports.pitchClassOf = _chunkS5BKZZGMcjs.pitchClassOf; exports.playability = _chunkCGBADIO5cjs.playability; exports.pulseBeats = _chunkS5BKZZGMcjs.pulseBeats; exports.pulsesPerBar = _chunkS5BKZZGMcjs.pulsesPerBar; exports.ratioToCents = _chunkNM7UAMC3cjs.ratioToCents; exports.resolveAlgorithmVersion = _chunkCGBADIO5cjs.resolveAlgorithmVersion; exports.resolveMeters = _chunkS5BKZZGMcjs.resolveMeters; exports.secondsToBeats = _chunkNM7UAMC3cjs.secondsToBeats; exports.soundingNotesOnly = _chunkS5BKZZGMcjs.soundingNotesOnly; exports.spelledInterval = _chunkS5BKZZGMcjs.spelledInterval; exports.stepOf = _chunkNM7UAMC3cjs.stepOf; exports.stepsOfCents = _chunkNM7UAMC3cjs.stepsOfCents; exports.tempoAt = _chunkNM7UAMC3cjs.tempoAt; exports.ticksToBeats = _chunkNM7UAMC3cjs.ticksToBeats; exports.toInstrumentProfile = _chunkCGBADIO5cjs.toInstrumentProfile; exports.toMeterData = _chunkS5BKZZGMcjs.toMeterData; exports.toNoteData = _chunkS5BKZZGMcjs.toNoteData; exports.toSpelledInterval = _chunkS5BKZZGMcjs.toSpelledInterval; exports.toStringedProfile = _chunkCGBADIO5cjs.toStringedProfile; exports.transposeByInterval = _chunkS5BKZZGMcjs.transposeByInterval; exports.transposeNote = _chunkS5BKZZGMcjs.transposeNote; exports.tryParseInterval = _chunkS5BKZZGMcjs.tryParseInterval; exports.tryParseKeyName = _chunkS5BKZZGMcjs.tryParseKeyName; exports.tryParseNote = _chunkS5BKZZGMcjs.tryParseNote; exports.tryParseTimeSignature = _chunkS5BKZZGMcjs.tryParseTimeSignature; exports.tuplet = _chunkS5BKZZGMcjs.tuplet;
232
232
  //# sourceMappingURL=index.cjs.map
@@ -4,8 +4,8 @@ export { A as ARTICULATIONS, a as Articulation, B as BudgetExceededError, I as I
4
4
  import { f as StringedProfile } from '../positional-DMZer-FM.cjs';
5
5
  export { I as InstrumentProfile, a as InstrumentProfileCommon, b as InstrumentProfileLike, L as LIMBS, c as Limb, P as PercussionProfile, d as PositionalRng, S as SeedPath, e as StringFingering, V as ValidatedPercussionProfile, g as ValidatedProfile, h as ValidatedStringedProfile, i as canSound, j as createPositionalRng, k as deriveSeed, l as fingeringsFor, m as foldIntoRange, n as includeAt, o as instrumentRange, t as toInstrumentProfile, p as toStringedProfile } from '../positional-DMZer-FM.cjs';
6
6
  export { C as ConsonanceClass, c as classifyInterval, i as isConsonantInterval, a as isPerfectInterval } from '../index-DInQqT8Q.cjs';
7
- import { c as MeterMap, T as TimeSignature } from '../index-D_hzxD8w.cjs';
8
- export { B as BarPosition, M as MeterChange, a as MeterData, b as MeterLike, d as barIndexAt, e as barPositionToBeat, f as barPositionToPulse, g as barStartBeat, h as beatToBarPosition, i as beatsPerBar, j as beatsPerBarAt, k as formatBarPosition, l as formatTimeSignature, m as isCompound, n as isStrongBeat, o as meterAt, p as metricWeight, q as parseTimeSignature, r as pulseBeats, s as pulsesPerBar, t as resolveMeters, u as toMeterData, v as tryParseTimeSignature, w as tuplet } from '../index-D_hzxD8w.cjs';
7
+ import { c as MeterMap, T as TimeSignature } from '../index-BMweUlm5.cjs';
8
+ export { B as BarPosition, M as MeterChange, a as MeterData, b as MeterLike, d as barIndexAt, e as barPositionToBeat, f as barPositionToPulse, g as barStartBeat, h as beatToBarPosition, i as beatsPerBar, j as beatsPerBarAt, k as formatBarPosition, l as formatTimeSignature, m as isCompound, n as isStrongBeat, o as meterAt, p as metricWeight, q as parseTimeSignature, r as pulseBeats, s as pulsesPerBar, t as resolveMeters, u as toMeterData, v as tryParseTimeSignature, w as tuplet } from '../index-BMweUlm5.cjs';
9
9
 
10
10
  /**
11
11
  * Electric bass in standard tuning: E1 A1 D2 G2 over a 24-fret neck.
@@ -4,8 +4,8 @@ export { A as ARTICULATIONS, a as Articulation, B as BudgetExceededError, I as I
4
4
  import { f as StringedProfile } from '../positional-DJgs6ltD.js';
5
5
  export { I as InstrumentProfile, a as InstrumentProfileCommon, b as InstrumentProfileLike, L as LIMBS, c as Limb, P as PercussionProfile, d as PositionalRng, S as SeedPath, e as StringFingering, V as ValidatedPercussionProfile, g as ValidatedProfile, h as ValidatedStringedProfile, i as canSound, j as createPositionalRng, k as deriveSeed, l as fingeringsFor, m as foldIntoRange, n as includeAt, o as instrumentRange, t as toInstrumentProfile, p as toStringedProfile } from '../positional-DJgs6ltD.js';
6
6
  export { C as ConsonanceClass, c as classifyInterval, i as isConsonantInterval, a as isPerfectInterval } from '../index-DInQqT8Q.js';
7
- import { c as MeterMap, T as TimeSignature } from '../index-Ci3xyows.js';
8
- export { B as BarPosition, M as MeterChange, a as MeterData, b as MeterLike, d as barIndexAt, e as barPositionToBeat, f as barPositionToPulse, g as barStartBeat, h as beatToBarPosition, i as beatsPerBar, j as beatsPerBarAt, k as formatBarPosition, l as formatTimeSignature, m as isCompound, n as isStrongBeat, o as meterAt, p as metricWeight, q as parseTimeSignature, r as pulseBeats, s as pulsesPerBar, t as resolveMeters, u as toMeterData, v as tryParseTimeSignature, w as tuplet } from '../index-Ci3xyows.js';
7
+ import { c as MeterMap, T as TimeSignature } from '../index-CL4b4gUQ.js';
8
+ export { B as BarPosition, M as MeterChange, a as MeterData, b as MeterLike, d as barIndexAt, e as barPositionToBeat, f as barPositionToPulse, g as barStartBeat, h as beatToBarPosition, i as beatsPerBar, j as beatsPerBarAt, k as formatBarPosition, l as formatTimeSignature, m as isCompound, n as isStrongBeat, o as meterAt, p as metricWeight, q as parseTimeSignature, r as pulseBeats, s as pulsesPerBar, t as resolveMeters, u as toMeterData, v as tryParseTimeSignature, w as tuplet } from '../index-CL4b4gUQ.js';
9
9
 
10
10
  /**
11
11
  * Electric bass in standard tuning: E1 A1 D2 G2 over a 24-fret neck.
@@ -23,7 +23,7 @@ import {
23
23
  stepsOfCents,
24
24
  tempoAt,
25
25
  ticksToBeats
26
- } from "../chunk-HOHFYGKW.js";
26
+ } from "../chunk-UMWZ4ZET.js";
27
27
  import {
28
28
  ALGORITHM_VERSION,
29
29
  BASS_4_STRING,
@@ -44,10 +44,10 @@ import {
44
44
  resolveAlgorithmVersion,
45
45
  toInstrumentProfile,
46
46
  toStringedProfile
47
- } from "../chunk-X6RJAHII.js";
47
+ } from "../chunk-7KG3RTYS.js";
48
48
  import {
49
49
  createNoteEventIndex
50
- } from "../chunk-7GOKQJTQ.js";
50
+ } from "../chunk-PUKJP2Z5.js";
51
51
  import {
52
52
  ARTICULATIONS,
53
53
  BudgetExceededError,
@@ -116,7 +116,7 @@ import {
116
116
  tryParseNote,
117
117
  tryParseTimeSignature,
118
118
  tuplet
119
- } from "../chunk-PQL7E5F6.js";
119
+ } from "../chunk-AGOVW7U6.js";
120
120
  export {
121
121
  ALGORITHM_VERSION,
122
122
  ARTICULATIONS,
@@ -66,19 +66,19 @@
66
66
 
67
67
 
68
68
 
69
- var _chunk5KW7DNCJcjs = require('../chunk-5KW7DNCJ.cjs');
70
- require('../chunk-Q6R3QAZD.cjs');
71
- require('../chunk-J772DL3B.cjs');
72
- require('../chunk-TT6PKMPR.cjs');
73
- require('../chunk-R7B5N2JK.cjs');
74
- require('../chunk-YPB3A3EY.cjs');
75
- require('../chunk-XKSO2V5I.cjs');
76
69
 
77
70
 
78
71
 
79
72
 
80
73
 
81
74
 
75
+ var _chunkB2PW6EHNcjs = require('../chunk-B2PW6EHN.cjs');
76
+ require('../chunk-IFZDWIKM.cjs');
77
+ require('../chunk-CGBADIO5.cjs');
78
+ require('../chunk-35NBV2FT.cjs');
79
+ require('../chunk-PM4XJE2Y.cjs');
80
+ require('../chunk-3R3QVKY5.cjs');
81
+ require('../chunk-S5BKZZGM.cjs');
82
82
 
83
83
 
84
84
 
@@ -141,5 +141,17 @@ require('../chunk-XKSO2V5I.cjs');
141
141
 
142
142
 
143
143
 
144
- exports.BAR_STEPS = _chunk5KW7DNCJcjs.BAR_STEPS; exports.BASS_LICKS = _chunk5KW7DNCJcjs.BASS_LICKS; exports.BASS_STYLES = _chunk5KW7DNCJcjs.BASS_STYLES; exports.BEAT_STEPS = _chunk5KW7DNCJcjs.BEAT_STEPS; exports.BORROWED_DEGREES = _chunk5KW7DNCJcjs.BORROWED_DEGREES; exports.DRUM_KIT = _chunk5KW7DNCJcjs.DRUM_KIT; exports.DRUM_NOTES = _chunk5KW7DNCJcjs.DRUM_NOTES; exports.DRUM_PATTERNS = _chunk5KW7DNCJcjs.DRUM_PATTERNS; exports.FILL_ARCHETYPES = _chunk5KW7DNCJcjs.FILL_ARCHETYPES; exports.FILL_TYPES = _chunk5KW7DNCJcjs.FILL_TYPES; exports.GENRES = _chunk5KW7DNCJcjs.GENRES; exports.KICK_FIGURES = _chunk5KW7DNCJcjs.KICK_FIGURES; exports.KICK_STEPS = _chunk5KW7DNCJcjs.KICK_STEPS; exports.MAX_DIFFICULTY = _chunk5KW7DNCJcjs.MAX_DIFFICULTY; exports.MIN_DIFFICULTY = _chunk5KW7DNCJcjs.MIN_DIFFICULTY; exports.ORNAMENT_STYLES = _chunk5KW7DNCJcjs.ORNAMENT_STYLES; exports.PROVENANCE_BASES = _chunk5KW7DNCJcjs.PROVENANCE_BASES; exports.STEP_BEATS = _chunk5KW7DNCJcjs.STEP_BEATS; exports.applyGrooveTemplate = _chunk5KW7DNCJcjs.applyGrooveTemplate; exports.assertVocabulary = _chunk5KW7DNCJcjs.assertVocabulary; exports.classifyMelodyTones = _chunk5KW7DNCJcjs.classifyMelodyTones; exports.deform = _chunk5KW7DNCJcjs.deform; exports.developMotif = _chunk5KW7DNCJcjs.developMotif; exports.double = _chunk5KW7DNCJcjs.double; exports.doubleTime = _chunk5KW7DNCJcjs.doubleTime; exports.drumVoiceOf = _chunk5KW7DNCJcjs.drumVoiceOf; exports.extractGrooveTemplate = _chunk5KW7DNCJcjs.extractGrooveTemplate; exports.fitsQuery = _chunk5KW7DNCJcjs.fitsQuery; exports.generateBassLine = _chunk5KW7DNCJcjs.generateBassLine; exports.generateCounterMelody = _chunk5KW7DNCJcjs.generateCounterMelody; exports.generateDrums = _chunk5KW7DNCJcjs.generateDrums; exports.generateMotif = _chunk5KW7DNCJcjs.generateMotif; exports.generateProgression = _chunk5KW7DNCJcjs.generateProgression; exports.generateRhythm = _chunk5KW7DNCJcjs.generateRhythm; exports.gridMetricWeight = _chunk5KW7DNCJcjs.gridMetricWeight; exports.halfTime = _chunk5KW7DNCJcjs.halfTime; exports.harmonizeMelody = _chunk5KW7DNCJcjs.harmonizeMelody; exports.humanize = _chunk5KW7DNCJcjs.humanize; exports.imitate = _chunk5KW7DNCJcjs.imitate; exports.isDrumPattern = _chunk5KW7DNCJcjs.isDrumPattern; exports.isFillArchetype = _chunk5KW7DNCJcjs.isFillArchetype; exports.isLickMaterial = _chunk5KW7DNCJcjs.isLickMaterial; exports.mergeVocabulary = _chunk5KW7DNCJcjs.mergeVocabulary; exports.modalInterchangePalette = _chunk5KW7DNCJcjs.modalInterchangePalette; exports.motifToNoteEvents = _chunk5KW7DNCJcjs.motifToNoteEvents; exports.negativeHarmonyMirror = _chunk5KW7DNCJcjs.negativeHarmonyMirror; exports.onsetWeightCurve = _chunk5KW7DNCJcjs.onsetWeightCurve; exports.ornament = _chunk5KW7DNCJcjs.ornament; exports.ornamentBy = _chunk5KW7DNCJcjs.ornamentBy; exports.pickProgressionPreset = _chunk5KW7DNCJcjs.pickProgressionPreset; exports.pickVocabulary = _chunk5KW7DNCJcjs.pickVocabulary; exports.placeDrumPattern = _chunk5KW7DNCJcjs.placeDrumPattern; exports.placeLicks = _chunk5KW7DNCJcjs.placeLicks; exports.progressions = _chunk5KW7DNCJcjs.progressions; exports.progressionsByStyle = _chunk5KW7DNCJcjs.progressionsByStyle; exports.resolveContext = _chunk5KW7DNCJcjs.resolveContext; exports.rhythmDensity = _chunk5KW7DNCJcjs.rhythmDensity; exports.rhythmToNoteEvents = _chunk5KW7DNCJcjs.rhythmToNoteEvents; exports.selectVocabulary = _chunk5KW7DNCJcjs.selectVocabulary; exports.substituteChord = _chunk5KW7DNCJcjs.substituteChord; exports.sustainsShift = _chunk5KW7DNCJcjs.sustainsShift; exports.sustainsStrokes = _chunk5KW7DNCJcjs.sustainsStrokes; exports.syncopate = _chunk5KW7DNCJcjs.syncopate; exports.thin = _chunk5KW7DNCJcjs.thin; exports.transformMotif = _chunk5KW7DNCJcjs.transformMotif; exports.vocabularyOfKind = _chunk5KW7DNCJcjs.vocabularyOfKind; exports.withinCeiling = _chunk5KW7DNCJcjs.withinCeiling;
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+ exports.BAR_STEPS = _chunkB2PW6EHNcjs.BAR_STEPS; exports.BASS_LICKS = _chunkB2PW6EHNcjs.BASS_LICKS; exports.BASS_STYLES = _chunkB2PW6EHNcjs.BASS_STYLES; exports.BEAT_STEPS = _chunkB2PW6EHNcjs.BEAT_STEPS; exports.BORROWED_DEGREES = _chunkB2PW6EHNcjs.BORROWED_DEGREES; exports.COMPOSITION_PLAN_VERSION = _chunkB2PW6EHNcjs.COMPOSITION_PLAN_VERSION; exports.DRUM_KIT = _chunkB2PW6EHNcjs.DRUM_KIT; exports.DRUM_NOTES = _chunkB2PW6EHNcjs.DRUM_NOTES; exports.DRUM_PATTERNS = _chunkB2PW6EHNcjs.DRUM_PATTERNS; exports.FILL_ARCHETYPES = _chunkB2PW6EHNcjs.FILL_ARCHETYPES; exports.FILL_TYPES = _chunkB2PW6EHNcjs.FILL_TYPES; exports.GENRES = _chunkB2PW6EHNcjs.GENRES; exports.KICK_FIGURES = _chunkB2PW6EHNcjs.KICK_FIGURES; exports.KICK_STEPS = _chunkB2PW6EHNcjs.KICK_STEPS; exports.MAX_DIFFICULTY = _chunkB2PW6EHNcjs.MAX_DIFFICULTY; exports.MIN_DIFFICULTY = _chunkB2PW6EHNcjs.MIN_DIFFICULTY; exports.ORNAMENT_STYLES = _chunkB2PW6EHNcjs.ORNAMENT_STYLES; exports.PROVENANCE_BASES = _chunkB2PW6EHNcjs.PROVENANCE_BASES; exports.STEP_BEATS = _chunkB2PW6EHNcjs.STEP_BEATS; exports.applyGrooveTemplate = _chunkB2PW6EHNcjs.applyGrooveTemplate; exports.assertCompositionPlan = _chunkB2PW6EHNcjs.assertCompositionPlan; exports.assertVocabulary = _chunkB2PW6EHNcjs.assertVocabulary; exports.classifyMelodyTones = _chunkB2PW6EHNcjs.classifyMelodyTones; exports.deform = _chunkB2PW6EHNcjs.deform; exports.deriveCompositionPlan = _chunkB2PW6EHNcjs.deriveCompositionPlan; exports.developMotif = _chunkB2PW6EHNcjs.developMotif; exports.double = _chunkB2PW6EHNcjs.double; exports.doubleTime = _chunkB2PW6EHNcjs.doubleTime; exports.drumVoiceOf = _chunkB2PW6EHNcjs.drumVoiceOf; exports.evaluateComposition = _chunkB2PW6EHNcjs.evaluateComposition; exports.extractGrooveTemplate = _chunkB2PW6EHNcjs.extractGrooveTemplate; exports.fitsQuery = _chunkB2PW6EHNcjs.fitsQuery; exports.generateBassLine = _chunkB2PW6EHNcjs.generateBassLine; exports.generateCounterMelody = _chunkB2PW6EHNcjs.generateCounterMelody; exports.generateDrums = _chunkB2PW6EHNcjs.generateDrums; exports.generateMelody = _chunkB2PW6EHNcjs.generateMelody; exports.generateMotif = _chunkB2PW6EHNcjs.generateMotif; exports.generateProgression = _chunkB2PW6EHNcjs.generateProgression; exports.generateRhythm = _chunkB2PW6EHNcjs.generateRhythm; exports.gridMetricWeight = _chunkB2PW6EHNcjs.gridMetricWeight; exports.halfTime = _chunkB2PW6EHNcjs.halfTime; exports.harmonizeMelody = _chunkB2PW6EHNcjs.harmonizeMelody; exports.humanize = _chunkB2PW6EHNcjs.humanize; exports.imitate = _chunkB2PW6EHNcjs.imitate; exports.isDrumPattern = _chunkB2PW6EHNcjs.isDrumPattern; exports.isFillArchetype = _chunkB2PW6EHNcjs.isFillArchetype; exports.isLickMaterial = _chunkB2PW6EHNcjs.isLickMaterial; exports.mergeVocabulary = _chunkB2PW6EHNcjs.mergeVocabulary; exports.modalInterchangePalette = _chunkB2PW6EHNcjs.modalInterchangePalette; exports.motifToNoteEvents = _chunkB2PW6EHNcjs.motifToNoteEvents; exports.negativeHarmonyMirror = _chunkB2PW6EHNcjs.negativeHarmonyMirror; exports.onsetWeightCurve = _chunkB2PW6EHNcjs.onsetWeightCurve; exports.ornament = _chunkB2PW6EHNcjs.ornament; exports.ornamentBy = _chunkB2PW6EHNcjs.ornamentBy; exports.pickProgressionPreset = _chunkB2PW6EHNcjs.pickProgressionPreset; exports.pickVocabulary = _chunkB2PW6EHNcjs.pickVocabulary; exports.placeDrumPattern = _chunkB2PW6EHNcjs.placeDrumPattern; exports.placeLicks = _chunkB2PW6EHNcjs.placeLicks; exports.planTimeline = _chunkB2PW6EHNcjs.planTimeline; exports.progressions = _chunkB2PW6EHNcjs.progressions; exports.progressionsByStyle = _chunkB2PW6EHNcjs.progressionsByStyle; exports.resolveContext = _chunkB2PW6EHNcjs.resolveContext; exports.rhythmDensity = _chunkB2PW6EHNcjs.rhythmDensity; exports.rhythmToNoteEvents = _chunkB2PW6EHNcjs.rhythmToNoteEvents; exports.selectVocabulary = _chunkB2PW6EHNcjs.selectVocabulary; exports.substituteChord = _chunkB2PW6EHNcjs.substituteChord; exports.sustainsShift = _chunkB2PW6EHNcjs.sustainsShift; exports.sustainsStrokes = _chunkB2PW6EHNcjs.sustainsStrokes; exports.syncopate = _chunkB2PW6EHNcjs.syncopate; exports.thin = _chunkB2PW6EHNcjs.thin; exports.transformMotif = _chunkB2PW6EHNcjs.transformMotif; exports.vocabularyOfKind = _chunkB2PW6EHNcjs.vocabularyOfKind; exports.withinCeiling = _chunkB2PW6EHNcjs.withinCeiling;
145
157
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/libcantus/libcantus/dist/generate/index.cjs"],"names":[],"mappings":"AAAA;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;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;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;AACF,oxHAAC","file":"/home/runner/work/libcantus/libcantus/dist/generate/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/libcantus/libcantus/dist/generate/index.cjs"],"names":[],"mappings":"AAAA;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;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;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;AACF,4qIAAC","file":"/home/runner/work/libcantus/libcantus/dist/generate/index.cjs"}
@@ -1,15 +1,16 @@
1
+ import { b as MeterLike } from '../index-BMweUlm5.cjs';
2
+ export { M as MeterChange, c as MeterMap, T as TimeSignature } from '../index-BMweUlm5.cjs';
1
3
  import { h as NoteEvent, a as Articulation, b as IntervalLike } from '../index-Cy15oTvh.cjs';
2
4
  export { I as IntervalData, c as IntervalQualityLabel, e as KeyScale, g as NoteData, S as SpelledInterval } from '../index-Cy15oTvh.cjs';
3
- import { e as ChordSegment, c as ChordLike, K as KeyLike } from '../coerce-CJlgULrQ.cjs';
4
- export { b as ChordData, d as ChordQuality, g as ChordSpan, i as ChordToneRole, k as KeyVariant, l as PitchSpelling, m as ProfileWeights, n as ResolvedKey, q as SpelledKeyLike, r as SpelledKeyScale } from '../coerce-CJlgULrQ.cjs';
5
- export { B as BorrowedSource, e as ChordTimeline, H as HarmonicFunction } from '../index-B3WCj_Hm.cjs';
5
+ import { e as ChordSegment, c as ChordLike, K as KeyLike } from '../coerce-DRERzdve.cjs';
6
+ export { b as ChordData, d as ChordQuality, g as ChordSpan, i as ChordToneRole, k as KeyVariant, l as PitchSpelling, m as ProfileWeights, n as ResolvedKey, r as SpelledKeyLike, s as SpelledKeyScale } from '../coerce-DRERzdve.cjs';
7
+ import { h as ChordTimeline } from '../types-D-XgxGvp.cjs';
8
+ export { B as BarPositionProfile, b as BorrowedSource, e as CadenceType, F as FormSection, o as HarmonicFunction, v as MelodicContourShape, y as MotifGraph, z as MotifGraphEdge, G as MotifGraphNode, P as MotifRelationSummary, X as ReductionLevel, Y as ReferenceCadence, Z as ReferenceChord, _ as ReferenceForm, $ as ReferenceHarmony, a0 as ReferenceKeyRegion, a1 as ReferenceMelody, a2 as ReferenceMotif, a3 as ReferencePhrase, a4 as ReferencePhraseMelody, a5 as ReferenceProfile, a7 as RhythmAnalysis } from '../types-D-XgxGvp.cjs';
6
9
  import { f as StringedProfile, P as PercussionProfile, c as Limb } from '../positional-DMZer-FM.cjs';
7
10
  export { I as InstrumentProfile, a as InstrumentProfileCommon, d as PositionalRng, S as SeedPath } from '../positional-DMZer-FM.cjs';
8
- import { b as MeterLike } from '../index-D_hzxD8w.cjs';
9
- export { M as MeterChange, c as MeterMap, T as TimeSignature } from '../index-D_hzxD8w.cjs';
10
- export { H as HarmonyRole } from '../index-CBCP84rv.cjs';
11
- import { r as Genre, q as GenerationContextInput, a4 as Vocabulary, s as GridEvent, m as DrumStyle, $ as Section, n as DrumVoice, t as GrooveFeel, k as DrumHit, H as HarmonizeOptions, y as HarmonizeResult } from '../index-BzLNkmA7.cjs';
12
- export { B as BAR_STEPS, a as BASS_STYLES, b as BEAT_STEPS, c as BORROWED_DEGREES, d as BassLineOptions, e as BassSegment, f as BassStyle, g as BorrowedChord, C as Complexity, h as CounterMelodyOptions, D as DRUM_NOTES, i as DeformOptions, j as Draw, l as DrumRole, o as DrumsOptions, E as EuclideanKick, G as GENRES, p as GenerationContext, u as GrooveSlot, v as GrooveStyle, w as GrooveTemplate, x as HarmonizePlacement, z as HumanizeOptions, M as MelodyNote, A as MotifCell, F as MotifContour, I as MotifNote, J as MotifOptions, K as MotifTransform, O as ORNAMENT_STYLES, L as OrnamentOptions, N as OrnamentStyle, P as PROVENANCE_BASES, Q as ProgFunction, R as ProgStyle, S as ProgressionDegree, T as ProgressionOptions, U as ProgressionPreset, V as Provenance, W as ProvenanceBasis, X as ResolvedContext, Y as RhythmEvent, Z as RhythmOptions, _ as STEP_BEATS, a0 as SubstituteOptions, a1 as Substitution, a2 as SubstitutionType, a3 as SyncopateOptions, a5 as VocabularyQuery, a6 as applyGrooveTemplate, a7 as assertVocabulary, a8 as deform, a9 as developMotif, aa as double, ab as doubleTime, ac as drumVoiceOf, ad as extractGrooveTemplate, ae as fitsQuery, af as generateBassLine, ag as generateCounterMelody, ah as generateDrums, ai as generateMotif, aj as generateProgression, ak as generateRhythm, al as gridMetricWeight, am as halfTime, an as humanize, ao as mergeVocabulary, ap as modalInterchangePalette, aq as motifToNoteEvents, ar as negativeHarmonyMirror, as as onsetWeightCurve, at as ornament, au as ornamentBy, av as pickProgressionPreset, aw as pickVocabulary, ax as progressions, ay as progressionsByStyle, az as resolveContext, aA as rhythmDensity, aB as rhythmToNoteEvents, aC as selectVocabulary, aD as substituteChord, aE as syncopate, aF as thin, aG as transformMotif, aH as vocabularyOfKind, aI as withinCeiling } from '../index-BzLNkmA7.cjs';
11
+ export { H as HarmonyRole } from '../index-BL5N2Oyz.cjs';
12
+ import { x as Genre, w as GenerationContextInput, ah as Vocabulary, y as GridEvent, r as DrumStyle, ac as Section, s as DrumVoice, z as GrooveFeel, p as DrumHit, I as HarmonizeOptions, K as HarmonizeResult, j as CompositionPlan } from '../index-CY-3NVfy.cjs';
13
+ export { B as BAR_STEPS, a as BASS_STYLES, b as BEAT_STEPS, c as BORROWED_DEGREES, d as BassLineOptions, e as BassSegment, f as BassStyle, g as BorrowedChord, C as COMPOSITION_PLAN_VERSION, h as Complexity, i as CompositionEvaluation, k as CompositionPlanOptions, l as CompositionViolation, m as CounterMelodyOptions, D as DRUM_NOTES, n as DeformOptions, o as Draw, q as DrumRole, t as DrumsOptions, E as EuclideanKick, u as EvaluateCompositionOptions, G as GENRES, v as GenerationContext, A as GrooveSlot, F as GrooveStyle, H as GrooveTemplate, J as HarmonizePlacement, L as HumanizeOptions, M as MelodyNote, N as MelodyOptions, O as MotifCell, P as MotifContour, Q as MotifNote, R as MotifOptions, S as MotifTransform, T as ORNAMENT_STYLES, U as OrnamentOptions, V as OrnamentStyle, W as PROVENANCE_BASES, X as PlannedChord, Y as PlannedMotif, Z as PlannedPhrase, _ as PlannedRhythm, $ as PlannedSection, a0 as PreserveWeights, a1 as ProgFunction, a2 as ProgStyle, a3 as ProgressionDegree, a4 as ProgressionOptions, a5 as ProgressionPreset, a6 as Provenance, a7 as ProvenanceBasis, a8 as ResolvedContext, a9 as RhythmEvent, aa as RhythmOptions, ab as STEP_BEATS, ad as SubstituteOptions, ae as Substitution, af as SubstitutionType, ag as SyncopateOptions, ai as VocabularyQuery, aj as applyGrooveTemplate, ak as assertVocabulary, al as deform, am as deriveCompositionPlan, an as developMotif, ao as double, ap as doubleTime, aq as drumVoiceOf, ar as evaluateComposition, as as extractGrooveTemplate, at as fitsQuery, au as generateBassLine, av as generateCounterMelody, aw as generateDrums, ax as generateMelody, ay as generateMotif, az as generateProgression, aA as generateRhythm, aB as gridMetricWeight, aC as halfTime, aD as humanize, aE as mergeVocabulary, aF as modalInterchangePalette, aG as motifToNoteEvents, aH as negativeHarmonyMirror, aI as onsetWeightCurve, aJ as ornament, aK as ornamentBy, aL as pickProgressionPreset, aM as pickVocabulary, aN as progressions, aO as progressionsByStyle, aP as resolveContext, aQ as rhythmDensity, aR as rhythmToNoteEvents, aS as selectVocabulary, aT as substituteChord, aU as syncopate, aV as thin, aW as transformMotif, aX as vocabularyOfKind, aY as withinCeiling } from '../index-CY-3NVfy.cjs';
13
14
 
14
15
  /**
15
16
  * The playing-difficulty ceiling, as the generators apply it.
@@ -717,4 +718,81 @@ declare function classifyMelodyTones(melody: readonly NoteEvent[], ts: MeterLike
717
718
  */
718
719
  declare function harmonizeMelody(opts: HarmonizeOptions): HarmonizeResult;
719
720
 
720
- export { Articulation, BASS_LICKS, type BassLick, ChordLike, ChordSegment, type ClassifiedMelodyTone, DRUM_KIT, DRUM_PATTERNS, DrumHit, type DrumPattern, type DrumPatternOptions, type DrumStroke, DrumStyle, type DrumVocabulary, DrumVoice, FILL_ARCHETYPES, FILL_TYPES, type FillArchetype, type FillStroke, type FillType, type FillVelocity, GenerationContextInput, Genre, GridEvent, GrooveFeel, HarmonizeOptions, HarmonizeResult, type ImitationAnswer, type ImitationOptions, IntervalLike, KICK_FIGURES, KICK_STEPS, KeyLike, type KickFigure, type KickPattern, type KickSlot, type LickMaterial, type LickNote, Limb, MAX_DIFFICULTY, MIN_DIFFICULTY, type MelodyToneRole, MeterLike, NoteEvent, PercussionProfile, type PlaceLicksOptions, Section, StringedProfile, Vocabulary, classifyMelodyTones, harmonizeMelody, imitate, isDrumPattern, isFillArchetype, isLickMaterial, placeDrumPattern, placeLicks, sustainsShift, sustainsStrokes };
721
+ /**
722
+ * Reading a {@link CompositionPlan}'s harmony as a chord timeline.
723
+ *
724
+ * Kept apart from the plan types so the public reader can validate its plan
725
+ * without the types module importing the validator that imports it.
726
+ */
727
+
728
+ /**
729
+ * Read a plan's harmony as a chord timeline.
730
+ *
731
+ * The one way a generator or an evaluator reads chords out of a plan: each
732
+ * entry in `plan.harmony` is resolved against its key and placed at its own
733
+ * beat, so the timeline this returns always agrees with the plan it was built
734
+ * from.
735
+ *
736
+ * @param plan The plan to read harmony from.
737
+ * @returns A chord timeline spanning `plan.span`.
738
+ * @throws {InvalidInputError} If the plan is not a valid composition plan.
739
+ * @example
740
+ * ```ts
741
+ * import { planTimeline, resolveKey } from '@libraz/libcantus';
742
+ * const plan = {
743
+ * planVersion: 1, seed: 0, algorithmVersion: 1,
744
+ * keys: [resolveKey('C major')], meters: [{ startBeat: 0, ts: { numerator: 4, denominator: 4 } }],
745
+ * span: { startBeat: 0, endBeat: 4, bars: 1 }, sections: [], phrases: [],
746
+ * harmony: [{ startBeat: 0, endBeat: 4, key: 0, roman: 'I' }], motifs: [],
747
+ * rhythm: { onsetLevels: [1, 0, 0, 0, 0, 0], interOnsetShares: new Array(17).fill(0).fill(1, 8, 9), syncopation: 0 },
748
+ * };
749
+ * planTimeline(plan).at(0); // the I chord in C major
750
+ * ```
751
+ * @category Composition
752
+ */
753
+ declare function planTimeline(plan: CompositionPlan): ChordTimeline;
754
+
755
+ /**
756
+ * Boundary validation for {@link CompositionPlan}: a caller can hand this a
757
+ * value restored from JSON, a config file, or a plugin host, and every field
758
+ * is checked before a generator or evaluator reads it. A violation names the
759
+ * path to the offending field, so a malformed document is diagnosed at the
760
+ * field that is wrong rather than wherever the first bad read happens to land.
761
+ */
762
+
763
+ /**
764
+ * Reject a value that is not a {@link CompositionPlan}.
765
+ *
766
+ * A plan is the shape a caller's stored JSON, a config file, or a plugin host
767
+ * most plausibly hands back malformed: a missing field, a distribution that no
768
+ * longer sums to 1, an index a later edit left dangling, a numeral no reader
769
+ * can parse, a derivation that points at itself or at a later motif. Every
770
+ * field is checked before a generator or evaluator reads it, and a violation
771
+ * names the path to the field that is wrong.
772
+ *
773
+ * @param value The value to check.
774
+ * @param name What the value is, for the error message.
775
+ * @returns The same plan.
776
+ * @throws {InvalidInputError} If the value is not a valid composition plan.
777
+ * @example
778
+ * ```ts
779
+ * import { assertCompositionPlan } from '@libraz/libcantus';
780
+ * import { resolveKey } from '@libraz/libcantus';
781
+ * const plan = {
782
+ * planVersion: 1, seed: 0, algorithmVersion: 1,
783
+ * keys: [resolveKey('C major')],
784
+ * meters: [{ startBeat: 0, ts: { numerator: 4, denominator: 4 } }],
785
+ * span: { startBeat: 0, endBeat: 4, bars: 1 },
786
+ * sections: [{ label: 'A', startBeat: 0, endBeat: 4 }],
787
+ * phrases: [],
788
+ * harmony: [{ startBeat: 0, endBeat: 4, key: 0, roman: 'I' }],
789
+ * motifs: [],
790
+ * rhythm: { onsetLevels: [1, 0, 0, 0, 0, 0], interOnsetShares: new Array(17).fill(0).fill(1, 8, 9), syncopation: 0 },
791
+ * };
792
+ * assertCompositionPlan(plan); // the plan, unchanged
793
+ * ```
794
+ * @category Composition
795
+ */
796
+ declare function assertCompositionPlan(value: unknown, name?: string): CompositionPlan;
797
+
798
+ export { Articulation, BASS_LICKS, type BassLick, ChordLike, ChordSegment, ChordTimeline, type ClassifiedMelodyTone, CompositionPlan, DRUM_KIT, DRUM_PATTERNS, DrumHit, type DrumPattern, type DrumPatternOptions, type DrumStroke, DrumStyle, type DrumVocabulary, DrumVoice, FILL_ARCHETYPES, FILL_TYPES, type FillArchetype, type FillStroke, type FillType, type FillVelocity, GenerationContextInput, Genre, GridEvent, GrooveFeel, HarmonizeOptions, HarmonizeResult, type ImitationAnswer, type ImitationOptions, IntervalLike, KICK_FIGURES, KICK_STEPS, KeyLike, type KickFigure, type KickPattern, type KickSlot, type LickMaterial, type LickNote, Limb, MAX_DIFFICULTY, MIN_DIFFICULTY, type MelodyToneRole, MeterLike, NoteEvent, PercussionProfile, type PlaceLicksOptions, Section, StringedProfile, Vocabulary, assertCompositionPlan, classifyMelodyTones, harmonizeMelody, imitate, isDrumPattern, isFillArchetype, isLickMaterial, placeDrumPattern, placeLicks, planTimeline, sustainsShift, sustainsStrokes };